Compare commits
	
		
			98 Commits
		
	
	
		
			mesa-24.1.
			...
			mesa_3_4
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e5c8261f76 | ||
| 
						 | 
					57db1be417 | ||
| 
						 | 
					ebeb5da82c | ||
| 
						 | 
					bd1b6ef5af | ||
| 
						 | 
					672da3532f | ||
| 
						 | 
					554cd6ba8c | ||
| 
						 | 
					585b358204 | ||
| 
						 | 
					1a87813f14 | ||
| 
						 | 
					fab2936ea2 | ||
| 
						 | 
					510d86231d | ||
| 
						 | 
					183e09ee42 | ||
| 
						 | 
					feb83f991e | ||
| 
						 | 
					5c4f8bdfc7 | ||
| 
						 | 
					16deaa9c49 | ||
| 
						 | 
					12dbb90d4a | ||
| 
						 | 
					0bf5284850 | ||
| 
						 | 
					e3650179c6 | ||
| 
						 | 
					c089afb55b | ||
| 
						 | 
					bfaab253d1 | ||
| 
						 | 
					4c782b7470 | ||
| 
						 | 
					fceecc5bc1 | ||
| 
						 | 
					cb5d29cd17 | ||
| 
						 | 
					807544498a | ||
| 
						 | 
					17f2610d03 | ||
| 
						 | 
					00935d9eab | ||
| 
						 | 
					c8c04359dd | ||
| 
						 | 
					534bc2e2a9 | ||
| 
						 | 
					82960fbf69 | ||
| 
						 | 
					b0c8df81ab | ||
| 
						 | 
					ceab228540 | ||
| 
						 | 
					03614d2f33 | ||
| 
						 | 
					e17c1d2202 | ||
| 
						 | 
					e27b783426 | ||
| 
						 | 
					18ef8e7c98 | ||
| 
						 | 
					b34a9dab57 | ||
| 
						 | 
					7a13c83663 | ||
| 
						 | 
					d4e84664a5 | ||
| 
						 | 
					29f19424ab | ||
| 
						 | 
					813e8585a6 | ||
| 
						 | 
					88337d5109 | ||
| 
						 | 
					77a5bab1a3 | ||
| 
						 | 
					de63653835 | ||
| 
						 | 
					2f095b9b09 | ||
| 
						 | 
					94b61f99c4 | ||
| 
						 | 
					44b450728d | ||
| 
						 | 
					bc2b379ad0 | ||
| 
						 | 
					f35a545d4f | ||
| 
						 | 
					0248965561 | ||
| 
						 | 
					29fb6b3525 | ||
| 
						 | 
					93bff74a02 | ||
| 
						 | 
					211c30cbc9 | ||
| 
						 | 
					1ef3d8407b | ||
| 
						 | 
					b64ede6f45 | ||
| 
						 | 
					a11f829108 | ||
| 
						 | 
					5715ee5d5d | ||
| 
						 | 
					08056a38ee | ||
| 
						 | 
					2591e8f1db | ||
| 
						 | 
					b92036499d | ||
| 
						 | 
					60a0b0d7c6 | ||
| 
						 | 
					c68f4fb958 | ||
| 
						 | 
					b9a3c2b3ce | ||
| 
						 | 
					2cddd4cd79 | ||
| 
						 | 
					052512e2ec | ||
| 
						 | 
					dc1e96acdc | ||
| 
						 | 
					0eb94349b6 | ||
| 
						 | 
					846101fe60 | ||
| 
						 | 
					9af68b1222 | ||
| 
						 | 
					5c4431cc0a | ||
| 
						 | 
					308b5f2e0d | ||
| 
						 | 
					013a664712 | ||
| 
						 | 
					52eee51001 | ||
| 
						 | 
					5d62414004 | ||
| 
						 | 
					5917ec0983 | ||
| 
						 | 
					06e32f455f | ||
| 
						 | 
					0ead11e448 | ||
| 
						 | 
					3edbaf7de6 | ||
| 
						 | 
					e6d349d8e4 | ||
| 
						 | 
					c25a8f9317 | ||
| 
						 | 
					9f5ddba23f | ||
| 
						 | 
					f5de04549e | ||
| 
						 | 
					fb027ada34 | ||
| 
						 | 
					e990e8c166 | ||
| 
						 | 
					394ecbde83 | ||
| 
						 | 
					7ea41a18a5 | ||
| 
						 | 
					262112dafa | ||
| 
						 | 
					e0fd3762ce | ||
| 
						 | 
					1274afbe0b | ||
| 
						 | 
					5f9760b572 | ||
| 
						 | 
					107c1a4d40 | ||
| 
						 | 
					809c5a7fc7 | ||
| 
						 | 
					aaab86427a | ||
| 
						 | 
					5e2c92b8b6 | ||
| 
						 | 
					84e8b8ea5a | ||
| 
						 | 
					051690168a | ||
| 
						 | 
					652f3b41c1 | ||
| 
						 | 
					c5e6547a95 | ||
| 
						 | 
					bc8257a729 | ||
| 
						 | 
					b353233325 | 
							
								
								
									
										442
									
								
								Make-config
									
									
									
									
									
								
							
							
						
						
									
										442
									
								
								Make-config
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
# $Id: Make-config,v 1.25 2000/06/08 15:19:12 brianp Exp $
 | 
			
		||||
# $Id: Make-config,v 1.25.4.5 2000/11/03 01:58:06 brianp Exp $
 | 
			
		||||
 | 
			
		||||
MESA_MAJOR=3
 | 
			
		||||
MESA_MINOR=3
 | 
			
		||||
MESA_MINOR=4
 | 
			
		||||
MESA_TINY=0
 | 
			
		||||
VERSION=$(MESA_MAJOR).$(MESA_MINOR)
 | 
			
		||||
 | 
			
		||||
@@ -200,7 +200,11 @@ freebsd-386:
 | 
			
		||||
	"CFLAGS = -O3 -ffast-math -fPIC -pedantic -I/usr/X11R6/include -DUSE_XSHM -DHZ=100 -DUSE_X86_ASM -DFREEBSD" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.freebsd" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/X11R6/lib -lXext -lXmu -lXi -lX11 -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S"
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S"
 | 
			
		||||
 | 
			
		||||
gcc:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
@@ -467,136 +471,7 @@ linux-static:
 | 
			
		||||
	"MAKELIB = ../bin/mklib.ar-ruv" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm -lpthread"
 | 
			
		||||
 | 
			
		||||
linux-386:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM  -DPTHREADS -I/usr/X11R6/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S X86/vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-386-static:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.a" \
 | 
			
		||||
	"GLU_LIB = libGLU.a" \
 | 
			
		||||
	"GLUT_LIB = libglut.a" \
 | 
			
		||||
	"GLW_LIB = libGLw.a" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O3 -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DPTHREADS -I/usr/X11R6/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.ar-ruv" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm -lpthread" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S X86/vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-glide:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DFX -DPTHREADS -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -L/usr/local/glide/lib -lglide2x" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lglut -lGLU -lGL"
 | 
			
		||||
 | 
			
		||||
linux-386-glide:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_XSHM -DFX -DPTHREADS -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -L/usr/local/glide/lib -lglide2x -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S X86/vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-386-opt-V2-glide:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O3 -m486 -fomit-frame-pointer -pipe -ansi -pedantic -ffast-math -fexpensive-optimizations -malign-loops=2 -malign-jumps=2 -malign-functions=2 -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DFX -DFX_V2 -DUSE_X86_ASM -DPTHREAD -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include"\
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -L/usr/local/glide/lib -lglide2x -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S X86/vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-386-opt-glide:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O3 -m486 -fomit-frame-pointer -pipe -ansi -pedantic -ffast-math -fexpensive-optimizations -malign-loops=2 -malign-jumps=2 -malign-functions=2 -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DFX -DUSE_X86_ASM -DPTHREADS -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -L/usr/local/glide/lib -lglide2x -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S X86/vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-3dnow:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc -malign-loops=2 -malign-jumps=2 -malign-functions=2" \
 | 
			
		||||
	"CFLAGS = -Wall -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DPTHREADS -I/usr/X11R6/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S \
 | 
			
		||||
	X86/mmx_blend.S \
 | 
			
		||||
	X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
	X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
	X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
	X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
	X86/3dnow_norm_raw.S X86/vertex.S X86/vertex_3dnow.S" 
 | 
			
		||||
 | 
			
		||||
linux-3dnow-glide:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc -malign-loops=2 -malign-jumps=2 -malign-functions=2" \
 | 
			
		||||
	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_XSHM -DFX -DPTHREADS -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include -I/usr/src/mesa-glx/src/FX/X86" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -L/usr/local/glide/lib -lglide2x -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S \
 | 
			
		||||
	X86/mmx_blend.S \
 | 
			
		||||
	X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
	X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
	X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
	X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
	X86/3dnow_norm_raw.S X86/vertex.S X86/vertex_3dnow.S \
 | 
			
		||||
	FX/X86/fx_3dnow_fastpath.S"
 | 
			
		||||
 | 
			
		||||
linux-katmai:
 | 
			
		||||
linux-x86:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
@@ -609,47 +484,52 @@ linux-katmai:
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S \
 | 
			
		||||
	X86/mmx_blend.S \
 | 
			
		||||
	X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
	X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
	X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
	X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
	X86/3dnow_norm_raw.S X86/vertex.S X86/vertex_3dnow.S \
 | 
			
		||||
	X86/katmai_norm_raw.S \
 | 
			
		||||
	X86/katmai_xform_raw1.S X86/katmai_xform_masked1.S \
 | 
			
		||||
	X86/katmai_xform_raw2.S X86/katmai_xform_masked2.S \
 | 
			
		||||
	X86/katmai_xform_raw3.S X86/katmai_xform_masked3.S \
 | 
			
		||||
	X86/katmai_xform_raw4.S X86/katmai_xform_masked4.S \
 | 
			
		||||
	X86/vertex_katmai.S"
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S \
 | 
			
		||||
		X86/mmx_blend.S \
 | 
			
		||||
		X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
		X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
		X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
		X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
		X86/3dnow_norm_raw.S X86/3dnow_vertex.S \
 | 
			
		||||
		X86/katmai_xform_raw1.S X86/katmai_xform_masked1.S \
 | 
			
		||||
		X86/katmai_xform_raw2.S X86/katmai_xform_masked2.S \
 | 
			
		||||
		X86/katmai_xform_raw3.S X86/katmai_xform_masked3.S \
 | 
			
		||||
		X86/katmai_xform_raw4.S X86/katmai_xform_masked4.S \
 | 
			
		||||
		X86/katmai_norm_raw.S X86/katmai_vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-katmai-glide:
 | 
			
		||||
linux-x86-static:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"GL_LIB = libGL.a" \
 | 
			
		||||
	"GLU_LIB = libGLU.a" \
 | 
			
		||||
	"GLUT_LIB = libglut.a" \
 | 
			
		||||
	"GLW_LIB = libGLw.a" \
 | 
			
		||||
	"CC = gcc -malign-loops=2 -malign-jumps=2 -malign-functions=2" \
 | 
			
		||||
	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -DUSE_XSHM -DFX -DPTHREADS -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include -I/usr/src/mesa-glx/src/FX/X86" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -L/usr/local/glide/lib -lglide2x -lm -lpthread" \
 | 
			
		||||
	"CFLAGS = -Wall -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -DPTHREADS -I/usr/X11R6/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.ar-ruv" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S \
 | 
			
		||||
	X86/mmx_blend.S \
 | 
			
		||||
	X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
	X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
	X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
	X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
	X86/3dnow_norm_raw.S X86/vertex.S X86/vertex_3dnow.S \
 | 
			
		||||
	FX/X86/fx_3dnow_fastpath.S \
 | 
			
		||||
	X86/katmai_norm_raw.S \
 | 
			
		||||
	X86/katmai_xform_raw1.S X86/katmai_xform_masked1.S \
 | 
			
		||||
	X86/katmai_xform_raw2.S X86/katmai_xform_masked2.S \
 | 
			
		||||
	X86/katmai_xform_raw3.S X86/katmai_xform_masked3.S \
 | 
			
		||||
	X86/katmai_xform_raw4.S X86/katmai_xform_masked4.S \
 | 
			
		||||
	X86/vertex_katmai.S" 
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S \
 | 
			
		||||
		X86/mmx_blend.S \
 | 
			
		||||
		X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
		X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
		X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
		X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
		X86/3dnow_norm_raw.S X86/3dnow_vertex.S \
 | 
			
		||||
		X86/katmai_xform_raw1.S X86/katmai_xform_masked1.S \
 | 
			
		||||
		X86/katmai_xform_raw2.S X86/katmai_xform_masked2.S \
 | 
			
		||||
		X86/katmai_xform_raw3.S X86/katmai_xform_masked3.S \
 | 
			
		||||
		X86/katmai_xform_raw4.S X86/katmai_xform_masked4.S \
 | 
			
		||||
		X86/katmai_norm_raw.S X86/katmai_vertex.S"
 | 
			
		||||
 | 
			
		||||
# Contributed by Uwe_Maurer@t-online.de
 | 
			
		||||
linux-ggi:
 | 
			
		||||
@@ -674,7 +554,113 @@ linux-386-ggi:
 | 
			
		||||
	"CFLAGS = -O3 -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM -DUSE_X86_ASM -DGGI -DCDECL=" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.ggi" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lggi -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S X86/vertex.S"
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-glide:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DFX -DPTHREADS -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -L/usr/local/glide/lib -lglide2x" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/local/glide/lib -lglide2x -lglut -lGLU -lGL"
 | 
			
		||||
 | 
			
		||||
linux-386-glide:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_XSHM -DFX -DPTHREADS -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -L/usr/local/glide/lib -lglide2x -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/local/glide/lib -lglide2x -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-386-opt-glide:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O3 -m486 -fomit-frame-pointer -pipe -ansi -pedantic -ffast-math -fexpensive-optimizations -malign-loops=2 -malign-jumps=2 -malign-functions=2 -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DFX -DUSE_X86_ASM -DPTHREADS -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -L/usr/local/glide/lib -lglide2x -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/local/glide/lib -lglide2x -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-386-opt-V2-glide:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O3 -m486 -fomit-frame-pointer -pipe -ansi -pedantic -ffast-math -fexpensive-optimizations -malign-loops=2 -malign-jumps=2 -malign-functions=2 -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DFX -DFX_V2 -DUSE_X86_ASM -DPTHREAD -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include"\
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -L/usr/local/glide/lib -lglide2x -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/local/glide/lib -lglide2x -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-x86-glide:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc -malign-loops=2 -malign-jumps=2 -malign-functions=2" \
 | 
			
		||||
	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -DUSE_XSHM -DFX -DPTHREADS -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include -I/usr/src/mesa-glx/src/FX/X86" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -L/usr/local/glide/lib -lglide2x -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/local/glide/lib -lglide2x -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S \
 | 
			
		||||
		X86/mmx_blend.S \
 | 
			
		||||
		X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
		X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
		X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
		X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
		X86/3dnow_norm_raw.S X86/3dnow_vertex.S \
 | 
			
		||||
		FX/X86/fx_3dnow_fastpath.S \
 | 
			
		||||
		X86/katmai_xform_raw1.S X86/katmai_xform_masked1.S \
 | 
			
		||||
		X86/katmai_xform_raw2.S X86/katmai_xform_masked2.S \
 | 
			
		||||
		X86/katmai_xform_raw3.S X86/katmai_xform_masked3.S \
 | 
			
		||||
		X86/katmai_xform_raw4.S X86/katmai_xform_masked4.S \
 | 
			
		||||
		X86/katmai_norm_raw.S X86/katmai_vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-alpha:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
@@ -874,7 +860,11 @@ os2-x11:
 | 
			
		||||
	"CFLAGS = -Zmt -O3 -m486 -funroll-loops -Wall -Wno-unused -ansi -pedantic -ffast-math -DUSE_X86_ASM -D_SVID_SOURCE -D_BSD_SOURCE -I$(X11ROOT)/XFree86/include" \
 | 
			
		||||
	"MAKELIB = ..\\bin\\mklib-emx.cmd " \
 | 
			
		||||
	"APP_LIB_DEPS = -Zmt -Zcrtdll -Zexe -L$(X11ROOT)/XFree86/lib -lXt -lX11 -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S X86/vertex.S"
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S"
 | 
			
		||||
 | 
			
		||||
osf1:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
@@ -1273,19 +1263,7 @@ DEBUG:
 | 
			
		||||
	"APP_LIB_DEPS = -lX11 -lXext -lXmu -lXi -lfpe -lm"
 | 
			
		||||
 | 
			
		||||
# for debugging on Linux systems
 | 
			
		||||
linux-static-debug:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.a" \
 | 
			
		||||
	"GLU_LIB = libGLU.a" \
 | 
			
		||||
	"GLUT_LIB = libglut.a" \
 | 
			
		||||
	"GLW_LIB = libGLw.a" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -g -ansi -pedantic -Wall -Wmissing-prototypes -DUSE_XSHM -DDEBUG -DSVGA -DFX -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM_not -I/usr/include/glide -I/usr/local/glide/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.ar-ruv" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/local/glide/lib -lglide2x -ltexus -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lvga -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S X86/vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-elf-debug:
 | 
			
		||||
linux-debug:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
@@ -1297,7 +1275,48 @@ linux-elf-debug:
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -lvga -L/usr/local/glide/lib -lglide2x" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lglut -lGLU -lGL"
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/local/glide/lib -lglide2x -lglut -lGLU -lGL"
 | 
			
		||||
 | 
			
		||||
linux-static-debug:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.a" \
 | 
			
		||||
	"GLU_LIB = libGLU.a" \
 | 
			
		||||
	"GLUT_LIB = libglut.a" \
 | 
			
		||||
	"GLW_LIB = libGLw.a" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -g -ansi -pedantic -Wall -Wmissing-prototypes -DUSE_XSHM -DDEBUG -DMESA_DEBUG -DSVGA -DFX -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/include/glide -I/usr/local/glide/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.ar-ruv" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/local/glide/lib -lglide2x -ltexus -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lvga -lm" \
 | 
			
		||||
 | 
			
		||||
linux-x86-debug:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.so" \
 | 
			
		||||
	"GLU_LIB = libGLU.so" \
 | 
			
		||||
	"GLUT_LIB = libglut.so" \
 | 
			
		||||
	"GLW_LIB = libGLw.so" \
 | 
			
		||||
	"CC = gcc -malign-loops=2 -malign-jumps=2 -malign-functions=2" \
 | 
			
		||||
	"CFLAGS = -O2 -g -ansi -pedantic -Wall -Wmissing-prototypes -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -DPTHREADS -I/usr/X11R6/include -DDEBUG -DMESA_DEBUG" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.linux" \
 | 
			
		||||
	"GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lm -lpthread" \
 | 
			
		||||
	"GLU_LIB_DEPS = -L../lib -lGL -lm" \
 | 
			
		||||
	"GLUT_LIB_DEPS = -L../lib -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm" \
 | 
			
		||||
	"APP_LIB_DEPS = -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S \
 | 
			
		||||
		X86/mmx_blend.S \
 | 
			
		||||
		X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
		X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
		X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
		X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
		X86/3dnow_norm_raw.S X86/3dnow_vertex.S \
 | 
			
		||||
		X86/katmai_xform_raw1.S X86/katmai_xform_masked1.S \
 | 
			
		||||
		X86/katmai_xform_raw2.S X86/katmai_xform_masked2.S \
 | 
			
		||||
		X86/katmai_xform_raw3.S X86/katmai_xform_masked3.S \
 | 
			
		||||
		X86/katmai_xform_raw4.S X86/katmai_xform_masked4.S \
 | 
			
		||||
		X86/katmai_norm_raw.S X86/katmai_vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-glide-debug:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
@@ -1318,14 +1337,51 @@ linux-prof:
 | 
			
		||||
	"GLUT_LIB = libglut.a" \
 | 
			
		||||
	"GLW_LIB = libGLw.a" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O2 -pg -ansi -pedantic -Wall -DUSE_XSHM -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -I/usr/include/glide -I/usr/local/glide/include" \
 | 
			
		||||
	"CFLAGS = -Wall -O2 -pg -ansi -pedantic -ffast-math -DUSE_XSHM -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.ar-ruv" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/X11/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S \
 | 
			
		||||
		X86/mmx_blend.S \
 | 
			
		||||
		X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
		X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
		X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
		X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
		X86/3dnow_norm_raw.S X86/3dnow_vertex.S \
 | 
			
		||||
		FX/X86/fx_3dnow_fastpath.S \
 | 
			
		||||
		X86/katmai_xform_raw1.S X86/katmai_xform_masked1.S \
 | 
			
		||||
		X86/katmai_xform_raw2.S X86/katmai_xform_masked2.S \
 | 
			
		||||
		X86/katmai_xform_raw3.S X86/katmai_xform_masked3.S \
 | 
			
		||||
		X86/katmai_xform_raw4.S X86/katmai_xform_masked4.S \
 | 
			
		||||
		X86/katmai_norm_raw.S X86/katmai_vertex.S"
 | 
			
		||||
 | 
			
		||||
linux-glide-prof:
 | 
			
		||||
	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \
 | 
			
		||||
	"GL_LIB = libGL.a" \
 | 
			
		||||
	"GLU_LIB = libGLU.a" \
 | 
			
		||||
	"GLUT_LIB = libglut.a" \
 | 
			
		||||
	"GLW_LIB = libGLw.a" \
 | 
			
		||||
	"CC = gcc" \
 | 
			
		||||
	"CFLAGS = -O2 -pg -ansi -pedantic -Wall -DUSE_XSHM -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -I/usr/include/glide -I/usr/local/glide/include" \
 | 
			
		||||
	"MAKELIB = ../bin/mklib.ar-ruv" \
 | 
			
		||||
	"APP_LIB_DEPS = -L/usr/local/glide/lib -lglide2x -L/usr/X11/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" \
 | 
			
		||||
	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/glapi_x86.S \
 | 
			
		||||
	X86/mmx_blend.S \
 | 
			
		||||
	X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
	X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
	X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
	X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
	X86/3dnow_norm_raw.S X86/vertex.S X86/vertex_3dnow.S \
 | 
			
		||||
	FX/X86/fx_3dnow_fastpath.S"
 | 
			
		||||
	"ASM_SOURCES = X86/common_x86_asm.S X86/glapi_x86.S \
 | 
			
		||||
		X86/x86_xform_raw2.S X86/x86_xform_raw3.S \
 | 
			
		||||
		X86/x86_xform_raw4.S X86/x86_xform_masked2.S \
 | 
			
		||||
		X86/x86_xform_masked3.S X86/x86_xform_masked4.S \
 | 
			
		||||
		X86/x86_cliptest.S X86/x86_vertex.S \
 | 
			
		||||
		X86/mmx_blend.S \
 | 
			
		||||
		X86/3dnow_xform_raw1.S X86/3dnow_xform_raw2.S \
 | 
			
		||||
		X86/3dnow_xform_raw3.S X86/3dnow_xform_raw4.S \
 | 
			
		||||
		X86/3dnow_xform_masked1.S X86/3dnow_xform_masked2.S \
 | 
			
		||||
		X86/3dnow_xform_masked3.S X86/3dnow_xform_masked4.S \
 | 
			
		||||
		X86/3dnow_norm_raw.S X86/3dnow_vertex.S \
 | 
			
		||||
		FX/X86/fx_3dnow_fastpath.S \
 | 
			
		||||
		X86/katmai_xform_raw1.S X86/katmai_xform_masked1.S \
 | 
			
		||||
		X86/katmai_xform_raw2.S X86/katmai_xform_masked2.S \
 | 
			
		||||
		X86/katmai_xform_raw3.S X86/katmai_xform_masked3.S \
 | 
			
		||||
		X86/katmai_xform_raw4.S X86/katmai_xform_masked4.S \
 | 
			
		||||
		X86/katmai_norm_raw.S X86/katmai_vertex.S"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								Makefile.X11
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								Makefile.X11
									
									
									
									
									
								
							@@ -1,20 +1,20 @@
 | 
			
		||||
# $Id: Makefile.X11,v 1.32 2000/07/21 16:36:35 brianp Exp $
 | 
			
		||||
# $Id: Makefile.X11,v 1.32.2.5 2000/10/26 19:35:53 brianp Exp $
 | 
			
		||||
 | 
			
		||||
# Mesa 3-D graphics library
 | 
			
		||||
# Version:  3.3
 | 
			
		||||
# 
 | 
			
		||||
# Version:  3.4
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
# 
 | 
			
		||||
#
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
# copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
# to deal in the Software without restriction, including without limitation
 | 
			
		||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
# and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
# Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
# 
 | 
			
		||||
#
 | 
			
		||||
# The above copyright notice and this permission notice shall be included
 | 
			
		||||
# in all copies or substantial portions of the Software.
 | 
			
		||||
# 
 | 
			
		||||
#
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
@@ -68,18 +68,15 @@ default:
 | 
			
		||||
 | 
			
		||||
	@echo "  make linux                for Linux systems, make shared .so libs"
 | 
			
		||||
	@echo "  make linux-static         for Linux systems, make static .a libs"
 | 
			
		||||
	@echo "  make linux-386            for Linux on Intel, make shared .so libs"
 | 
			
		||||
	@echo "  make linux-386-static     for Linux on Intel, make static .a libs"
 | 
			
		||||
	@echo "  make linux-x86            for Linux on Intel, make shared .so libs"
 | 
			
		||||
	@echo "  make linux-x86-static     for Linux on Intel, make static .a libs"
 | 
			
		||||
	@echo "  make linux-ggi            for Linux systems with libggi"
 | 
			
		||||
	@echo "  make linux-386-ggi        for Linux systems with libggi w/ Intel assembly"
 | 
			
		||||
	@echo "  make linux-glide          for Linux w/ 3Dfx Glide driver"
 | 
			
		||||
	@echo "  make linux-386-glide      for Linux w/ 3Dfx Glide driver, Intel assembly"
 | 
			
		||||
	@echo "  make linux-386-opt-glide  for Linux with 3Dfx Voodoo1 for GLQuake"
 | 
			
		||||
	@echo "  make linux-386-opt-V2-glide  for Linux with 3Dfx Voodoo2 for GLQuake"
 | 
			
		||||
	@echo "  make linux-3dnow          for Linux on AMD w/ 3DNow!"
 | 
			
		||||
	@echo "  make linux-3dnow-glide    for Linux on AMD w/ 3DNow! for Glide"
 | 
			
		||||
	@echo "  make linux-katmai         for Linux on PentiumIII w/ SSE"
 | 
			
		||||
	@echo "  make linux-katmai-glide   for Linux on PentiumIII w/ SSE for Glide"
 | 
			
		||||
	@echo "  make linux-x86-glide      for Linux w/ all x86 asm for Glide"
 | 
			
		||||
	@echo "  make linux-alpha          for Linux on Alpha systems"
 | 
			
		||||
	@echo "  make linux-alpha-static   for Linux on Alpha systems, static libs"
 | 
			
		||||
	@echo "  make linux-ppc            for Linux on PowerPC systems"
 | 
			
		||||
@@ -139,13 +136,10 @@ aix aix-sl amix bsdos bsdos4 dgux freebsd freebsd-386 gcc \
 | 
			
		||||
hpux9 hpux9-sl hpux9-gcc hpux9-gcc-sl \
 | 
			
		||||
hpux10 hpux10-sl hpux10-gcc hpux10-gcc-sl \
 | 
			
		||||
irix4 irix5 irix5-gcc irix5-dso irix6-o32 irix6-o32-dso \
 | 
			
		||||
linux-static-debug linux-elf-debug linux-prof linux-glide-debug \
 | 
			
		||||
linux linux-static \
 | 
			
		||||
linux-386 linux-386-static \
 | 
			
		||||
linux linux-static linux-debug linux-static-debug linux-prof \
 | 
			
		||||
linux-x86 linux-x86-static linux-x86-debug \
 | 
			
		||||
linux-glide linux-386-glide linux-386-opt-glide \
 | 
			
		||||
linux-386-opt-V2-glide \
 | 
			
		||||
linux-3dnow linux-3dnow-glide \
 | 
			
		||||
linux-katmai linux-katmai-glide \
 | 
			
		||||
linux-386-opt-V2-glide linux-x86-glide linux-glide-debug linux-glide-prof \
 | 
			
		||||
linux-alpha-static linux-alpha \
 | 
			
		||||
linux-ppc-static linux-ppc \
 | 
			
		||||
linux-sparc \
 | 
			
		||||
@@ -326,10 +320,10 @@ realclean: clean
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DIRECTORY = Mesa-3.3
 | 
			
		||||
LIB_NAME = MesaLib-3.3
 | 
			
		||||
DEMO_NAME = MesaDemos-3.3
 | 
			
		||||
GLU_NAME = MesaGLU-3.3
 | 
			
		||||
DIRECTORY = Mesa-3.4
 | 
			
		||||
LIB_NAME = MesaLib-3.4
 | 
			
		||||
DEMO_NAME = MesaDemos-3.4
 | 
			
		||||
GLU_NAME = MesaGLU-3.4
 | 
			
		||||
GLUT_NAME = GLUT-3.7
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -388,6 +382,7 @@ LIB_FILES =	\
 | 
			
		||||
	$(DIRECTORY)/include/GL/glu_mangle.h	\
 | 
			
		||||
	$(DIRECTORY)/include/GL/glx.h		\
 | 
			
		||||
	$(DIRECTORY)/include/GL/glx_mangle.h	\
 | 
			
		||||
	$(DIRECTORY)/include/GL/mesa_wgl.h	\
 | 
			
		||||
	$(DIRECTORY)/include/GL/mglmesa.h	\
 | 
			
		||||
	$(DIRECTORY)/include/GL/osmesa.h	\
 | 
			
		||||
	$(DIRECTORY)/include/GL/svgamesa.h	\
 | 
			
		||||
@@ -463,7 +458,6 @@ LIB_FILES =	\
 | 
			
		||||
	$(DIRECTORY)/src/X86/*.[ch]				\
 | 
			
		||||
	$(DIRECTORY)/src/X86/Makefile.am			\
 | 
			
		||||
	$(DIRECTORY)/src/X86/Makefile.in			\
 | 
			
		||||
	$(DIRECTORY)/src/X86/*.m4				\
 | 
			
		||||
	$(DIRECTORY)/src/X86/*.S				\
 | 
			
		||||
	$(DIRECTORY)/src-glu/README[12]				\
 | 
			
		||||
	$(DIRECTORY)/src-glu/Makefile*				\
 | 
			
		||||
@@ -494,6 +488,8 @@ LIB_FILES =	\
 | 
			
		||||
	$(DIRECTORY)/widgets-mesa/man/Makefile.in		\
 | 
			
		||||
	$(DIRECTORY)/widgets-mesa/man/Mesa*			\
 | 
			
		||||
	$(DIRECTORY)/widgets-mesa/src/ChangeLog			\
 | 
			
		||||
	$(DIRECTORY)/widgets-mesa/src/*.c			\
 | 
			
		||||
	$(DIRECTORY)/widgets-mesa/src/Makefile.in		\
 | 
			
		||||
	$(DIRECTORY)/widgets-sgi/*.[ch]				\
 | 
			
		||||
	$(DIRECTORY)/widgets-sgi/Makefile*			\
 | 
			
		||||
	$(DIRECTORY)/widgets-sgi/README				\
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
 | 
			
		||||
                     3Dfx Glide device driver for Mesa 3.3
 | 
			
		||||
                     3Dfx Glide device driver for Mesa 3.4
 | 
			
		||||
				(see below for FAQ)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
 | 
			
		||||
                         Mesa 3.3 Unix/X11 Information
 | 
			
		||||
                         Mesa 3.4 Unix/X11 Information
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -323,4 +323,4 @@ Summary of X-related environment variables:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
----------------------------------------------------------------------
 | 
			
		||||
$Id: README.X11,v 3.5 2000/04/04 15:14:48 brianp Exp $
 | 
			
		||||
$Id: README.X11,v 3.5.4.1 2000/11/02 18:05:34 brianp Exp $
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								docs/RELNOTES-3.4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								docs/RELNOTES-3.4
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
 | 
			
		||||
                         Mesa 3.4 release notes
 | 
			
		||||
 | 
			
		||||
                             November 3, 2000
 | 
			
		||||
 | 
			
		||||
                             PLEASE READ!!!!
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Introduction
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
Mesa uses an even/odd version number scheme like the Linux kernel.
 | 
			
		||||
Odd numbered versions (such as 3.3) designate new developmental releases.
 | 
			
		||||
Even numbered versions (such as 3.4) designate stable releases.
 | 
			
		||||
 | 
			
		||||
Mesa 3.4 simply fixes bugs found in the Mesa 3.3 release.  For details,
 | 
			
		||||
see the VERSIONS file.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
----------------------------------------------------------------------
 | 
			
		||||
$Id: RELNOTES-3.4,v 1.1.2.2 2000/11/02 18:05:34 brianp Exp $
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
$Id: VERSIONS,v 1.38 2000/07/21 15:41:59 brianp Exp $
 | 
			
		||||
$Id: VERSIONS,v 1.38.2.18 2000/11/03 02:39:00 brianp Exp $
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Mesa Version History
 | 
			
		||||
@@ -746,3 +746,32 @@ Mesa Version History
 | 
			
		||||
	- gl.h now uses #defines instead of C enums for all tokens
 | 
			
		||||
	- glu.h now uses #defines instead of C enums for all tokens
 | 
			
		||||
	- moved programs from 3Dfx/demos/ into demos/ directory
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
3.4  November 3, 2000
 | 
			
		||||
    New:
 | 
			
		||||
	- optimized glDrawPixels for glPixelZoom(1,-1)
 | 
			
		||||
    Bug Fixes:
 | 
			
		||||
	- widgets-mesa/src/*.c files were missing from 3.3 distro
 | 
			
		||||
	- include/GL/mesa_wgl.h file was missing from 3.3 distro
 | 
			
		||||
	- fixed some Win32 compile problems
 | 
			
		||||
	- texture object priorities weren't getting initialized to 1.0
 | 
			
		||||
	- glAreTexturesResident return value was wrong when using hardware
 | 
			
		||||
	- glXUseXFont segfaulted when using 3dfx driver (via MESA_GLX_FX)
 | 
			
		||||
	- glReadPixels with GLushort packed types was broken
 | 
			
		||||
	- fixed a few bugs in the GL_EXT_texture_env_combine texture code
 | 
			
		||||
	- glPush/PopAttrib(GL_ENABLE_BIT) mishandled multi-texture enables
 | 
			
		||||
	- fixed some typos/bugs in the VB code
 | 
			
		||||
	- glDrawPixels(GL_COLOR_INDEX) to RGB window didn't work
 | 
			
		||||
	- optimized glDrawPixels paths weren't being used
 | 
			
		||||
	- per-fragment fog calculation didn't work without a Z buffer
 | 
			
		||||
	- improved blending accuracy, fixes Glean blendFunc test failures
 | 
			
		||||
	- glPixelStore(GL_PACK/UNPACK_SKIP_IMAGES) wasn't handled correctly
 | 
			
		||||
	- glXGetProcAddressARB() didn't always return the right address
 | 
			
		||||
	- gluBuild[12]DMipmaps() didn't grok the GL_BGR pixel format
 | 
			
		||||
	- texture matrix changes weren't always detected (GLUT projtex demo)
 | 
			
		||||
	- fixed random color problem in vertex fog code
 | 
			
		||||
	- fixed Glide-related bug that let Quake get a 24-bit Z buffer
 | 
			
		||||
    Changes:
 | 
			
		||||
	- finished internal support for compressed textures for DRI
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,6 @@ endif
 | 
			
		||||
EXTRA_DIST = fxmesa.h ggimesa.h osmesa.h svgamesa.h \
 | 
			
		||||
	glx.h glx_mangle.h xmesa.h xmesa_x.h xmesa_xf86.h
 | 
			
		||||
 | 
			
		||||
GLinclude_HEADERS = gl.h gl_mangle.h glu.h glu_mangle.h \
 | 
			
		||||
GLinclude_HEADERS = gl.h glext.h gl_mangle.h glu.h glu_mangle.h \
 | 
			
		||||
	$(INC_FX) $(INC_GGI) $(INC_OSMESA) $(INC_SVGA) $(INC_X11) $(INC_GLUT)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: gl.h,v 1.44 2000/07/13 17:45:13 brianp Exp $ */
 | 
			
		||||
/* $Id: gl.h,v 1.44.4.1 2000/09/06 17:47:47 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: glu.h,v 1.22 2000/07/11 14:11:44 brianp Exp $ */
 | 
			
		||||
/* $Id: glu.h,v 1.22.4.1 2000/10/26 15:32:46 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -200,7 +200,7 @@ extern "C" {
 | 
			
		||||
#define GLU_NURBS_ERROR37	100287   /* duplicate point on pwlcurve */
 | 
			
		||||
 | 
			
		||||
/* GLU 1.3 and later */
 | 
			
		||||
#define GLU_NURBS_MODE ?
 | 
			
		||||
#define GLU_NURBS_MODE		100160
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Errors */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: xmesa.h,v 1.8 2000/05/02 02:30:01 brianp Exp $ */
 | 
			
		||||
/* $Id: xmesa.h,v 1.8.4.1 2000/11/02 18:08:28 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -89,7 +89,7 @@ extern struct Library *XLibBase;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define XMESA_MAJOR_VERSION 3
 | 
			
		||||
#define XMESA_MINOR_VERSION 3
 | 
			
		||||
#define XMESA_MINOR_VERSION 4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,36 +1,13 @@
 | 
			
		||||
/* $Id: bounce.c,v 1.2 2000/06/27 17:04:43 brianp Exp $ */
 | 
			
		||||
/* $Id: bounce.c,v 1.2.4.1 2000/08/16 20:36:32 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Bouncing ball demo.  Color index mode only!
 | 
			
		||||
 * Bouncing ball demo.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is in the public domain
 | 
			
		||||
 *
 | 
			
		||||
 * Brian Paul
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Conversion to GLUT by Mark J. Kilgard */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * $Log: bounce.c,v $
 | 
			
		||||
 * Revision 1.2  2000/06/27 17:04:43  brianp
 | 
			
		||||
 * fixed compiler warnings
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.1.1.1  1999/08/19 00:55:40  jtg
 | 
			
		||||
 * Imported sources
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.3  1999/03/18 08:16:14  joukj
 | 
			
		||||
 *
 | 
			
		||||
 *     cmpstr needs string.h to included to avoid warnings
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.2  1998/11/28 01:13:02  brianp
 | 
			
		||||
 * now sets an initial window position and size
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.1  1998/11/28 01:06:57  brianp
 | 
			
		||||
 * now works in RGB mode by default
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.0  1998/02/14 18:42:29  brianp
 | 
			
		||||
 * initial rev
 | 
			
		||||
 *
 | 
			
		||||
 * Conversion to GLUT by Mark J. Kilgard
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -84,9 +61,9 @@ make_ball(void)
 | 
			
		||||
        glColor3f(1, 1, 1);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      x = COS(b) * COS(a);
 | 
			
		||||
      y = SIN(b) * COS(a);
 | 
			
		||||
      z = SIN(a);
 | 
			
		||||
      x = radius * COS(b) * COS(a);
 | 
			
		||||
      y = radius * SIN(b) * COS(a);
 | 
			
		||||
      z = radius * SIN(a);
 | 
			
		||||
      glVertex3f(x, y, z);
 | 
			
		||||
 | 
			
		||||
      x = radius * COS(b) * COS(a + da);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: gloss.c,v 1.4 2000/06/27 17:04:43 brianp Exp $ */
 | 
			
		||||
/* $Id: gloss.c,v 1.4.4.1 2000/08/29 21:17:25 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Specular reflection demo.  The specular highlight is modulated by
 | 
			
		||||
@@ -46,7 +46,7 @@ static GLfloat DXrot = 1.0, DYrot = 2.5;
 | 
			
		||||
static GLfloat Black[4] = { 0, 0, 0, 0 };
 | 
			
		||||
static GLfloat White[4] = { 1, 1, 1, 1 };
 | 
			
		||||
static GLfloat Diffuse[4] = { .3, .3, 1.0, 1.0 };  /* blue */
 | 
			
		||||
static GLfloat Shininess = 15;
 | 
			
		||||
static GLfloat Shininess = 6;
 | 
			
		||||
 | 
			
		||||
static GLuint BaseTexture, SpecularTexture;
 | 
			
		||||
static GLboolean DoSpecTexture = GL_TRUE;
 | 
			
		||||
 
 | 
			
		||||
@@ -561,24 +561,28 @@ static void drawSample( int x, int y, int w, int h,
 | 
			
		||||
   if ( drawSmooth ) {
 | 
			
		||||
      glShadeModel( GL_SMOOTH );
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      glShadeModel( GL_FLAT );
 | 
			
		||||
      glColor4f(1, 1, 1, 1);
 | 
			
		||||
   }
 | 
			
		||||
   if ( drawTextured ) {
 | 
			
		||||
      glEnable( GL_TEXTURE_2D );
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   glBegin( GL_QUADS );
 | 
			
		||||
      glColor4f( 1.0, 0.0, 0.0, 1.0 );
 | 
			
		||||
      if ( drawSmooth )  glColor4f( 1.0, 0.0, 1.0, 1.0 );
 | 
			
		||||
      glTexCoord2f( 0.0, 0.0 );
 | 
			
		||||
      glVertex2f( -0.8, -0.8 );
 | 
			
		||||
 | 
			
		||||
      glColor4f( 0.0, 1.0, 0.0, 1.0 );
 | 
			
		||||
      if ( drawSmooth )  glColor4f( 1.0, 0.0, 1.0, 1.0 );
 | 
			
		||||
      glTexCoord2f( 1.0, 0.0 );
 | 
			
		||||
      glVertex2f( 0.8, -0.8 );
 | 
			
		||||
 | 
			
		||||
      glColor4f( 0.0, 0.0, 1.0, 1.0 );
 | 
			
		||||
      if ( drawSmooth )  glColor4f( 0.0, 1.0, 0.0, 1.0 );
 | 
			
		||||
      glTexCoord2f( 1.0, 1.0 );
 | 
			
		||||
      glVertex2f( 0.8, 0.8 );
 | 
			
		||||
 | 
			
		||||
      glColor4f( 1.0, 1.0, 1.0, 1.0 );
 | 
			
		||||
      if ( drawSmooth )  glColor4f( 0.0, 1.0, 0.0, 1.0 );
 | 
			
		||||
      glTexCoord2f( 0.0, 1.0 );
 | 
			
		||||
      glVertex2f( -0.8, 0.8 );
 | 
			
		||||
   glEnd();
 | 
			
		||||
@@ -587,7 +591,18 @@ static void drawSample( int x, int y, int w, int h,
 | 
			
		||||
   glShadeModel( GL_FLAT );
 | 
			
		||||
   glDisable( GL_TEXTURE_2D );
 | 
			
		||||
 | 
			
		||||
   if ( displayLevelInfo ) {
 | 
			
		||||
   if ( envMode->mode == GL_DECAL &&
 | 
			
		||||
        (format->baseFormat == GL_ALPHA ||
 | 
			
		||||
         format->baseFormat == GL_LUMINANCE ||
 | 
			
		||||
         format->baseFormat == GL_LUMINANCE_ALPHA ||
 | 
			
		||||
         format->baseFormat == GL_INTENSITY)) {
 | 
			
		||||
      /* undefined format/mode combination */
 | 
			
		||||
      begin2D( w, h );
 | 
			
		||||
      drawStringOutline( "UNDEFINED MODE", 15, h / 2,
 | 
			
		||||
                         labelLevelColor0, labelLevelColor1 );
 | 
			
		||||
      end2D();
 | 
			
		||||
   }
 | 
			
		||||
   else if ( displayLevelInfo ) {
 | 
			
		||||
      GLint width, height, border, components;
 | 
			
		||||
      GLint redSize, greenSize, blueSize, alphaSize;
 | 
			
		||||
      GLint luminanceSize, intensitySize;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: trispd.c,v 1.1 1999/08/19 00:55:40 jtg Exp $ */
 | 
			
		||||
/* $Id: trispd.c,v 1.1.1.1.6.1 2000/10/26 15:26:27 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Simple GLUT program to measure triangle strip rendering speed.
 | 
			
		||||
@@ -7,8 +7,11 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * $Log: trispd.c,v $
 | 
			
		||||
 * Revision 1.1  1999/08/19 00:55:40  jtg
 | 
			
		||||
 * Initial revision
 | 
			
		||||
 * Revision 1.1.1.1.6.1  2000/10/26 15:26:27  brianp
 | 
			
		||||
 * added a glFinish() call
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.1.1.1  1999/08/19 00:55:40  jtg
 | 
			
		||||
 * Imported sources
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.4  1999/03/28 18:24:37  brianp
 | 
			
		||||
 * minor clean-up
 | 
			
		||||
@@ -107,6 +110,7 @@ static void Display( void )
 | 
			
		||||
	 }
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   glFinish();
 | 
			
		||||
   t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
 | 
			
		||||
   
 | 
			
		||||
   if (t1-t0 < MinPeriod) {
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,8 @@ static int fullscreen = 1;
 | 
			
		||||
static int WIDTH = 640;
 | 
			
		||||
static int HEIGHT = 480;
 | 
			
		||||
 | 
			
		||||
#define FRAME 50
 | 
			
		||||
static GLint T0 = 0;
 | 
			
		||||
static GLint Frames = 0;
 | 
			
		||||
 | 
			
		||||
#define NUMBLOC 5
 | 
			
		||||
 | 
			
		||||
@@ -56,7 +57,7 @@ static float v = 0.5;
 | 
			
		||||
static float alpha = 90.0;
 | 
			
		||||
static float beta = 90.0;
 | 
			
		||||
 | 
			
		||||
static int fog = 0;
 | 
			
		||||
static int fog = 1;
 | 
			
		||||
static int bfcull = 1;
 | 
			
		||||
static int usetex = 1;
 | 
			
		||||
static int cstrip = 0;
 | 
			
		||||
@@ -154,21 +155,6 @@ drawobjs(int *l, float *f)
 | 
			
		||||
      }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static float
 | 
			
		||||
gettime(void)
 | 
			
		||||
{
 | 
			
		||||
   static clock_t told = 0;
 | 
			
		||||
   clock_t tnew, ris;
 | 
			
		||||
 | 
			
		||||
   tnew = clock();
 | 
			
		||||
 | 
			
		||||
   ris = tnew - told;
 | 
			
		||||
 | 
			
		||||
   told = tnew;
 | 
			
		||||
 | 
			
		||||
   return (ris / (float) CLOCKS_PER_SEC);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
calcposobs(void)
 | 
			
		||||
{
 | 
			
		||||
@@ -221,7 +207,6 @@ key(unsigned char k, int x, int y)
 | 
			
		||||
      XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW);
 | 
			
		||||
      break;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
   case 'j':
 | 
			
		||||
      joyactive = (!joyactive);
 | 
			
		||||
      break;
 | 
			
		||||
@@ -257,6 +242,7 @@ key(unsigned char k, int x, int y)
 | 
			
		||||
      fprintf(stderr, "Done.\n");
 | 
			
		||||
      break;
 | 
			
		||||
   }
 | 
			
		||||
   glutPostRedisplay();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -366,10 +352,9 @@ dojoy(void)
 | 
			
		||||
static void
 | 
			
		||||
draw(void)
 | 
			
		||||
{
 | 
			
		||||
   static int count = 0;
 | 
			
		||||
   static char frbuf[80];
 | 
			
		||||
   static char frbuf[80] = "";
 | 
			
		||||
   int i;
 | 
			
		||||
   float fr, base, offset;
 | 
			
		||||
   float base, offset;
 | 
			
		||||
 | 
			
		||||
   dojoy();
 | 
			
		||||
 | 
			
		||||
@@ -416,11 +401,6 @@ draw(void)
 | 
			
		||||
   glPopMatrix();
 | 
			
		||||
   glPopMatrix();
 | 
			
		||||
 | 
			
		||||
   if ((count % FRAME) == 0) {
 | 
			
		||||
      fr = gettime();
 | 
			
		||||
      sprintf(frbuf, "Frame rate: %f", FRAME / fr);
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   glDisable(GL_TEXTURE_2D);
 | 
			
		||||
   glDisable(GL_FOG);
 | 
			
		||||
   glShadeModel(GL_FLAT);
 | 
			
		||||
@@ -449,9 +429,27 @@ draw(void)
 | 
			
		||||
 | 
			
		||||
   glutSwapBuffers();
 | 
			
		||||
 | 
			
		||||
   count++;
 | 
			
		||||
   Frames++;
 | 
			
		||||
   {
 | 
			
		||||
      GLint t = glutGet(GLUT_ELAPSED_TIME);
 | 
			
		||||
      if (t - T0 >= 2000) {
 | 
			
		||||
         GLfloat seconds = (t - T0) / 1000.0;
 | 
			
		||||
         GLfloat fps = Frames / seconds;
 | 
			
		||||
         sprintf(frbuf, "Frame rate: %f", fps);
 | 
			
		||||
         T0 = t;
 | 
			
		||||
         Frames = 0;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
idle(void)
 | 
			
		||||
{
 | 
			
		||||
   glutPostRedisplay();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main(int ac, char **av)
 | 
			
		||||
{
 | 
			
		||||
@@ -500,7 +498,7 @@ main(int ac, char **av)
 | 
			
		||||
   glutDisplayFunc(draw);
 | 
			
		||||
   glutKeyboardFunc(key);
 | 
			
		||||
   glutSpecialFunc(special);
 | 
			
		||||
   glutIdleFunc(draw);
 | 
			
		||||
   glutIdleFunc(idle);
 | 
			
		||||
 | 
			
		||||
   glEnable(GL_BLEND);
 | 
			
		||||
   /*glBlendFunc(GL_SRC_ALPHA_SATURATE,GL_ONE); */
 | 
			
		||||
 
 | 
			
		||||
@@ -41,55 +41,55 @@ GLint cubeList = 1;
 | 
			
		||||
float scp[18][3] = {
 | 
			
		||||
    {
 | 
			
		||||
	1.000000, 0.000000, 0.000000
 | 
			
		||||
    },	
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	1.000000, 0.000000, 5.000000
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	0.707107, 0.707107, 0.000000
 | 
			
		||||
    },	
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	0.707107, 0.707107, 5.000000
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	0.000000, 1.000000, 0.000000
 | 
			
		||||
    },	
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	0.000000, 1.000000, 5.000000
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	-0.707107, 0.707107, 0.000000
 | 
			
		||||
    },	
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	-0.707107, 0.707107, 5.000000
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	-1.000000, 0.000000, 0.000000
 | 
			
		||||
    },	
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	-1.000000, 0.000000, 5.000000
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	-0.707107, -0.707107, 0.000000
 | 
			
		||||
    },	
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	-0.707107, -0.707107, 5.000000
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	0.000000, -1.000000, 0.000000
 | 
			
		||||
    },	
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	0.000000, -1.000000, 5.000000
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	0.707107, -0.707107, 0.000000
 | 
			
		||||
    },	
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	0.707107, -0.707107, 5.000000
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	1.000000, 0.000000, 0.000000
 | 
			
		||||
    },	
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	1.000000, 0.000000, 5.000000
 | 
			
		||||
    },
 | 
			
		||||
@@ -136,7 +136,7 @@ static void Init(void)
 | 
			
		||||
    static float back_mat_diffuse[] = {1.0, 0.0, 0.0, 1.0};
 | 
			
		||||
    static float lmodel_ambient[] = {0.0, 0.0, 0.0, 1.0};
 | 
			
		||||
    static float fog_color[] = {0.8, 0.8, 0.8, 1.0};
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    glFrontFace(GL_CW);
 | 
			
		||||
 | 
			
		||||
    glEnable(GL_DEPTH_TEST);
 | 
			
		||||
@@ -148,7 +148,7 @@ static void Init(void)
 | 
			
		||||
    glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
 | 
			
		||||
    glEnable(GL_LIGHTING);
 | 
			
		||||
    glEnable(GL_LIGHT0);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    glMaterialfv(GL_FRONT, GL_SHININESS, front_mat_shininess);
 | 
			
		||||
    glMaterialfv(GL_FRONT, GL_SPECULAR, front_mat_specular);
 | 
			
		||||
    glMaterialfv(GL_FRONT, GL_DIFFUSE, front_mat_diffuse);
 | 
			
		||||
@@ -258,7 +258,7 @@ static GLenum Args(int argc, char **argv)
 | 
			
		||||
    GLint i;
 | 
			
		||||
 | 
			
		||||
    rgb = GL_TRUE;
 | 
			
		||||
    doubleBuffer = GL_FALSE;
 | 
			
		||||
    doubleBuffer = GL_TRUE;
 | 
			
		||||
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
	if (strcmp(argv[i], "-ci") == 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -123,7 +123,7 @@ static void Draw(void)
 | 
			
		||||
    } else {
 | 
			
		||||
	glDisable(GL_LINE_STIPPLE);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    if (mode2) {
 | 
			
		||||
	ci = CI_OFFSET;
 | 
			
		||||
	glEnable(GL_LINE_SMOOTH);
 | 
			
		||||
@@ -170,7 +170,7 @@ static GLenum Args(int argc, char **argv)
 | 
			
		||||
    GLint i;
 | 
			
		||||
 | 
			
		||||
    rgb = GL_TRUE;
 | 
			
		||||
    doubleBuffer = GL_FALSE;
 | 
			
		||||
    doubleBuffer = GL_TRUE;
 | 
			
		||||
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
	if (strcmp(argv[i], "-ci") == 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@
 | 
			
		||||
 * Nov 20, 1995 use stdlib's rand()/srand() instead of random()/srand48(), etc.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* 
 | 
			
		||||
/*
 | 
			
		||||
 * Modified by Li Wei(liwei@aiar.xjtu.edu.cn) to be able to run in Windows
 | 
			
		||||
 * 6/13
 | 
			
		||||
 *
 | 
			
		||||
@@ -83,7 +83,7 @@ void FillTorus(float rc, int numc, float rt, int numt)
 | 
			
		||||
 | 
			
		||||
    pi = 3.14159265358979323846;
 | 
			
		||||
    twopi = 2 * pi;
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < numc; i++) {
 | 
			
		||||
	glBegin(GL_QUAD_STRIP);
 | 
			
		||||
        for (j = 0; j <= numt; j++) {
 | 
			
		||||
@@ -136,7 +136,7 @@ void DrawScene(void)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    glPushMatrix();
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 | 
			
		||||
    gluLookAt(0,0,10, 0,0,0, 0,1,0);
 | 
			
		||||
 | 
			
		||||
@@ -252,7 +252,7 @@ void Init(void)
 | 
			
		||||
    dests[GREENRING][1] = bottom_y;
 | 
			
		||||
    dests[GREENRING][2] = bottom_z;
 | 
			
		||||
 | 
			
		||||
    base = 2.0; 
 | 
			
		||||
    base = 2.0;
 | 
			
		||||
    height = 2.0;
 | 
			
		||||
    theTorus = glGenLists(1);
 | 
			
		||||
    glNewList(theTorus, GL_COMPILE);
 | 
			
		||||
@@ -321,7 +321,7 @@ GLenum Args(int argc, char **argv)
 | 
			
		||||
    GLint i;
 | 
			
		||||
 | 
			
		||||
    rgb = GL_TRUE;
 | 
			
		||||
    doubleBuffer = GL_FALSE;
 | 
			
		||||
    doubleBuffer = GL_TRUE;
 | 
			
		||||
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
	if (strcmp(argv[i], "-ci") == 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -326,7 +326,7 @@ static GLenum Args(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    GLint i;
 | 
			
		||||
 | 
			
		||||
    doubleBuffer = GL_FALSE;
 | 
			
		||||
    doubleBuffer = GL_TRUE;
 | 
			
		||||
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
	if (strcmp(argv[i], "-sb") == 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -85,7 +85,7 @@ float c[6][4][4][3] = {
 | 
			
		||||
	{
 | 
			
		||||
	    {
 | 
			
		||||
		1.0, 1.0, -1.0
 | 
			
		||||
	    }, 
 | 
			
		||||
	    },
 | 
			
		||||
	    {
 | 
			
		||||
		0.0, 1.0, -1.0
 | 
			
		||||
	    },
 | 
			
		||||
@@ -102,10 +102,10 @@ float c[6][4][4][3] = {
 | 
			
		||||
	    },
 | 
			
		||||
	    {
 | 
			
		||||
		-1.0, 1.0, -1.0
 | 
			
		||||
	    }, 
 | 
			
		||||
	    },
 | 
			
		||||
	    {
 | 
			
		||||
		-1.0, 0.0, -1.0
 | 
			
		||||
	    }, 
 | 
			
		||||
	    },
 | 
			
		||||
	    {
 | 
			
		||||
		0.0, 0.0, -1.0
 | 
			
		||||
	    },
 | 
			
		||||
@@ -269,7 +269,7 @@ float c[6][4][4][3] = {
 | 
			
		||||
	    {
 | 
			
		||||
		-1.0, 0.0, -1.0
 | 
			
		||||
	    },
 | 
			
		||||
	}, 
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
	    {
 | 
			
		||||
		-1.0, 1.0, 0.0
 | 
			
		||||
@@ -283,7 +283,7 @@ float c[6][4][4][3] = {
 | 
			
		||||
	    {
 | 
			
		||||
		-1.0, 0.0, 0.0
 | 
			
		||||
	    },
 | 
			
		||||
	}, 
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
	    {
 | 
			
		||||
		-1.0, 0.0, 1.0
 | 
			
		||||
@@ -297,7 +297,7 @@ float c[6][4][4][3] = {
 | 
			
		||||
	    {
 | 
			
		||||
		-1.0, 0.0, 0.0
 | 
			
		||||
	    },
 | 
			
		||||
	}, 
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
	    {
 | 
			
		||||
		-1.0, -1.0, 0.0
 | 
			
		||||
@@ -311,7 +311,7 @@ float c[6][4][4][3] = {
 | 
			
		||||
	    {
 | 
			
		||||
		-1.0, 0.0, 0.0
 | 
			
		||||
	    },
 | 
			
		||||
	}, 
 | 
			
		||||
	},
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
	{
 | 
			
		||||
@@ -463,8 +463,8 @@ GLfloat identity[16] = {
 | 
			
		||||
void BuildCylinder(int numEdges)
 | 
			
		||||
{
 | 
			
		||||
    int i, top = 1.0, bottom = -1.0;
 | 
			
		||||
    float x[100], y[100], angle; 
 | 
			
		||||
    
 | 
			
		||||
    float x[100], y[100], angle;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i <= numEdges; i++) {
 | 
			
		||||
	angle = i * 2.0 * PI / numEdges;
 | 
			
		||||
	x[i] = cos(angle);   /* was cosf() */
 | 
			
		||||
@@ -505,7 +505,7 @@ void BuildTorus(float rc, int numc, float rt, int numt)
 | 
			
		||||
 | 
			
		||||
    pi = 3.14159265358979323846;
 | 
			
		||||
    twopi = 2.0 * pi;
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
    glNewList(torus, GL_COMPILE);
 | 
			
		||||
    for (i = 0; i < numc; i++) {
 | 
			
		||||
	glBegin(GL_QUAD_STRIP);
 | 
			
		||||
@@ -542,7 +542,7 @@ void BuildCage(void)
 | 
			
		||||
    left   = -4.0;
 | 
			
		||||
    bottom = -4.0;
 | 
			
		||||
    right  = 4.0;
 | 
			
		||||
    top    = 4.0; 
 | 
			
		||||
    top    = 4.0;
 | 
			
		||||
 | 
			
		||||
    inc = 2.0 * 4.0 * 0.1;
 | 
			
		||||
 | 
			
		||||
@@ -631,7 +631,7 @@ void BuildCube(void)
 | 
			
		||||
    glNewList(cube, GL_COMPILE);
 | 
			
		||||
    for (i = 0; i < 6; i++) {
 | 
			
		||||
	for (j = 0; j < 4; j++) {
 | 
			
		||||
	    glNormal3fv(n[i]); 
 | 
			
		||||
	    glNormal3fv(n[i]);
 | 
			
		||||
	    glBegin(GL_POLYGON);
 | 
			
		||||
		glVertex3fv(c[i][j][0]);
 | 
			
		||||
		glVertex3fv(c[i][j][1]);
 | 
			
		||||
@@ -670,7 +670,7 @@ void SetDeepestColor(void)
 | 
			
		||||
    glGetIntegerv(GL_BLUE_BITS, &blueBits);
 | 
			
		||||
 | 
			
		||||
    deepestColor = (redBits >= greenBits) ? COLOR_RED : COLOR_GREEN;
 | 
			
		||||
    deepestColor = (deepestColor >= blueBits) ? deepestColor : COLOR_BLUE; 
 | 
			
		||||
    deepestColor = (deepestColor >= blueBits) ? deepestColor : COLOR_BLUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SetDefaultSettings(void)
 | 
			
		||||
@@ -726,17 +726,17 @@ void Init(void)
 | 
			
		||||
	image->data = AlphaPadImage(image->sizeX*image->sizeY,
 | 
			
		||||
                                    image->data, 128);
 | 
			
		||||
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
 | 
			
		||||
	gluBuild2DMipmaps(GL_TEXTURE_2D, numComponents, 
 | 
			
		||||
			  image->sizeX, image->sizeY, 
 | 
			
		||||
	gluBuild2DMipmaps(GL_TEXTURE_2D, numComponents,
 | 
			
		||||
			  image->sizeX, image->sizeY,
 | 
			
		||||
			  GL_RGBA, GL_UNSIGNED_BYTE, image->data);
 | 
			
		||||
    } else {
 | 
			
		||||
	image = LoadPPM(imageFileName);
 | 
			
		||||
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
 | 
			
		||||
	gluBuild2DMipmaps(GL_TEXTURE_2D, numComponents, 
 | 
			
		||||
			  image->sizeX, image->sizeY, 
 | 
			
		||||
	gluBuild2DMipmaps(GL_TEXTURE_2D, numComponents,
 | 
			
		||||
			  image->sizeX, image->sizeY,
 | 
			
		||||
			  GL_RGB, GL_UNSIGNED_BYTE, image->data);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    glFogf(GL_FOG_DENSITY, 0.125);
 | 
			
		||||
    glFogi(GL_FOG_MODE, GL_LINEAR);
 | 
			
		||||
    glFogf(GL_FOG_START, 4.0);
 | 
			
		||||
@@ -747,7 +747,7 @@ void Init(void)
 | 
			
		||||
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
 | 
			
		||||
    glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
 | 
			
		||||
    glLightfv(GL_LIGHT0, GL_POSITION, position);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
 | 
			
		||||
    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
 | 
			
		||||
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);
 | 
			
		||||
@@ -845,7 +845,7 @@ void Draw(void)
 | 
			
		||||
    if (autoRotate) {
 | 
			
		||||
	xRotation += .75;
 | 
			
		||||
	yRotation += .375;
 | 
			
		||||
    } 
 | 
			
		||||
    }
 | 
			
		||||
    glutSwapBuffers();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -964,7 +964,7 @@ GLenum Args(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    GLint i;
 | 
			
		||||
 | 
			
		||||
    doubleBuffer = GL_FALSE;
 | 
			
		||||
    doubleBuffer = GL_TRUE;
 | 
			
		||||
    numComponents = 4;
 | 
			
		||||
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
 
 | 
			
		||||
@@ -281,7 +281,7 @@ static GLenum Args(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    GLint i;
 | 
			
		||||
 | 
			
		||||
    doubleBuffer = GL_FALSE;
 | 
			
		||||
    doubleBuffer = GL_TRUE;
 | 
			
		||||
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
	if (strcmp(argv[i], "-sb") == 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -285,7 +285,7 @@ static GLenum Args(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    GLint i;
 | 
			
		||||
 | 
			
		||||
    doubleBuffer = GL_FALSE;
 | 
			
		||||
    doubleBuffer = GL_TRUE;
 | 
			
		||||
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
	if (strcmp(argv[i], "-sb") == 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -128,7 +128,7 @@ static void Animate(void)
 | 
			
		||||
		    glColor3fv(facet->color);
 | 
			
		||||
		} else {
 | 
			
		||||
		    thisColor = facet->color;
 | 
			
		||||
		    glMaterialfv(GL_FRONT_AND_BACK, GL_COLOR_INDEXES, 
 | 
			
		||||
		    glMaterialfv(GL_FRONT_AND_BACK, GL_COLOR_INDEXES,
 | 
			
		||||
				 facet->color);
 | 
			
		||||
		}
 | 
			
		||||
	    } else {
 | 
			
		||||
@@ -182,7 +182,7 @@ static void Animate(void)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void SetColorMap(void) 
 | 
			
		||||
static void SetColorMap(void)
 | 
			
		||||
{
 | 
			
		||||
    static float green[3] = {0.2, 1.0, 0.2};
 | 
			
		||||
    static float red[3] = {1.0, 0.2, 0.2};
 | 
			
		||||
@@ -360,7 +360,7 @@ static void InitMaterials(void)
 | 
			
		||||
    glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);
 | 
			
		||||
    glEnable(GL_LIGHTING);
 | 
			
		||||
    glEnable(GL_LIGHT0);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    glMaterialfv(GL_FRONT, GL_SHININESS, front_mat_shininess);
 | 
			
		||||
    glMaterialfv(GL_FRONT, GL_SPECULAR, front_mat_specular);
 | 
			
		||||
    glMaterialfv(GL_FRONT, GL_DIFFUSE, front_mat_diffuse);
 | 
			
		||||
@@ -394,7 +394,7 @@ static void Init(void)
 | 
			
		||||
    glClearColor(0.0, 0.0, 0.0, 0.0);
 | 
			
		||||
 | 
			
		||||
    glShadeModel(GL_FLAT);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    glFrontFace(GL_CW);
 | 
			
		||||
 | 
			
		||||
    glEnable(GL_DEPTH_TEST);
 | 
			
		||||
@@ -515,7 +515,7 @@ static GLenum Args(int argc, char **argv)
 | 
			
		||||
    GLint i;
 | 
			
		||||
 | 
			
		||||
    rgb = GL_TRUE;
 | 
			
		||||
    doubleBuffer = GL_FALSE;
 | 
			
		||||
    doubleBuffer = GL_TRUE;
 | 
			
		||||
    frames = 10;
 | 
			
		||||
    widthX = 10;
 | 
			
		||||
    widthY = 10;
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
/*#undef GL_EXT_polygon_offset   uncomment to use new version*/
 | 
			
		||||
#undef GL_EXT_polygon_offset  /* use GL 1.1 version instead of extension */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef EXIT_FAILURE
 | 
			
		||||
 
 | 
			
		||||
@@ -1,61 +1,62 @@
 | 
			
		||||
LIBRARY GLU32
 | 
			
		||||
DESCRIPTION 'GLU for Windows Mesa'
 | 
			
		||||
EXETYPE WINDOWS
 | 
			
		||||
CODE MOVEABLE DISCARDABLE
 | 
			
		||||
DATA MOVEABLE SINGLE
 | 
			
		||||
HEAPSIZE 256000
 | 
			
		||||
 | 
			
		||||
STACKSIZE 4096
 | 
			
		||||
 | 
			
		||||
EXPORTS
 | 
			
		||||
    gluLookAt
 | 
			
		||||
    gluOrtho2D
 | 
			
		||||
    gluPerspective
 | 
			
		||||
    gluPickMatrix
 | 
			
		||||
    gluProject
 | 
			
		||||
    gluUnProject
 | 
			
		||||
    gluErrorString
 | 
			
		||||
    gluScaleImage
 | 
			
		||||
    gluBuild1DMipmaps
 | 
			
		||||
    gluBuild2DMipmaps
 | 
			
		||||
    gluNewQuadric
 | 
			
		||||
    gluDeleteQuadric
 | 
			
		||||
    gluQuadricDrawStyle
 | 
			
		||||
    gluQuadricOrientation
 | 
			
		||||
    gluQuadricNormals
 | 
			
		||||
    gluQuadricTexture
 | 
			
		||||
    gluQuadricCallback
 | 
			
		||||
    gluCylinder
 | 
			
		||||
    gluSphere
 | 
			
		||||
    gluDisk
 | 
			
		||||
    gluPartialDisk
 | 
			
		||||
    gluNewNurbsRenderer
 | 
			
		||||
    gluDeleteNurbsRenderer
 | 
			
		||||
    gluLoadSamplingMatrices
 | 
			
		||||
    gluNurbsProperty
 | 
			
		||||
    gluGetNurbsProperty
 | 
			
		||||
    gluBeginCurve
 | 
			
		||||
    gluEndCurve
 | 
			
		||||
    gluNurbsCurve
 | 
			
		||||
    gluBeginSurface
 | 
			
		||||
    gluEndSurface
 | 
			
		||||
    gluNurbsSurface
 | 
			
		||||
    gluBeginTrim
 | 
			
		||||
    gluEndTrim
 | 
			
		||||
    gluPwlCurve
 | 
			
		||||
    gluNurbsCallback
 | 
			
		||||
    gluNewTess
 | 
			
		||||
    gluDeleteTess
 | 
			
		||||
    gluTessBeginPolygon
 | 
			
		||||
    gluTessBeginContour
 | 
			
		||||
    gluTessVertex
 | 
			
		||||
    gluTessEndContour
 | 
			
		||||
    gluTessEndPolygon
 | 
			
		||||
    gluTessProperty
 | 
			
		||||
    gluTessNormal
 | 
			
		||||
    gluTessCallback
 | 
			
		||||
    gluGetTessProperty
 | 
			
		||||
    gluBeginPolygon
 | 
			
		||||
    gluNextContour
 | 
			
		||||
    gluEndPolygon
 | 
			
		||||
    gluGetString
 | 
			
		||||
LIBRARY GLU32
 | 
			
		||||
DESCRIPTION 'GLU for Windows Mesa'
 | 
			
		||||
EXETYPE WINDOWS
 | 
			
		||||
CODE MOVEABLE DISCARDABLE
 | 
			
		||||
DATA MOVEABLE SINGLE
 | 
			
		||||
HEAPSIZE 256000
 | 
			
		||||
 | 
			
		||||
STACKSIZE 4096
 | 
			
		||||
 | 
			
		||||
EXPORTS
 | 
			
		||||
    gluLookAt
 | 
			
		||||
    gluOrtho2D
 | 
			
		||||
    gluPerspective
 | 
			
		||||
    gluPickMatrix
 | 
			
		||||
    gluProject
 | 
			
		||||
    gluUnProject
 | 
			
		||||
    gluErrorString
 | 
			
		||||
    gluScaleImage
 | 
			
		||||
    gluBuild1DMipmaps
 | 
			
		||||
    gluBuild2DMipmaps
 | 
			
		||||
    gluNewQuadric
 | 
			
		||||
    gluDeleteQuadric
 | 
			
		||||
    gluQuadricDrawStyle
 | 
			
		||||
    gluQuadricOrientation
 | 
			
		||||
    gluQuadricNormals
 | 
			
		||||
    gluQuadricTexture
 | 
			
		||||
    gluQuadricCallback
 | 
			
		||||
    gluCylinder
 | 
			
		||||
    gluSphere
 | 
			
		||||
    gluDisk
 | 
			
		||||
    gluPartialDisk
 | 
			
		||||
    gluNewNurbsRenderer
 | 
			
		||||
    gluDeleteNurbsRenderer
 | 
			
		||||
    gluLoadSamplingMatrices
 | 
			
		||||
    gluNurbsProperty
 | 
			
		||||
    gluGetNurbsProperty
 | 
			
		||||
    gluBeginCurve
 | 
			
		||||
    gluEndCurve
 | 
			
		||||
    gluNurbsCurve
 | 
			
		||||
    gluBeginSurface
 | 
			
		||||
    gluEndSurface
 | 
			
		||||
    gluNurbsSurface
 | 
			
		||||
    gluBeginTrim
 | 
			
		||||
    gluEndTrim
 | 
			
		||||
    gluPwlCurve
 | 
			
		||||
    gluNurbsCallback
 | 
			
		||||
    gluNewTess
 | 
			
		||||
    gluDeleteTess
 | 
			
		||||
;    gluTessBeginPolygon
 | 
			
		||||
;    gluTessBeginContour
 | 
			
		||||
    gluTessVertex
 | 
			
		||||
;    gluTessEndContour
 | 
			
		||||
;    gluTessEndPolygon
 | 
			
		||||
;    gluTessProperty
 | 
			
		||||
;    gluTessNormal
 | 
			
		||||
    gluTessCallback
 | 
			
		||||
;    gluGetTessProperty
 | 
			
		||||
    gluBeginPolygon
 | 
			
		||||
    gluNextContour
 | 
			
		||||
    gluEndPolygon
 | 
			
		||||
    gluGetString
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: glu.c,v 1.21 2000/07/18 01:13:28 brianp Exp $ */
 | 
			
		||||
/* $Id: glu.c,v 1.21.2.1 2000/11/02 17:59:43 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * Copyright (C) 1995-2000  Brian Paul
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
@@ -302,7 +302,7 @@ const GLubyte *GLAPIENTRY
 | 
			
		||||
gluGetString(GLenum name)
 | 
			
		||||
{
 | 
			
		||||
   static char *extensions = "GL_EXT_abgr";
 | 
			
		||||
   static char *version = "1.1 Mesa 3.3";
 | 
			
		||||
   static char *version = "1.1 Mesa 3.4";
 | 
			
		||||
 | 
			
		||||
   switch (name) {
 | 
			
		||||
   case GLU_EXTENSIONS:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: mipmap.c,v 1.7 2000/07/11 14:11:04 brianp Exp $ */
 | 
			
		||||
/* $Id: mipmap.c,v 1.7.4.1 2000/10/26 21:48:37 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * Copyright (C) 1995-2000  Brian Paul
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
@@ -576,6 +576,7 @@ bytes_per_pixel(GLenum format, GLenum type)
 | 
			
		||||
      n = 2;
 | 
			
		||||
      break;
 | 
			
		||||
   case GL_RGB:
 | 
			
		||||
   case GL_BGR:
 | 
			
		||||
      n = 3;
 | 
			
		||||
      break;
 | 
			
		||||
   case GL_RGBA:
 | 
			
		||||
 
 | 
			
		||||
@@ -1511,7 +1511,7 @@ static void SetRenderStates( GLcontext *ctx )
 | 
			
		||||
   /*================================================*/
 | 
			
		||||
   /* Check too see if there are new TEXTURE states. */
 | 
			
		||||
   /*================================================*/
 | 
			
		||||
   if ( ctx->Texture.Enabled )
 | 
			
		||||
   if ( ctx->Texture.ReallyEnabled )
 | 
			
		||||
   {
 | 
			
		||||
      switch( ctx->Texture.Set[ctx->Texture.CurrentSet].EnvMode )
 | 
			
		||||
      {
 | 
			
		||||
@@ -1871,9 +1871,9 @@ static void DebugRenderStates( GLcontext *ctx, BOOL bForce )
 | 
			
		||||
   /*================================================*/
 | 
			
		||||
   /* Check too see if there are new TEXTURE states. */
 | 
			
		||||
   /*================================================*/
 | 
			
		||||
   if ( texture != ctx->Texture.Enabled )
 | 
			
		||||
   if ( texture != ctx->Texture.ReallyEnabled )
 | 
			
		||||
   {
 | 
			
		||||
	texture = ctx->Texture.Enabled;
 | 
			
		||||
	texture = ctx->Texture.ReallyEnabled;
 | 
			
		||||
	DPF(( 0, "\tTexture\t\t%s", (texture) ? "ENABLED" : "--------" ));
 | 
			
		||||
   }	
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -725,6 +725,8 @@ void GLAPIENTRY gl3DfxSetPaletteEXT(GLuint *pal)
 | 
			
		||||
static GrScreenResolution_t fxBestResolution(int width, int height, int aux)
 | 
			
		||||
{
 | 
			
		||||
  static int resolutions[][5]={ 
 | 
			
		||||
    { 320, 200, GR_RESOLUTION_320x200, 2, 2 },
 | 
			
		||||
    { 320, 240, GR_RESOLUTION_320x240, 2, 2 },
 | 
			
		||||
    { 512, 384, GR_RESOLUTION_512x384, 2, 2 },
 | 
			
		||||
    { 640, 400, GR_RESOLUTION_640x400, 2, 2 },
 | 
			
		||||
    { 640, 480, GR_RESOLUTION_640x480, 2, 2 },
 | 
			
		||||
@@ -734,15 +736,15 @@ static GrScreenResolution_t fxBestResolution(int width, int height, int aux)
 | 
			
		||||
    ,{ 1024, 768, GR_RESOLUTION_1024x768, 8, 4 }
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GR_RESOLUTION_1280x1024
 | 
			
		||||
    ,{ 1024, 768, GR_RESOLUTION_1280x1024, 8, 8 }
 | 
			
		||||
    ,{ 1280, 1024, GR_RESOLUTION_1280x1024, 8, 8 }
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GR_RESOLUTION_1600x1200
 | 
			
		||||
    ,{ 1024, 768, GR_RESOLUTION_1600x1200, 16, 8 }
 | 
			
		||||
    ,{ 1600, 1200, GR_RESOLUTION_1600x1200, 16, 8 }
 | 
			
		||||
#endif
 | 
			
		||||
  };
 | 
			
		||||
  int NUM_RESOLUTIONS = sizeof(resolutions) / (sizeof(int)*5);
 | 
			
		||||
  int i,fbmem;
 | 
			
		||||
  GrScreenResolution_t lastvalidres=resolutions[1][2];
 | 
			
		||||
  GrScreenResolution_t lastvalidres=resolutions[4][2];
 | 
			
		||||
 | 
			
		||||
  fxQueryHardware();
 | 
			
		||||
 | 
			
		||||
@@ -943,7 +945,7 @@ fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,
 | 
			
		||||
   fxMesa->haveDoubleBuffer=doubleBuffer;
 | 
			
		||||
   fxMesa->haveAlphaBuffer=alphaBuffer;
 | 
			
		||||
   fxMesa->haveGlobalPaletteTexture=GL_FALSE;
 | 
			
		||||
   fxMesa->haveZBuffer=depthSize ? 1 : 0;
 | 
			
		||||
   fxMesa->haveZBuffer=depthSize ? 16 : 0;
 | 
			
		||||
   fxMesa->verbose=verbose;
 | 
			
		||||
   fxMesa->board=glbCurrentBoard;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -274,6 +274,8 @@ static GLbitfield fxDDClear(GLcontext *ctx, GLbitfield mask, GLboolean all,
 | 
			
		||||
      FX_grColorMask(FXTRUE, ctx->Color.ColorMask[ACOMP] && fxMesa->haveAlphaBuffer);
 | 
			
		||||
      if (ctx->Color.DrawDestMask & FRONT_LEFT_BIT)
 | 
			
		||||
        FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
 | 
			
		||||
      if (!ctx->Depth.Test || !ctx->Depth.Mask)
 | 
			
		||||
        FX_grDepthMask(FXFALSE);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      /* error */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: osmesa.c,v 1.19 2000/06/27 21:42:14 brianp Exp $ */
 | 
			
		||||
/* $Id: osmesa.c,v 1.19.4.1 2000/09/28 22:39:42 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -1357,7 +1357,7 @@ static line_func choose_line_function( GLcontext *ctx )
 | 
			
		||||
   OSMesaContext osmesa = (OSMesaContext) ctx;
 | 
			
		||||
 | 
			
		||||
   if (ctx->Line.SmoothFlag)              return NULL;
 | 
			
		||||
   if (ctx->Texture.Enabled)              return NULL;
 | 
			
		||||
   if (ctx->Texture.ReallyEnabled)        return NULL;
 | 
			
		||||
   if (ctx->Light.ShadeModel!=GL_FLAT)    return NULL;
 | 
			
		||||
 | 
			
		||||
   if (ctx->Line.Width==1.0F
 | 
			
		||||
@@ -1543,7 +1543,7 @@ static triangle_func choose_triangle_function( GLcontext *ctx )
 | 
			
		||||
 | 
			
		||||
   if (ctx->Polygon.SmoothFlag)     return NULL;
 | 
			
		||||
   if (ctx->Polygon.StippleFlag)    return NULL;
 | 
			
		||||
   if (ctx->Texture.Enabled)        return NULL;
 | 
			
		||||
   if (ctx->Texture.ReallyEnabled)  return NULL;
 | 
			
		||||
 | 
			
		||||
   if (ctx->RasterMask==DEPTH_BIT
 | 
			
		||||
       && ctx->Depth.Func==GL_LESS
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: wgl.c,v 1.2 1999/09/19 09:59:20 tjump Exp $ */
 | 
			
		||||
/* $Id: wgl.c,v 1.2.6.1 2000/08/02 20:28:19 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
* This library is free software; you can redistribute it and/or
 | 
			
		||||
@@ -30,8 +30,9 @@ extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
 | 
			
		||||
#define GL_GLEXT_PROTOTYPES
 | 
			
		||||
#include <GL/gl.h>
 | 
			
		||||
#include <GL/glext.h>
 | 
			
		||||
//#include <GL/glu.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
@@ -90,7 +91,7 @@ struct __extensions__	ext[] = {
 | 
			
		||||
   { (PROC)glGetColorTableParameterivEXT,	"glGetColorTableParameterivEXT"	},
 | 
			
		||||
   { (PROC)glPointParameterfEXT,		"glPointParameterfEXT"		},
 | 
			
		||||
   { (PROC)glPointParameterfvEXT,		"glPointParameterfvEXT"		},
 | 
			
		||||
   { (PROC)glBlendFuncSeparateINGR,		"glBlendFuncSeparateINGR"	},
 | 
			
		||||
   { (PROC)glBlendFuncSeparateEXT,		"glBlendFuncSeparateEXT"	},
 | 
			
		||||
   { (PROC)glLockArraysEXT,			"glLockArraysEXT"		},
 | 
			
		||||
   { (PROC)glUnlockArraysEXT,			"glUnlockArraysEXT"		}
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,69 +1,20 @@
 | 
			
		||||
/* $Id: wmesa.c,v 1.3 2000/03/03 23:21:57 brianp Exp $ */
 | 
			
		||||
/* $Id: wmesa.c,v 1.3.4.3 2000/09/28 22:39:43 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
*   File name   :   wmesa.c
 | 
			
		||||
*  Version      :   2.3
 | 
			
		||||
*
 | 
			
		||||
*  Display driver for Mesa 2.3  under
 | 
			
		||||
*   Windows95 and WindowsNT
 | 
			
		||||
*
 | 
			
		||||
*   Copyright (C) 1996-  Li Wei
 | 
			
		||||
*  Address      :       Institute of Artificial Intelligence
 | 
			
		||||
*               :           & Robotics
 | 
			
		||||
*               :       Xi'an Jiaotong University
 | 
			
		||||
*  Email        :       liwei@aiar.xjtu.edu.cn
 | 
			
		||||
*  Web page :       http://sun.aiar.xjtu.edu.cn
 | 
			
		||||
*
 | 
			
		||||
*  This file and its associations are partially borrowed from the
 | 
			
		||||
*  Windows NT driver for Mesa 1.8 , written by Mark Leaming
 | 
			
		||||
*  (mark@rsinc.com).
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * $Log: wmesa.c,v $
 | 
			
		||||
 * Revision 1.3  2000/03/03 23:21:57  brianp
 | 
			
		||||
 * removed obsolete logicop function
 | 
			
		||||
 * Windows (Win32) device driver for Mesa 3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.2  2000/02/17 20:52:02  brianp
 | 
			
		||||
 * replaced renderer_string() with get_string() func
 | 
			
		||||
 * Original author:
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.1.1.1  1999/08/19 00:55:42  jtg
 | 
			
		||||
 * Imported sources
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.10  1999/06/15 01:35:06  brianp
 | 
			
		||||
 * small change to wmSetPixel() from TWILMOT@cpr.fr
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.9  1999/05/11 19:06:01  brianp
 | 
			
		||||
 * fixed a few VB->Index bugs (mikec@ensoniq.com)
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.8  1999/05/08 15:15:23  brianp
 | 
			
		||||
 * various updates from mikec@ensoniq.com
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.7  1999/04/01 01:27:34  brianp
 | 
			
		||||
 * always flip Y coord in read_rgba_span()
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.6  1999/03/28 21:17:27  brianp
 | 
			
		||||
 * updated SetBuffer driver function
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.5  1999/03/16 01:36:42  brianp
 | 
			
		||||
 * patched dither() to check if Current is NULL, per xzhou@nyx.net
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.4  1999/02/25 14:12:33  keithw
 | 
			
		||||
 * Merged in kw3 patch
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.3  1999/01/03 03:08:57  brianp
 | 
			
		||||
 * Ted Jump's changes
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.2  1998/08/29 00:26:01
 | 
			
		||||
 * updated for Mesa 3.0 to accomodate EGCS-Mingw32 build
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.1  1998/06/11 01:42:08  brianp
 | 
			
		||||
 * updated for Mesa 3.0 device driver interface (but not tested)
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.0  1998/06/11 01:18:25  brianp
 | 
			
		||||
 * initial revision
 | 
			
		||||
 *  Copyright (C) 1996-  Li Wei
 | 
			
		||||
 *  Address      :       Institute of Artificial Intelligence
 | 
			
		||||
 *               :           & Robotics
 | 
			
		||||
 *               :       Xi'an Jiaotong University
 | 
			
		||||
 *  Email        :       liwei@aiar.xjtu.edu.cn
 | 
			
		||||
 *  Web page :       http://sun.aiar.xjtu.edu.cn
 | 
			
		||||
 *
 | 
			
		||||
 *  This file and its associations are partially borrowed from the
 | 
			
		||||
 *  Windows NT driver for Mesa 1.8 , written by Mark Leaming
 | 
			
		||||
 *  (mark@rsinc.com).
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -84,7 +35,7 @@
 | 
			
		||||
#include "depth.h"
 | 
			
		||||
#include "wmesadef.h"
 | 
			
		||||
 | 
			
		||||
#pragma warning ( disable : 4133 4761 )
 | 
			
		||||
#pragma warning ( disable : 4100 4133 4761 )
 | 
			
		||||
 | 
			
		||||
#ifdef PROFILE
 | 
			
		||||
//  #include "profile.h"
 | 
			
		||||
@@ -430,9 +381,9 @@ static void clear_color( GLcontext* ctx, GLubyte r, GLubyte g, GLubyte b, GLubyt
 | 
			
		||||
*/
 | 
			
		||||
//static void clear(GLcontext* ctx,
 | 
			
		||||
//                  GLboolean all,GLint x, GLint y, GLint width, GLint height )
 | 
			
		||||
// TODO: I modified this function to match the prototype in dd.h. (swansma@geocities.com)
 | 
			
		||||
//       dd.h does not explain what the return type is so I could not set this to the proper
 | 
			
		||||
//       value.
 | 
			
		||||
// TODO: I modified this function to match the prototype in
 | 
			
		||||
//       dd.h. (swansma@geocities.com)
 | 
			
		||||
 | 
			
		||||
static GLbitfield clear(GLcontext* ctx, GLbitfield mask,
 | 
			
		||||
                  GLboolean all, GLint x, GLint y, GLint width, GLint height)
 | 
			
		||||
{
 | 
			
		||||
@@ -599,7 +550,7 @@ static void dither( GLcontext* ctx, GLboolean enable )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static GLboolean set_buffer( GLcontext* ctx, GLenum mode )
 | 
			
		||||
static GLboolean set_draw_buffer( GLcontext* ctx, GLenum mode )
 | 
			
		||||
{
 | 
			
		||||
   STARTPROFILE
 | 
			
		||||
   /* TODO: this could be better */
 | 
			
		||||
@@ -609,7 +560,15 @@ static GLboolean set_buffer( GLcontext* ctx, GLenum mode )
 | 
			
		||||
   else {
 | 
			
		||||
      return GL_FALSE;
 | 
			
		||||
   }
 | 
			
		||||
   ENDPROFILE(set_buffer)
 | 
			
		||||
   ENDPROFILE(set_draw_buffer)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void set_read_buffer(GLcontext *ctx, GLframebuffer *colorBuffer,
 | 
			
		||||
                            GLenum buffer )
 | 
			
		||||
{
 | 
			
		||||
   /* XXX todo */
 | 
			
		||||
   return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -711,7 +670,7 @@ extern points_func choose_points_function( GLcontext* ctx )
 | 
			
		||||
{
 | 
			
		||||
    STARTPROFILE
 | 
			
		||||
        if (ctx->Point.Size==1.0 && !ctx->Point.SmoothFlag && ctx->RasterMask==0
 | 
			
		||||
            && !ctx->Texture.Enabled  && ctx->Visual->RGBAflag) {
 | 
			
		||||
            && !ctx->Texture.ReallyEnabled  && ctx->Visual->RGBAflag) {
 | 
			
		||||
            ENDPROFILE(choose_points_function)
 | 
			
		||||
                return fast_rgb_points;
 | 
			
		||||
        }
 | 
			
		||||
@@ -769,7 +728,7 @@ static line_func choose_line_function( GLcontext* ctx )
 | 
			
		||||
    STARTPROFILE
 | 
			
		||||
    if (ctx->Line.Width==1.0 && !ctx->Line.SmoothFlag && !ctx->Line.StippleFlag
 | 
			
		||||
        && ctx->Light.ShadeModel==GL_FLAT && ctx->RasterMask==0
 | 
			
		||||
        && !ctx->Texture.Enabled && Current->rgb_flag) {
 | 
			
		||||
        && !ctx->Texture.ReallyEnabled && Current->rgb_flag) {
 | 
			
		||||
       ENDPROFILE(choose_line_function)
 | 
			
		||||
       return fast_flat_rgb_line;
 | 
			
		||||
    }
 | 
			
		||||
@@ -1176,7 +1135,8 @@ void setup_DD_pointers( GLcontext* ctx )
 | 
			
		||||
 | 
			
		||||
    ctx->Driver.Dither = dither;
 | 
			
		||||
 | 
			
		||||
    ctx->Driver.SetBuffer = set_buffer;
 | 
			
		||||
    ctx->Driver.SetDrawBuffer = set_draw_buffer;
 | 
			
		||||
    ctx->Driver.SetReadBuffer = set_read_buffer;
 | 
			
		||||
    ctx->Driver.GetBufferSize = buffer_size;
 | 
			
		||||
 | 
			
		||||
    ctx->Driver.PointsFunc = choose_points_function(ctx);
 | 
			
		||||
@@ -1364,7 +1324,11 @@ WMesaContext WMesaCreateContext( HWND hWnd, HPALETTE* Pal,
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    c->gl_buffer = gl_create_framebuffer( c->gl_visual );
 | 
			
		||||
    c->gl_buffer = gl_create_framebuffer( c->gl_visual,
 | 
			
		||||
                                          c->gl_visual->DepthBits > 0,
 | 
			
		||||
                                          c->gl_visual->StencilBits > 0,
 | 
			
		||||
                                          c->gl_visual->AccumRedBits > 0,
 | 
			
		||||
                                          c->gl_visual->AlphaBits > 0 );
 | 
			
		||||
    if (!c->gl_buffer) {
 | 
			
		||||
        gl_destroy_visual( c->gl_visual );
 | 
			
		||||
        gl_destroy_context( c->gl_ctx );
 | 
			
		||||
@@ -2153,6 +2117,7 @@ static void smooth_8A8B8G8R_z_triangle( GLcontext *ctx,
 | 
			
		||||
{
 | 
			
		||||
    WMesaContext wmesa = (WMesaContext) ctx->DriverCtx;
 | 
			
		||||
#define INTERP_Z 1
 | 
			
		||||
#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
 | 
			
		||||
#define INTERP_RGB 1
 | 
			
		||||
#define PIXEL_ADDRESS(X,Y) PIXELADDR4(X,Y)
 | 
			
		||||
#define PIXEL_TYPE GLuint
 | 
			
		||||
@@ -2907,7 +2872,7 @@ static triangle_func choose_triangle_function( GLcontext *ctx )
 | 
			
		||||
    int depth = wmesa->cColorBits;
 | 
			
		||||
 | 
			
		||||
    if (ctx->Polygon.SmoothFlag)     return NULL;
 | 
			
		||||
    if (ctx->Texture.Enabled)        return NULL;
 | 
			
		||||
    if (ctx->Texture.ReallyEnabled)  return NULL;
 | 
			
		||||
    if (!wmesa->db_flag) return NULL;
 | 
			
		||||
    /*if (wmesa->xm_buffer->buffer==XIMAGE)*/ {
 | 
			
		||||
    if (   ctx->Light.ShadeModel==GL_SMOOTH
 | 
			
		||||
 
 | 
			
		||||
@@ -458,7 +458,7 @@ extern points_func choose_points_function( GLcontext* ctx )
 | 
			
		||||
{
 | 
			
		||||
   STARTPROFILE
 | 
			
		||||
   if (ctx->Point.Size==1.0 && !ctx->Point.SmoothFlag && ctx->RasterMask==0
 | 
			
		||||
       && !ctx->Texture.Enabled  && ctx->Visual->RGBAflag) {
 | 
			
		||||
       && !ctx->Texture.ReallyEnabled  && ctx->Visual->RGBAflag) {
 | 
			
		||||
   ENDPROFILE(choose_points_function)
 | 
			
		||||
      return fast_rgb_points;
 | 
			
		||||
   }
 | 
			
		||||
@@ -516,7 +516,7 @@ static line_func choose_line_function( GLcontext* ctx )
 | 
			
		||||
	STARTPROFILE
 | 
			
		||||
   if (ctx->Line.Width==1.0 && !ctx->Line.SmoothFlag && !ctx->Line.StippleFlag
 | 
			
		||||
       && ctx->Light.ShadeModel==GL_FLAT && ctx->RasterMask==0
 | 
			
		||||
       && !ctx->Texture.Enabled && Current->rgb_flag) {
 | 
			
		||||
       && !ctx->Texture.ReallyEnabled && Current->rgb_flag) {
 | 
			
		||||
   ENDPROFILE(choose_line_function)
 | 
			
		||||
      return fast_flat_rgb_line;
 | 
			
		||||
   }
 | 
			
		||||
@@ -627,7 +627,7 @@ static triangle_func choose_triangle_function( GLcontext *ctx )
 | 
			
		||||
{
 | 
			
		||||
   if (ctx->Polygon.SmoothFlag)     return NULL;
 | 
			
		||||
   if (ctx->Polygon.StippleFlag)    return NULL;
 | 
			
		||||
   if (ctx->Texture.Enabled)        return NULL;
 | 
			
		||||
   if (ctx->Texture.ReallyEnabled)  return NULL;
 | 
			
		||||
 | 
			
		||||
   if (ctx->RasterMask==DEPTH_BIT
 | 
			
		||||
       && ctx->Depth.Func==GL_LESS
 | 
			
		||||
@@ -698,7 +698,7 @@ static polygon_func choose_polygon_function( GLcontext* ctx )
 | 
			
		||||
	STARTPROFILE
 | 
			
		||||
   if (!ctx->Polygon.SmoothFlag && !ctx->Polygon.StippleFlag
 | 
			
		||||
       && ctx->Light.ShadeModel==GL_FLAT && ctx->RasterMask==0
 | 
			
		||||
       && !ctx->Texture.Enabled && Current->rgb_flag==GL_TRUE) {
 | 
			
		||||
       && !ctx->Texture.ReallyEnabled && Current->rgb_flag==GL_TRUE) {
 | 
			
		||||
   ENDPROFILE(choose_polygon_function)
 | 
			
		||||
      return fast_flat_rgb_polygon;
 | 
			
		||||
   }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: fakeglx.c,v 1.34 2000/06/08 22:50:28 brianp Exp $ */
 | 
			
		||||
/* $Id: fakeglx.c,v 1.34.4.4 2000/11/03 02:35:54 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -31,7 +31,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 * Thanks to the contributors:
 | 
			
		||||
 *
 | 
			
		||||
 * Initial version:  Philip Brown (philb@CSUA.Berkeley.EDU)
 | 
			
		||||
 * Initial version:  Philip Brown (phil@bolthole.com)
 | 
			
		||||
 * Better glXGetConfig() support: Armin Liebchen (liebchen@asylum.cs.utah.edu)
 | 
			
		||||
 * Further visual-handling refinements: Wolfram Gloger
 | 
			
		||||
 *    (wmglo@Dent.MED.Uni-Muenchen.DE).
 | 
			
		||||
@@ -65,7 +65,7 @@
 | 
			
		||||
#define SERVER_MINOR_VERSION 3
 | 
			
		||||
 | 
			
		||||
/* This is appended onto the glXGetClient/ServerString version strings. */
 | 
			
		||||
#define MESA_GLX_VERSION "Mesa 3.3"
 | 
			
		||||
#define MESA_GLX_VERSION "Mesa 3.4"
 | 
			
		||||
 | 
			
		||||
/* Who implemented this GLX? */
 | 
			
		||||
#define VENDOR "Brian Paul"
 | 
			
		||||
@@ -858,7 +858,7 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
 | 
			
		||||
   int *parselist;
 | 
			
		||||
   XVisualInfo *vis;
 | 
			
		||||
   int min_ci = 0;
 | 
			
		||||
   int min_red=0, min_green=0, min_blue=0;
 | 
			
		||||
   int min_red=0, min_green=0, min_blue=0, min_alpha=0;
 | 
			
		||||
   GLboolean rgb_flag = GL_FALSE;
 | 
			
		||||
   GLboolean alpha_flag = GL_FALSE;
 | 
			
		||||
   GLboolean double_flag = GL_FALSE;
 | 
			
		||||
@@ -922,10 +922,8 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GLX_ALPHA_SIZE:
 | 
			
		||||
	    parselist++;
 | 
			
		||||
            {
 | 
			
		||||
               GLint size = *parselist++;
 | 
			
		||||
               alpha_flag = size>0 ? 1 : 0;
 | 
			
		||||
            }
 | 
			
		||||
            min_alpha = *parselist++;
 | 
			
		||||
            alpha_flag = (min_alpha > 0);
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GLX_DEPTH_SIZE:
 | 
			
		||||
	    parselist++;
 | 
			
		||||
@@ -1004,6 +1002,16 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /* DEBUG
 | 
			
		||||
   printf("glXChooseVisual:\n");
 | 
			
		||||
   printf("  GLX_RED_SIZE = %d\n", min_red);
 | 
			
		||||
   printf("  GLX_GREEN_SIZE = %d\n", min_green);
 | 
			
		||||
   printf("  GLX_BLUE_SIZE = %d\n", min_blue);
 | 
			
		||||
   printf("  GLX_ALPHA_SIZE = %d\n", min_alpha);
 | 
			
		||||
   printf("  GLX_DEPTH_SIZE = %d\n", depth_size);
 | 
			
		||||
   printf("  GLX_STENCIL_SIZE = %d\n", stencil_size);
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
   /*
 | 
			
		||||
    * Since we're only simulating the GLX extension this function will never
 | 
			
		||||
    * find any real GL visuals.  Instead, all we can do is try to find an RGB
 | 
			
		||||
@@ -1050,15 +1058,32 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
 | 
			
		||||
   if (vis) {
 | 
			
		||||
      /* Note: we're not exactly obeying the glXChooseVisual rules here.
 | 
			
		||||
       * When GLX_DEPTH_SIZE = 1 is specified we're supposed to choose the
 | 
			
		||||
       * largest depth buffer size, which is 32bits/value.  However, we
 | 
			
		||||
       * largest depth buffer size, which is 32bits/value.  Instead, we
 | 
			
		||||
       * return 16 to maintain performance with earlier versions of Mesa.
 | 
			
		||||
       */
 | 
			
		||||
      if (depth_size == 1)
 | 
			
		||||
         depth_size = DEFAULT_SOFTWARE_DEPTH_BITS;
 | 
			
		||||
      else if (depth_size > 24)
 | 
			
		||||
         depth_size = 31;
 | 
			
		||||
      if (depth_size > 24)
 | 
			
		||||
         depth_size = 31;   /* 32 causes int overflow problems */
 | 
			
		||||
      else if (depth_size > 16)
 | 
			
		||||
         depth_size = 24;
 | 
			
		||||
      else if (depth_size > 0)
 | 
			
		||||
         depth_size = DEFAULT_SOFTWARE_DEPTH_BITS; /*16*/
 | 
			
		||||
 | 
			
		||||
      /* If using Glide, make sure we don't try to setup an impossible
 | 
			
		||||
       * visual.  This fixes the Q3 bug in which 24-bit Z was being reported.
 | 
			
		||||
       */
 | 
			
		||||
      {
 | 
			
		||||
         const char *fx = getenv("MESA_GLX_FX");
 | 
			
		||||
         if (fx && fx[0] != 'd')
 | 
			
		||||
            if (depth_size > 16 ||
 | 
			
		||||
                stencil_size > 0 ||
 | 
			
		||||
                (min_red > 1 && min_red > 5) ||
 | 
			
		||||
                (min_green > 1 && min_green > 6) ||
 | 
			
		||||
                (min_blue > 1 && min_blue > 5) ||
 | 
			
		||||
                alpha_flag)
 | 
			
		||||
               return NULL;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      /* we only support one size of stencil and accum buffers. */
 | 
			
		||||
      if (stencil_size > 0)
 | 
			
		||||
         stencil_size = STENCIL_BITS;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: xfonts.c,v 1.6 2000/04/19 01:44:02 brianp Exp $ */
 | 
			
		||||
/* $Id: xfonts.c,v 1.6.4.2 2000/08/13 03:54:04 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -41,11 +41,9 @@
 | 
			
		||||
#include <X11/Xutil.h>
 | 
			
		||||
#include "GL/gl.h"
 | 
			
		||||
#include "GL/glx.h"
 | 
			
		||||
#include "GL/xmesa.h"
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "mem.h"
 | 
			
		||||
#include "xfonts.h"
 | 
			
		||||
#include "xmesaP.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Some debugging info.  */
 | 
			
		||||
@@ -223,7 +221,6 @@ static XCharStruct *isvalid(XFontStruct *fs, int which)
 | 
			
		||||
 | 
			
		||||
void Fake_glXUseXFont( Font font, int first, int count, int listbase )
 | 
			
		||||
{
 | 
			
		||||
  XMesaContext CC;
 | 
			
		||||
  Display *dpy;
 | 
			
		||||
  Window win;
 | 
			
		||||
  Pixmap pixmap;
 | 
			
		||||
@@ -231,26 +228,23 @@ void Fake_glXUseXFont( Font font, int first, int count, int listbase )
 | 
			
		||||
  XGCValues values;
 | 
			
		||||
  unsigned long valuemask;
 | 
			
		||||
  XFontStruct *fs;
 | 
			
		||||
 | 
			
		||||
  GLint swapbytes, lsbfirst, rowlength;
 | 
			
		||||
  GLint skiprows, skippixels, alignment;
 | 
			
		||||
 | 
			
		||||
  unsigned int max_width, max_height, max_bm_width, max_bm_height;
 | 
			
		||||
  GLubyte *bm;
 | 
			
		||||
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  CC = XMesaGetCurrentContext();
 | 
			
		||||
  dpy = CC->display;
 | 
			
		||||
  win = CC->xm_buffer->frontbuffer;
 | 
			
		||||
  dpy = glXGetCurrentDisplay();
 | 
			
		||||
  if (!dpy)
 | 
			
		||||
     return;  /* I guess glXMakeCurrent wasn't called */
 | 
			
		||||
  win = RootWindow(dpy, DefaultScreen(dpy));
 | 
			
		||||
 | 
			
		||||
  fs = XQueryFont (dpy, font);
 | 
			
		||||
  if (!fs)
 | 
			
		||||
    {
 | 
			
		||||
      gl_error (CC->gl_ctx, GL_INVALID_VALUE,
 | 
			
		||||
                "Couldn't get font structure information");
 | 
			
		||||
  if (!fs) {
 | 
			
		||||
      gl_error(NULL, GL_INVALID_VALUE,
 | 
			
		||||
               "Couldn't get font structure information");
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Allocate a bitmap that can fit all characters.  */
 | 
			
		||||
  max_width = fs->max_bounds.rbearing - fs->min_bounds.lbearing;
 | 
			
		||||
@@ -262,10 +256,10 @@ void Fake_glXUseXFont( Font font, int first, int count, int listbase )
 | 
			
		||||
(GLubyte));
 | 
			
		||||
  if (!bm) {
 | 
			
		||||
      XFreeFontInfo( NULL, fs, 0 );
 | 
			
		||||
      gl_error (CC->gl_ctx, GL_OUT_OF_MEMORY,
 | 
			
		||||
      gl_error(NULL, GL_OUT_OF_MEMORY,
 | 
			
		||||
                "Couldn't allocate bitmap in glXUseXFont()");
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
  /* get the page info */
 | 
			
		||||
@@ -387,16 +381,3 @@ bm_height);
 | 
			
		||||
  glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels);
 | 
			
		||||
  glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void xmesa_xfonts_dummy( void );
 | 
			
		||||
void xmesa_xfonts_dummy( void )
 | 
			
		||||
{
 | 
			
		||||
   /* silence unused var warnings */
 | 
			
		||||
   (void) kernel8;
 | 
			
		||||
   (void) DitherValues;
 | 
			
		||||
   (void) HPCR_DRGB;
 | 
			
		||||
   (void) kernel1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* The End. */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: glapi.c,v 1.42 2000/05/24 17:53:30 brianp Exp $ */
 | 
			
		||||
/* $Id: glapi.c,v 1.42.4.1 2000/10/19 20:14:57 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -1479,11 +1479,13 @@ get_static_proc_offset(const char *funcName)
 | 
			
		||||
static GLvoid *
 | 
			
		||||
get_static_proc_address(const char *funcName)
 | 
			
		||||
{
 | 
			
		||||
   GLint i = get_static_proc_offset(funcName);
 | 
			
		||||
   if (i >= 0)
 | 
			
		||||
      return static_functions[i].Address;
 | 
			
		||||
   else
 | 
			
		||||
      return NULL;
 | 
			
		||||
   GLint i;
 | 
			
		||||
   for (i = 0; static_functions[i].Name; i++) {
 | 
			
		||||
      if (strcmp(static_functions[i].Name, funcName) == 0) {
 | 
			
		||||
         return static_functions[i].Address;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
 | 
			
		||||
# $Id: glx86asm.py,v 1.1 2000/05/11 23:14:57 brianp Exp $
 | 
			
		||||
# $Id: glx86asm.py,v 1.1.4.1 2000/09/06 17:33:32 brianp Exp $
 | 
			
		||||
 | 
			
		||||
# Mesa 3-D graphics library
 | 
			
		||||
# Version:  3.3
 | 
			
		||||
# Version:  3.4
 | 
			
		||||
# 
 | 
			
		||||
# Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
# 
 | 
			
		||||
@@ -48,9 +48,9 @@ def PrintHead():
 | 
			
		||||
	print '#ifndef __WIN32__'
 | 
			
		||||
	print ''
 | 
			
		||||
	print '#if defined(USE_MGL_NAMESPACE)'
 | 
			
		||||
	print '#define GL_PREFIX(n) GLNAME(mgl ## n)'
 | 
			
		||||
	print '#define GL_PREFIX(n) GLNAME(CONCAT(mgl,n))'
 | 
			
		||||
	print '#else'
 | 
			
		||||
	print '#define GL_PREFIX(n) GLNAME(gl ## n)'
 | 
			
		||||
	print '#define GL_PREFIX(n) GLNAME(CONCAT(gl,n))'
 | 
			
		||||
	print '#endif'
 | 
			
		||||
	print ''
 | 
			
		||||
	print '#define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: accum.c,v 1.23 2000/07/15 03:14:25 brianp Exp $ */
 | 
			
		||||
/* $Id: accum.c,v 1.23.2.1 2000/10/17 00:24:11 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -235,6 +235,8 @@ _mesa_Accum( GLenum op, GLfloat value )
 | 
			
		||||
         if (ctx->IntegerAccumMode && value != ctx->IntegerAccumScaler)
 | 
			
		||||
            rescale_accum(ctx);
 | 
			
		||||
            
 | 
			
		||||
         RENDER_START(ctx);
 | 
			
		||||
 | 
			
		||||
         if (ctx->IntegerAccumMode) {
 | 
			
		||||
            /* simply add integer color values into accum buffer */
 | 
			
		||||
            GLuint j;
 | 
			
		||||
@@ -278,6 +280,7 @@ _mesa_Accum( GLenum op, GLfloat value )
 | 
			
		||||
         /* restore read buffer = draw buffer (the default) */
 | 
			
		||||
         (*ctx->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer,
 | 
			
		||||
                                       ctx->Color.DriverDrawBuffer );
 | 
			
		||||
         RENDER_FINISH(ctx);
 | 
			
		||||
	 break;
 | 
			
		||||
 | 
			
		||||
      case GL_LOAD:
 | 
			
		||||
@@ -298,6 +301,7 @@ _mesa_Accum( GLenum op, GLfloat value )
 | 
			
		||||
            ctx->IntegerAccumScaler = 0.0;
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
         RENDER_START(ctx);
 | 
			
		||||
         if (ctx->IntegerAccumMode) {
 | 
			
		||||
            /* just copy values into accum buffer */
 | 
			
		||||
            GLuint j;
 | 
			
		||||
@@ -341,6 +345,7 @@ _mesa_Accum( GLenum op, GLfloat value )
 | 
			
		||||
         /* restore read buffer = draw buffer (the default) */
 | 
			
		||||
         (*ctx->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer,
 | 
			
		||||
                                       ctx->Color.DriverDrawBuffer );
 | 
			
		||||
         RENDER_FINISH(ctx);
 | 
			
		||||
	 break;
 | 
			
		||||
 | 
			
		||||
      case GL_RETURN:
 | 
			
		||||
@@ -348,6 +353,7 @@ _mesa_Accum( GLenum op, GLfloat value )
 | 
			
		||||
         if (ctx->IntegerAccumMode && value != 1.0)
 | 
			
		||||
            rescale_accum(ctx);
 | 
			
		||||
 | 
			
		||||
         RENDER_START(ctx);
 | 
			
		||||
         if (ctx->IntegerAccumMode && ctx->IntegerAccumScaler > 0) {
 | 
			
		||||
            /* build lookup table to avoid many floating point multiplies */
 | 
			
		||||
            const GLfloat mult = ctx->IntegerAccumScaler;
 | 
			
		||||
@@ -411,6 +417,7 @@ _mesa_Accum( GLenum op, GLfloat value )
 | 
			
		||||
               ypos++;
 | 
			
		||||
            }
 | 
			
		||||
	 }
 | 
			
		||||
         RENDER_FINISH(ctx);
 | 
			
		||||
	 break;
 | 
			
		||||
 | 
			
		||||
      default:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: attrib.c,v 1.25 2000/07/19 18:34:00 brianp Exp $ */
 | 
			
		||||
/* $Id: attrib.c,v 1.25.2.1 2000/09/28 22:39:41 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -213,8 +213,8 @@ _mesa_PushAttrib(GLbitfield mask)
 | 
			
		||||
      attr->RescaleNormals = ctx->Transform.RescaleNormals;
 | 
			
		||||
      attr->Scissor = ctx->Scissor.Enabled;
 | 
			
		||||
      attr->Stencil = ctx->Stencil.Enabled;
 | 
			
		||||
      attr->Texture = ctx->Texture.Enabled;
 | 
			
		||||
      for (i=0; i<MAX_TEXTURE_UNITS; i++) {
 | 
			
		||||
         attr->Texture[i] = ctx->Texture.Unit[i].Enabled;
 | 
			
		||||
         attr->TexGen[i] = ctx->Texture.Unit[i].TexGenEnabled;
 | 
			
		||||
      }
 | 
			
		||||
      newnode = new_attrib_node( GL_ENABLE_BIT );
 | 
			
		||||
@@ -393,6 +393,148 @@ _mesa_PushAttrib(GLbitfield mask)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
pop_enable_group(GLcontext *ctx, const struct gl_enable_attrib *enable)
 | 
			
		||||
{
 | 
			
		||||
   GLuint i;
 | 
			
		||||
 | 
			
		||||
#define TEST_AND_UPDATE(VALUE, NEWVALUE, ENUM)		\
 | 
			
		||||
	if ((VALUE) != (NEWVALUE)) {			\
 | 
			
		||||
	   _mesa_set_enable( ctx, ENUM, (NEWVALUE) );	\
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Color.AlphaEnabled, enable->AlphaTest, GL_ALPHA_TEST);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Transform.Normalize, enable->AutoNormal, GL_NORMALIZE);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Color.BlendEnabled, enable->Blend, GL_BLEND);
 | 
			
		||||
 | 
			
		||||
   for (i=0;i<MAX_CLIP_PLANES;i++) {
 | 
			
		||||
      if (ctx->Transform.ClipEnabled[i] != enable->ClipPlane[i])
 | 
			
		||||
         _mesa_set_enable(ctx, (GLenum) (GL_CLIP_PLANE0 + i),
 | 
			
		||||
                          enable->ClipPlane[i]);
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Light.ColorMaterialEnabled, enable->ColorMaterial,
 | 
			
		||||
                   GL_COLOR_MATERIAL);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Polygon.CullFlag, enable->CullFace, GL_CULL_FACE);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Depth.Test, enable->DepthTest, GL_DEPTH_TEST);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Color.DitherFlag, enable->Dither, GL_DITHER);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Pixel.Convolution1DEnabled, enable->Convolution1D,
 | 
			
		||||
                   GL_CONVOLUTION_1D);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Pixel.Convolution2DEnabled, enable->Convolution2D,
 | 
			
		||||
                   GL_CONVOLUTION_2D);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Pixel.Separable2DEnabled, enable->Separable2D,
 | 
			
		||||
                   GL_SEPARABLE_2D);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Fog.Enabled, enable->Fog, GL_FOG);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Light.Enabled, enable->Lighting, GL_LIGHTING);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Line.SmoothFlag, enable->LineSmooth, GL_LINE_SMOOTH);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Line.StippleFlag, enable->LineStipple,
 | 
			
		||||
                   GL_LINE_STIPPLE);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Color.IndexLogicOpEnabled, enable->IndexLogicOp,
 | 
			
		||||
                   GL_INDEX_LOGIC_OP);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Color.ColorLogicOpEnabled, enable->ColorLogicOp,
 | 
			
		||||
                   GL_COLOR_LOGIC_OP);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map1Color4, enable->Map1Color4, GL_MAP1_COLOR_4);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map1Index, enable->Map1Index, GL_MAP1_INDEX);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map1Normal, enable->Map1Normal, GL_MAP1_NORMAL);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map1TextureCoord1, enable->Map1TextureCoord1,
 | 
			
		||||
                   GL_MAP1_TEXTURE_COORD_1);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map1TextureCoord2, enable->Map1TextureCoord2,
 | 
			
		||||
                   GL_MAP1_TEXTURE_COORD_2);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map1TextureCoord3, enable->Map1TextureCoord3,
 | 
			
		||||
                   GL_MAP1_TEXTURE_COORD_3);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map1TextureCoord4, enable->Map1TextureCoord4,
 | 
			
		||||
                   GL_MAP1_TEXTURE_COORD_4);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map1Vertex3, enable->Map1Vertex3,
 | 
			
		||||
                   GL_MAP1_VERTEX_3);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map1Vertex4, enable->Map1Vertex4,
 | 
			
		||||
                   GL_MAP1_VERTEX_4);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map2Color4, enable->Map2Color4, GL_MAP2_COLOR_4);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map2Index, enable->Map2Index, GL_MAP2_INDEX);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map2Normal, enable->Map2Normal, GL_MAP2_NORMAL);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map2TextureCoord1, enable->Map2TextureCoord1,
 | 
			
		||||
                   GL_MAP2_TEXTURE_COORD_1);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map2TextureCoord2, enable->Map2TextureCoord2,
 | 
			
		||||
                   GL_MAP2_TEXTURE_COORD_2);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map2TextureCoord3, enable->Map2TextureCoord3,
 | 
			
		||||
                   GL_MAP2_TEXTURE_COORD_3);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map2TextureCoord4, enable->Map2TextureCoord4,
 | 
			
		||||
                   GL_MAP2_TEXTURE_COORD_4);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map2Vertex3, enable->Map2Vertex3,
 | 
			
		||||
                   GL_MAP2_VERTEX_3);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Eval.Map2Vertex4, enable->Map2Vertex4,
 | 
			
		||||
                   GL_MAP2_VERTEX_4);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Transform.Normalize, enable->Normalize, GL_NORMALIZE);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Transform.RescaleNormals, enable->RescaleNormals,
 | 
			
		||||
                   GL_RESCALE_NORMAL_EXT);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Pixel.PixelTextureEnabled, enable->PixelTexture,
 | 
			
		||||
                   GL_POINT_SMOOTH);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Point.SmoothFlag, enable->PointSmooth,
 | 
			
		||||
                   GL_POINT_SMOOTH);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Polygon.OffsetPoint, enable->PolygonOffsetPoint,
 | 
			
		||||
                   GL_POLYGON_OFFSET_POINT);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Polygon.OffsetLine, enable->PolygonOffsetLine,
 | 
			
		||||
                   GL_POLYGON_OFFSET_LINE);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Polygon.OffsetFill, enable->PolygonOffsetFill,
 | 
			
		||||
                   GL_POLYGON_OFFSET_FILL);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Polygon.SmoothFlag, enable->PolygonSmooth,
 | 
			
		||||
                   GL_POLYGON_SMOOTH);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Polygon.StippleFlag, enable->PolygonStipple,
 | 
			
		||||
                   GL_POLYGON_STIPPLE);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Scissor.Enabled, enable->Scissor, GL_SCISSOR_TEST);
 | 
			
		||||
   TEST_AND_UPDATE(ctx->Stencil.Enabled, enable->Stencil, GL_STENCIL_TEST);
 | 
			
		||||
#undef TEST_AND_UPDATE
 | 
			
		||||
 | 
			
		||||
   /* texture unit enables */
 | 
			
		||||
   for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
 | 
			
		||||
      if (ctx->Texture.Unit[i].Enabled != enable->Texture[i]) {
 | 
			
		||||
         ctx->Texture.Unit[i].Enabled = enable->Texture[i];
 | 
			
		||||
         if (ctx->Driver.Enable) {
 | 
			
		||||
            if (ctx->Driver.ActiveTexture) {
 | 
			
		||||
               (*ctx->Driver.ActiveTexture)(ctx, i);
 | 
			
		||||
            }
 | 
			
		||||
            (*ctx->Driver.Enable)( ctx, GL_TEXTURE_1D,
 | 
			
		||||
                             (GLboolean) (enable->Texture[i] & TEXTURE0_1D) );
 | 
			
		||||
            (*ctx->Driver.Enable)( ctx, GL_TEXTURE_2D,
 | 
			
		||||
                             (GLboolean) (enable->Texture[i] & TEXTURE0_2D) );
 | 
			
		||||
            (*ctx->Driver.Enable)( ctx, GL_TEXTURE_3D,
 | 
			
		||||
                             (GLboolean) (enable->Texture[i] & TEXTURE0_3D) );
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (ctx->Texture.Unit[i].TexGenEnabled != enable->TexGen[i]) {
 | 
			
		||||
         ctx->Texture.Unit[i].TexGenEnabled = enable->TexGen[i];
 | 
			
		||||
         if (ctx->Driver.Enable) {
 | 
			
		||||
            if (ctx->Driver.ActiveTexture) {
 | 
			
		||||
               (*ctx->Driver.ActiveTexture)(ctx, i);
 | 
			
		||||
            }
 | 
			
		||||
            if (enable->TexGen[i] & S_BIT)
 | 
			
		||||
               (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_S, GL_TRUE);
 | 
			
		||||
            else
 | 
			
		||||
               (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_S, GL_FALSE);
 | 
			
		||||
            if (enable->TexGen[i] & T_BIT)
 | 
			
		||||
               (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_T, GL_TRUE);
 | 
			
		||||
            else
 | 
			
		||||
               (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_T, GL_FALSE);
 | 
			
		||||
            if (enable->TexGen[i] & R_BIT)
 | 
			
		||||
               (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_R, GL_TRUE);
 | 
			
		||||
            else
 | 
			
		||||
               (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_R, GL_FALSE);
 | 
			
		||||
            if (enable->TexGen[i] & Q_BIT)
 | 
			
		||||
               (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_Q, GL_TRUE);
 | 
			
		||||
            else
 | 
			
		||||
               (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_Q, GL_FALSE);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (ctx->Driver.ActiveTexture) {
 | 
			
		||||
      (*ctx->Driver.ActiveTexture)(ctx, ctx->Texture.CurrentUnit);
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This function is kind of long just because we have to call a lot
 | 
			
		||||
 * of device driver functions to update device driver state.
 | 
			
		||||
@@ -495,116 +637,7 @@ _mesa_PopAttrib(void)
 | 
			
		||||
            {
 | 
			
		||||
               const struct gl_enable_attrib *enable;
 | 
			
		||||
               enable = (const struct gl_enable_attrib *) attr->data;
 | 
			
		||||
 | 
			
		||||
#define TEST_AND_UPDATE(VALUE, NEWVALUE, ENUM)		\
 | 
			
		||||
	if ((VALUE) != (NEWVALUE)) {			\
 | 
			
		||||
	   _mesa_set_enable( ctx, ENUM, (NEWVALUE) );	\
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Color.AlphaEnabled, enable->AlphaTest, GL_ALPHA_TEST);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Transform.Normalize, enable->AutoNormal, GL_NORMALIZE);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Color.BlendEnabled, enable->Blend, GL_BLEND);
 | 
			
		||||
               {
 | 
			
		||||
                  GLuint i;
 | 
			
		||||
                  for (i=0;i<MAX_CLIP_PLANES;i++) {
 | 
			
		||||
                     if (ctx->Transform.ClipEnabled[i] != enable->ClipPlane[i])
 | 
			
		||||
                        _mesa_set_enable( ctx, (GLenum) (GL_CLIP_PLANE0 + i), enable->ClipPlane[i] );
 | 
			
		||||
                  }
 | 
			
		||||
               }
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Light.ColorMaterialEnabled, enable->ColorMaterial, GL_COLOR_MATERIAL);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Polygon.CullFlag, enable->CullFace, GL_CULL_FACE);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Depth.Test, enable->DepthTest, GL_DEPTH_TEST);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Color.DitherFlag, enable->Dither, GL_DITHER);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Pixel.Convolution1DEnabled, enable->Convolution1D, GL_CONVOLUTION_1D);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Pixel.Convolution2DEnabled, enable->Convolution2D, GL_CONVOLUTION_2D);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Pixel.Separable2DEnabled, enable->Separable2D, GL_SEPARABLE_2D);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Fog.Enabled, enable->Fog, GL_FOG);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Light.Enabled, enable->Lighting, GL_LIGHTING);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Line.SmoothFlag, enable->LineSmooth, GL_LINE_SMOOTH);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Line.StippleFlag, enable->LineStipple, GL_LINE_STIPPLE);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Color.IndexLogicOpEnabled, enable->IndexLogicOp, GL_INDEX_LOGIC_OP);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Color.ColorLogicOpEnabled, enable->ColorLogicOp, GL_COLOR_LOGIC_OP);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map1Color4, enable->Map1Color4, GL_MAP1_COLOR_4);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map1Index, enable->Map1Index, GL_MAP1_INDEX);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map1Normal, enable->Map1Normal, GL_MAP1_NORMAL);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map1TextureCoord1, enable->Map1TextureCoord1, GL_MAP1_TEXTURE_COORD_1);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map1TextureCoord2, enable->Map1TextureCoord2, GL_MAP1_TEXTURE_COORD_2);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map1TextureCoord3, enable->Map1TextureCoord3, GL_MAP1_TEXTURE_COORD_3);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map1TextureCoord4, enable->Map1TextureCoord4, GL_MAP1_TEXTURE_COORD_4);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map1Vertex3, enable->Map1Vertex3, GL_MAP1_VERTEX_3);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map1Vertex4, enable->Map1Vertex4, GL_MAP1_VERTEX_4);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map2Color4, enable->Map2Color4, GL_MAP2_COLOR_4);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map2Index, enable->Map2Index, GL_MAP2_INDEX);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map2Normal, enable->Map2Normal, GL_MAP2_NORMAL);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map2TextureCoord1, enable->Map2TextureCoord1, GL_MAP2_TEXTURE_COORD_1);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map2TextureCoord2, enable->Map2TextureCoord2, GL_MAP2_TEXTURE_COORD_2);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map2TextureCoord3, enable->Map2TextureCoord3, GL_MAP2_TEXTURE_COORD_3);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map2TextureCoord4, enable->Map2TextureCoord4, GL_MAP2_TEXTURE_COORD_4);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map2Vertex3, enable->Map2Vertex3, GL_MAP2_VERTEX_3);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Eval.Map2Vertex4, enable->Map2Vertex4, GL_MAP2_VERTEX_4);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Transform.Normalize, enable->Normalize, GL_NORMALIZE);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Transform.RescaleNormals, enable->RescaleNormals, GL_RESCALE_NORMAL_EXT);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Pixel.PixelTextureEnabled, enable->PixelTexture, GL_POINT_SMOOTH);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Point.SmoothFlag, enable->PointSmooth, GL_POINT_SMOOTH);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Polygon.OffsetPoint, enable->PolygonOffsetPoint, GL_POLYGON_OFFSET_POINT);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Polygon.OffsetLine, enable->PolygonOffsetLine, GL_POLYGON_OFFSET_LINE);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Polygon.OffsetFill, enable->PolygonOffsetFill, GL_POLYGON_OFFSET_FILL);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Polygon.SmoothFlag, enable->PolygonSmooth, GL_POLYGON_SMOOTH);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Polygon.StippleFlag, enable->PolygonStipple, GL_POLYGON_STIPPLE);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Scissor.Enabled, enable->Scissor, GL_SCISSOR_TEST);
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Stencil.Enabled, enable->Stencil, GL_STENCIL_TEST);
 | 
			
		||||
               if (ctx->Texture.Enabled != enable->Texture) {
 | 
			
		||||
                  ctx->Texture.Enabled = enable->Texture;
 | 
			
		||||
                  if (ctx->Driver.Enable) {
 | 
			
		||||
                     if (ctx->Driver.ActiveTexture)
 | 
			
		||||
                        (*ctx->Driver.ActiveTexture)( ctx, 0 );
 | 
			
		||||
                     (*ctx->Driver.Enable)( ctx, GL_TEXTURE_1D, (GLboolean) (enable->Texture & TEXTURE0_1D) );
 | 
			
		||||
                     (*ctx->Driver.Enable)( ctx, GL_TEXTURE_2D, (GLboolean) (enable->Texture & TEXTURE0_2D) );
 | 
			
		||||
                     (*ctx->Driver.Enable)( ctx, GL_TEXTURE_3D, (GLboolean) (enable->Texture & TEXTURE0_3D) );
 | 
			
		||||
                     if (ctx->Driver.ActiveTexture)
 | 
			
		||||
                        (*ctx->Driver.ActiveTexture)( ctx, 1 );
 | 
			
		||||
                     (*ctx->Driver.Enable)( ctx, GL_TEXTURE_1D, (GLboolean) (enable->Texture & TEXTURE1_1D) );
 | 
			
		||||
                     (*ctx->Driver.Enable)( ctx, GL_TEXTURE_2D, (GLboolean) (enable->Texture & TEXTURE1_2D) );
 | 
			
		||||
                     (*ctx->Driver.Enable)( ctx, GL_TEXTURE_3D, (GLboolean) (enable->Texture & TEXTURE1_3D) );
 | 
			
		||||
                     if (ctx->Driver.ActiveTexture)
 | 
			
		||||
                        (*ctx->Driver.ActiveTexture)( ctx, ctx->Texture.CurrentUnit );
 | 
			
		||||
                  }
 | 
			
		||||
               }
 | 
			
		||||
#undef TEST_AND_UPDATE
 | 
			
		||||
               {
 | 
			
		||||
                  GLuint i;
 | 
			
		||||
                  for (i=0; i<MAX_TEXTURE_UNITS; i++) {
 | 
			
		||||
                     if (ctx->Texture.Unit[i].TexGenEnabled != enable->TexGen[i]) {
 | 
			
		||||
                        ctx->Texture.Unit[i].TexGenEnabled = enable->TexGen[i];
 | 
			
		||||
 | 
			
		||||
			/* ctx->Enabled recalculated in state change
 | 
			
		||||
                           processing */
 | 
			
		||||
			
 | 
			
		||||
                        if (ctx->Driver.Enable) {
 | 
			
		||||
                           if (ctx->Driver.ActiveTexture)
 | 
			
		||||
                              (*ctx->Driver.ActiveTexture)( ctx, i );
 | 
			
		||||
                           if (enable->TexGen[i] & S_BIT)
 | 
			
		||||
                              (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_S, GL_TRUE);
 | 
			
		||||
                           else
 | 
			
		||||
                              (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_S, GL_FALSE);
 | 
			
		||||
                           if (enable->TexGen[i] & T_BIT)
 | 
			
		||||
                              (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_T, GL_TRUE);
 | 
			
		||||
                           else
 | 
			
		||||
                              (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_T, GL_FALSE);
 | 
			
		||||
                           if (enable->TexGen[i] & R_BIT)
 | 
			
		||||
                              (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_R, GL_TRUE);
 | 
			
		||||
                           else
 | 
			
		||||
                              (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_R, GL_FALSE);
 | 
			
		||||
                           if (enable->TexGen[i] & Q_BIT)
 | 
			
		||||
                              (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_Q, GL_TRUE);
 | 
			
		||||
                           else
 | 
			
		||||
                              (*ctx->Driver.Enable)( ctx, GL_TEXTURE_GEN_Q, GL_FALSE);
 | 
			
		||||
                        }
 | 
			
		||||
                     }
 | 
			
		||||
                  }
 | 
			
		||||
                  if (ctx->Driver.ActiveTexture)
 | 
			
		||||
                     (*ctx->Driver.ActiveTexture)( ctx, ctx->Texture.CurrentUnit );
 | 
			
		||||
               }
 | 
			
		||||
               pop_enable_group(ctx, enable);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
         case GL_EVAL_BIT:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,21 @@
 | 
			
		||||
/* $Id: blend.c,v 1.16 2000/06/29 22:06:22 brianp Exp $ */
 | 
			
		||||
/* $Id: blend.c,v 1.16.4.2 2000/10/22 23:10:49 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
@@ -289,7 +289,7 @@ _mesa_BlendEquation( GLenum mode )
 | 
			
		||||
 | 
			
		||||
   ctx->Color.BlendFunc = NULL;
 | 
			
		||||
   ctx->NewState |= NEW_RASTER_OPS;
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
   if (ctx->Driver.BlendEquation)
 | 
			
		||||
      ctx->Driver.BlendEquation( ctx, mode );
 | 
			
		||||
}
 | 
			
		||||
@@ -339,11 +339,31 @@ blend_transparency( GLcontext *ctx, GLuint n, const GLubyte mask[],
 | 
			
		||||
            /* 100% alpha, no-op */
 | 
			
		||||
         }
 | 
			
		||||
         else {
 | 
			
		||||
#if 0
 | 
			
		||||
            /* This is pretty close, but Glean complains */
 | 
			
		||||
            const GLint s = CHAN_MAX - t;
 | 
			
		||||
            const GLint r = (rgba[i][RCOMP] * t + dest[i][RCOMP] * s) >> 8;
 | 
			
		||||
            const GLint g = (rgba[i][GCOMP] * t + dest[i][GCOMP] * s) >> 8;
 | 
			
		||||
            const GLint b = (rgba[i][BCOMP] * t + dest[i][BCOMP] * s) >> 8;
 | 
			
		||||
            const GLint a = (rgba[i][ACOMP] * t + dest[i][ACOMP] * s) >> 8;
 | 
			
		||||
            const GLint r = (rgba[i][RCOMP] * t + dest[i][RCOMP] * s + 1) >> 8;
 | 
			
		||||
            const GLint g = (rgba[i][GCOMP] * t + dest[i][GCOMP] * s + 1) >> 8;
 | 
			
		||||
            const GLint b = (rgba[i][BCOMP] * t + dest[i][BCOMP] * s + 1) >> 8;
 | 
			
		||||
            const GLint a = (rgba[i][ACOMP] * t + dest[i][ACOMP] * s + 1) >> 8;
 | 
			
		||||
#elif 0
 | 
			
		||||
            /* This is slower but satisfies Glean */
 | 
			
		||||
            const GLint s = CHAN_MAX - t;
 | 
			
		||||
            const GLint r = (rgba[i][RCOMP] * t + dest[i][RCOMP] * s) / 255;
 | 
			
		||||
            const GLint g = (rgba[i][GCOMP] * t + dest[i][GCOMP] * s) / 255;
 | 
			
		||||
            const GLint b = (rgba[i][BCOMP] * t + dest[i][BCOMP] * s) / 255;
 | 
			
		||||
            const GLint a = (rgba[i][ACOMP] * t + dest[i][ACOMP] * s) / 255;
 | 
			
		||||
#else
 | 
			
		||||
            /* This satisfies Glean and should be reasonably fast */
 | 
			
		||||
            /* Contributed by Nathan Hand */
 | 
			
		||||
#define DIV255(X)  (((X) << 8) + (X) + 256) >> 16
 | 
			
		||||
            const GLint s = CHAN_MAX - t;
 | 
			
		||||
            const GLint r = DIV255(rgba[i][RCOMP] * t + dest[i][RCOMP] * s);
 | 
			
		||||
            const GLint g = DIV255(rgba[i][GCOMP] * t + dest[i][GCOMP] * s);
 | 
			
		||||
            const GLint b = DIV255(rgba[i][BCOMP] * t + dest[i][BCOMP] * s);
 | 
			
		||||
            const GLint a = DIV255(rgba[i][ACOMP] * t + dest[i][ACOMP] * s);
 | 
			
		||||
#undef DIV255
 | 
			
		||||
#endif
 | 
			
		||||
            ASSERT(r <= CHAN_MAX);
 | 
			
		||||
            ASSERT(g <= CHAN_MAX);
 | 
			
		||||
            ASSERT(b <= CHAN_MAX);
 | 
			
		||||
@@ -755,22 +775,22 @@ blend_general( GLcontext *ctx, GLuint n, const GLubyte mask[],
 | 
			
		||||
 | 
			
		||||
         /* compute blended color */
 | 
			
		||||
         if (ctx->Color.BlendEquation==GL_FUNC_ADD_EXT) {
 | 
			
		||||
            r = Rs * sR + Rd * dR;
 | 
			
		||||
            g = Gs * sG + Gd * dG;
 | 
			
		||||
            b = Bs * sB + Bd * dB;
 | 
			
		||||
            a = As * sA + Ad * dA;
 | 
			
		||||
            r = Rs * sR + Rd * dR + 0.5F;
 | 
			
		||||
            g = Gs * sG + Gd * dG + 0.5F;
 | 
			
		||||
            b = Bs * sB + Bd * dB + 0.5F;
 | 
			
		||||
            a = As * sA + Ad * dA + 0.5F;
 | 
			
		||||
         }
 | 
			
		||||
         else if (ctx->Color.BlendEquation==GL_FUNC_SUBTRACT_EXT) {
 | 
			
		||||
            r = Rs * sR - Rd * dR;
 | 
			
		||||
            g = Gs * sG - Gd * dG;
 | 
			
		||||
            b = Bs * sB - Bd * dB;
 | 
			
		||||
            a = As * sA - Ad * dA;
 | 
			
		||||
            r = Rs * sR - Rd * dR + 0.5F;
 | 
			
		||||
            g = Gs * sG - Gd * dG + 0.5F;
 | 
			
		||||
            b = Bs * sB - Bd * dB + 0.5F;
 | 
			
		||||
            a = As * sA - Ad * dA + 0.5F;
 | 
			
		||||
         }
 | 
			
		||||
         else if (ctx->Color.BlendEquation==GL_FUNC_REVERSE_SUBTRACT_EXT) {
 | 
			
		||||
            r = Rd * dR - Rs * sR;
 | 
			
		||||
            g = Gd * dG - Gs * sG;
 | 
			
		||||
            b = Bd * dB - Bs * sB;
 | 
			
		||||
            a = Ad * dA - As * sA;
 | 
			
		||||
            r = Rd * dR - Rs * sR + 0.5F;
 | 
			
		||||
            g = Gd * dG - Gs * sG + 0.5F;
 | 
			
		||||
            b = Bd * dB - Bs * sB + 0.5F;
 | 
			
		||||
            a = Ad * dA - As * sA + 0.5F;
 | 
			
		||||
         }
 | 
			
		||||
         else {
 | 
			
		||||
            /* should never get here */
 | 
			
		||||
@@ -791,7 +811,7 @@ blend_general( GLcontext *ctx, GLuint n, const GLubyte mask[],
 | 
			
		||||
 | 
			
		||||
#if defined(USE_MMX_ASM)
 | 
			
		||||
#include "X86/mmx.h"
 | 
			
		||||
#include "X86/common_x86asm.h"
 | 
			
		||||
#include "X86/common_x86_asm.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -811,8 +831,8 @@ static void set_blend_function( GLcontext *ctx )
 | 
			
		||||
   /* Hmm.  A table here would have 12^4 == way too many entries.
 | 
			
		||||
    * Provide a hook for MMX instead.
 | 
			
		||||
    */
 | 
			
		||||
   if (gl_x86_cpu_features & GL_CPU_MMX) {
 | 
			
		||||
      gl_mmx_set_blend_function (ctx);
 | 
			
		||||
   if ( cpu_has_mmx ) {
 | 
			
		||||
      gl_mmx_set_blend_function( ctx );
 | 
			
		||||
   }
 | 
			
		||||
   else
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/* $Id: buffers.c,v 1.9.4.2 2000/10/19 18:14:58 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -208,15 +209,19 @@ clear_color_buffers(GLcontext *ctx)
 | 
			
		||||
      if (bufferBit & ctx->Color.DrawDestMask) {
 | 
			
		||||
         if (bufferBit == FRONT_LEFT_BIT) {
 | 
			
		||||
            (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_FRONT_LEFT);
 | 
			
		||||
            (void) (*ctx->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_FRONT_LEFT);
 | 
			
		||||
         }
 | 
			
		||||
         else if (bufferBit == FRONT_RIGHT_BIT) {
 | 
			
		||||
            (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_FRONT_RIGHT);
 | 
			
		||||
            (void) (*ctx->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_FRONT_RIGHT);
 | 
			
		||||
         }
 | 
			
		||||
         else if (bufferBit == BACK_LEFT_BIT) {
 | 
			
		||||
            (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_BACK_LEFT);
 | 
			
		||||
            (void) (*ctx->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_BACK_LEFT);
 | 
			
		||||
         }
 | 
			
		||||
         else {
 | 
			
		||||
            (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_BACK_RIGHT);
 | 
			
		||||
            (void) (*ctx->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_BACK_RIGHT);
 | 
			
		||||
         }
 | 
			
		||||
         
 | 
			
		||||
         if (ctx->Color.SWmasking) {
 | 
			
		||||
@@ -228,8 +233,9 @@ clear_color_buffers(GLcontext *ctx)
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /* restore default dest buffer */
 | 
			
		||||
   /* restore default read/draw buffers */
 | 
			
		||||
   (void) (*ctx->Driver.SetDrawBuffer)( ctx, ctx->Color.DriverDrawBuffer );
 | 
			
		||||
   (void) (*ctx->Driver.SetReadBuffer)( ctx, ctx->ReadBuffer, ctx->Pixel.DriverReadBuffer );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -287,6 +293,8 @@ _mesa_Clear( GLbitfield mask )
 | 
			
		||||
      }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
      RENDER_START(ctx);
 | 
			
		||||
 | 
			
		||||
      /* do software clearing here */
 | 
			
		||||
      if (newMask) {
 | 
			
		||||
         if (newMask & ctx->Color.DrawDestMask)   clear_color_buffers(ctx);
 | 
			
		||||
@@ -302,6 +310,8 @@ _mesa_Clear( GLbitfield mask )
 | 
			
		||||
         _mesa_clear_alpha_buffers( ctx );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      RENDER_FINISH(ctx);
 | 
			
		||||
 | 
			
		||||
#ifdef PROFILE
 | 
			
		||||
      ctx->ClearTime += gl_time() - t0;
 | 
			
		||||
      ctx->ClearCount++;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: context.c,v 1.79 2000/07/19 20:58:59 brianp Exp $ */
 | 
			
		||||
/* $Id: context.c,v 1.79.2.5 2000/10/17 00:24:11 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -211,10 +211,11 @@ _mesa_initialize_visual( GLvisual *vis,
 | 
			
		||||
 | 
			
		||||
   if (depthBits == 0) {
 | 
			
		||||
      /* Special case.  Even if we don't have a depth buffer we need
 | 
			
		||||
       * good values for DepthMax for Z vertex transformation purposes.
 | 
			
		||||
       * good values for DepthMax for Z vertex transformation purposes
 | 
			
		||||
       * and for per-fragment fog computation.
 | 
			
		||||
       */
 | 
			
		||||
      vis->DepthMax = 1;
 | 
			
		||||
      vis->DepthMaxF = 1.0F;
 | 
			
		||||
      vis->DepthMax = 1 << 16;
 | 
			
		||||
      vis->DepthMaxF = (GLfloat) vis->DepthMax;
 | 
			
		||||
   }
 | 
			
		||||
   else if (depthBits < 32) {
 | 
			
		||||
      vis->DepthMax = (1 << depthBits) - 1;
 | 
			
		||||
@@ -452,8 +453,9 @@ alloc_shared_state( void )
 | 
			
		||||
   if (!ss)
 | 
			
		||||
      return NULL;
 | 
			
		||||
 | 
			
		||||
   ss->DisplayList = _mesa_NewHashTable();
 | 
			
		||||
   _glthread_INIT_MUTEX(ss->Mutex);
 | 
			
		||||
 | 
			
		||||
   ss->DisplayList = _mesa_NewHashTable();
 | 
			
		||||
   ss->TexObjects = _mesa_NewHashTable();
 | 
			
		||||
 | 
			
		||||
   /* Default Texture objects */
 | 
			
		||||
@@ -593,6 +595,8 @@ init_texture_unit( GLcontext *ctx, GLuint unit )
 | 
			
		||||
{
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
 | 
			
		||||
 | 
			
		||||
   texUnit->Enabled = 0;
 | 
			
		||||
   texUnit->ReallyEnabled = 0;
 | 
			
		||||
   texUnit->EnvMode = GL_MODULATE;
 | 
			
		||||
   texUnit->CombineModeRGB = GL_MODULATE;
 | 
			
		||||
   texUnit->CombineModeA = GL_MODULATE;
 | 
			
		||||
@@ -1149,9 +1153,10 @@ init_attrib_groups( GLcontext *ctx )
 | 
			
		||||
   /* Texture group */
 | 
			
		||||
   ctx->Texture.CurrentUnit = 0;      /* multitexture */
 | 
			
		||||
   ctx->Texture.CurrentTransformUnit = 0; /* multitexture */
 | 
			
		||||
   ctx->Texture.Enabled = 0;
 | 
			
		||||
   ctx->Texture.ReallyEnabled = 0;
 | 
			
		||||
   for (i=0; i<MAX_TEXTURE_UNITS; i++)
 | 
			
		||||
      init_texture_unit( ctx, i );
 | 
			
		||||
   ctx->Texture.SharedPalette = GL_FALSE;
 | 
			
		||||
   _mesa_init_colortable(&ctx->Texture.Palette);
 | 
			
		||||
 | 
			
		||||
   /* Transformation group */
 | 
			
		||||
@@ -1376,7 +1381,8 @@ alloc_proxy_textures( GLcontext *ctx )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Initialize a GLcontext struct.
 | 
			
		||||
 * Initialize a GLcontext struct.  This includes allocating all the
 | 
			
		||||
 * other structs and arrays which hang off of the context by pointers.
 | 
			
		||||
 */
 | 
			
		||||
GLboolean
 | 
			
		||||
_mesa_initialize_context( GLcontext *ctx,
 | 
			
		||||
@@ -1399,7 +1405,6 @@ _mesa_initialize_context( GLcontext *ctx,
 | 
			
		||||
 | 
			
		||||
   ctx->VB = gl_vb_create_for_immediate( ctx );
 | 
			
		||||
   if (!ctx->VB) {
 | 
			
		||||
      FREE( ctx );
 | 
			
		||||
      return GL_FALSE;
 | 
			
		||||
   }
 | 
			
		||||
   ctx->input = ctx->VB->IM;
 | 
			
		||||
@@ -1407,7 +1412,6 @@ _mesa_initialize_context( GLcontext *ctx,
 | 
			
		||||
   ctx->PB = gl_alloc_pb();
 | 
			
		||||
   if (!ctx->PB) {
 | 
			
		||||
      ALIGN_FREE( ctx->VB );
 | 
			
		||||
      FREE( ctx );
 | 
			
		||||
      return GL_FALSE;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
@@ -1421,7 +1425,6 @@ _mesa_initialize_context( GLcontext *ctx,
 | 
			
		||||
      if (!ctx->Shared) {
 | 
			
		||||
         ALIGN_FREE( ctx->VB );
 | 
			
		||||
         FREE( ctx->PB );
 | 
			
		||||
         FREE( ctx );
 | 
			
		||||
         return GL_FALSE;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
@@ -1453,7 +1456,6 @@ _mesa_initialize_context( GLcontext *ctx,
 | 
			
		||||
      free_shared_state(ctx, ctx->Shared);
 | 
			
		||||
      ALIGN_FREE( ctx->VB );
 | 
			
		||||
      FREE( ctx->PB );
 | 
			
		||||
      FREE( ctx );
 | 
			
		||||
      return GL_FALSE;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
@@ -1484,7 +1486,6 @@ _mesa_initialize_context( GLcontext *ctx,
 | 
			
		||||
      FREE( ctx->PB );
 | 
			
		||||
      if (ctx->Exec)
 | 
			
		||||
         FREE( ctx->Exec );
 | 
			
		||||
      FREE( ctx );
 | 
			
		||||
   }
 | 
			
		||||
   _mesa_init_exec_table(ctx->Exec, dispatchSize);
 | 
			
		||||
   _mesa_init_dlist_table(ctx->Save, dispatchSize);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/* $Id: dd.h,v 1.26.4.4 2000/09/28 18:25:00 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -640,18 +641,31 @@ struct dd_function_table {
 | 
			
		||||
    * Core Mesa will perform any image format/type conversions that are needed.
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
   GLboolean (*TestProxyTexImage)(GLcontext *ctx, GLenum target,
 | 
			
		||||
                                  GLint level, GLint internalFormat,
 | 
			
		||||
                                  GLenum format, GLenum type,
 | 
			
		||||
                                  GLint width, GLint height,
 | 
			
		||||
                                  GLint depth, GLint border);
 | 
			
		||||
   /* Called by glTexImage[123]D when user specifies a proxy texture
 | 
			
		||||
    * target.  Return GL_TRUE if the proxy test passes, return GL_FALSE
 | 
			
		||||
    * if the test fails.
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
   GLboolean (*CompressedTexImage1D)( GLcontext *ctx, GLenum target,
 | 
			
		||||
                                      GLint level, const GLvoid *data,
 | 
			
		||||
                                      GLint level, GLsizei imageSize,
 | 
			
		||||
                                      const GLvoid *data,
 | 
			
		||||
                                      struct gl_texture_object *texObj,
 | 
			
		||||
                                      struct gl_texture_image *texImage,
 | 
			
		||||
                                      GLboolean *retainInternalCopy);
 | 
			
		||||
   GLboolean (*CompressedTexImage2D)( GLcontext *ctx, GLenum target,
 | 
			
		||||
                                      GLint level, const GLvoid *data,
 | 
			
		||||
                                      GLint level, GLsizei imageSize,
 | 
			
		||||
                                      const GLvoid *data,
 | 
			
		||||
                                      struct gl_texture_object *texObj,
 | 
			
		||||
                                      struct gl_texture_image *texImage,
 | 
			
		||||
                                      GLboolean *retainInternalCopy);
 | 
			
		||||
   GLboolean (*CompressedTexImage3D)( GLcontext *ctx, GLenum target,
 | 
			
		||||
                                      GLint level, const GLvoid *data,
 | 
			
		||||
                                      GLint level, GLsizei imageSize,
 | 
			
		||||
                                      const GLvoid *data,
 | 
			
		||||
                                      struct gl_texture_object *texObj,
 | 
			
		||||
                                      struct gl_texture_image *texImage,
 | 
			
		||||
                                      GLboolean *retainInternalCopy);
 | 
			
		||||
@@ -699,6 +713,49 @@ struct dd_function_table {
 | 
			
		||||
    * should do the job.
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
   GLint (*BaseCompressedTexFormat)(GLcontext *ctx,
 | 
			
		||||
                                    GLint internalFormat);
 | 
			
		||||
   /* Called to compute the base format for a specific compressed
 | 
			
		||||
    * format.  Return -1 if the internalFormat is not a specific
 | 
			
		||||
    * compressed format that the driver recognizes.  Note the
 | 
			
		||||
    * return value differences between this function and
 | 
			
		||||
    * SpecificCompressedTexFormat below.
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
   GLint (*SpecificCompressedTexFormat)(GLcontext *ctx,
 | 
			
		||||
                                        GLint      internalFormat,
 | 
			
		||||
                                        GLint      numDimensions,
 | 
			
		||||
                                        GLint     *levelp,
 | 
			
		||||
                                        GLsizei   *widthp,
 | 
			
		||||
                                        GLsizei   *heightp,
 | 
			
		||||
                                        GLsizei   *depthp,
 | 
			
		||||
                                        GLint     *borderp,
 | 
			
		||||
                                        GLenum    *formatp,
 | 
			
		||||
                                        GLenum    *typep);
 | 
			
		||||
   /* Called to turn a generic texture format into a specific
 | 
			
		||||
    * texture format.  For example, if a driver implements
 | 
			
		||||
    * GL_3DFX_texture_compression_FXT1, this would map
 | 
			
		||||
    * GL_COMPRESSED_RGBA_ARB to GL_COMPRESSED_RGBA_FXT1_3DFX.
 | 
			
		||||
    *
 | 
			
		||||
    * If the driver does not know how to handle the compressed
 | 
			
		||||
    * format, then just return the generic format, and Mesa will
 | 
			
		||||
    * do the right thing with it.
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
   GLboolean (*IsCompressedFormat)(GLcontext *ctx, GLint internalFormat);
 | 
			
		||||
   /* Called to tell if a format is a compressed format.
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
   GLsizei (*CompressedImageSize)(GLcontext *ctx,
 | 
			
		||||
                                  GLenum internalFormat,
 | 
			
		||||
                                  GLuint numDimensions,
 | 
			
		||||
                                  GLuint width,
 | 
			
		||||
                                  GLuint height,
 | 
			
		||||
                                  GLuint depth);
 | 
			
		||||
   /* Calculate the size of a compressed image, given the image's
 | 
			
		||||
    * format and dimensions.
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
   void (*GetCompressedTexImage)( GLcontext *ctx, GLenum target,
 | 
			
		||||
                                  GLint lod, void *image,
 | 
			
		||||
                                  const struct gl_texture_object *texObj,
 | 
			
		||||
@@ -759,7 +816,7 @@ struct dd_function_table {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   /***
 | 
			
		||||
    *** Accelerated point, line, polygon, glDrawPixels and glBitmap functions:
 | 
			
		||||
    *** Accelerated point, line, polygon, quad and rect functions:
 | 
			
		||||
    ***/
 | 
			
		||||
 | 
			
		||||
   points_func   PointsFunc;
 | 
			
		||||
@@ -906,6 +963,16 @@ struct dd_function_table {
 | 
			
		||||
   void (*StencilMask)(GLcontext *ctx, GLuint mask);
 | 
			
		||||
   void (*StencilOp)(GLcontext *ctx, GLenum fail, GLenum zfail, GLenum zpass);
 | 
			
		||||
   void (*Viewport)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
 | 
			
		||||
 | 
			
		||||
   /* State-query functions
 | 
			
		||||
    *
 | 
			
		||||
    * Return GL_TRUE if query was completed, GL_FALSE otherwise.
 | 
			
		||||
    */
 | 
			
		||||
   GLboolean (*GetBooleanv)(GLcontext *ctx, GLenum pname, GLboolean *result);
 | 
			
		||||
   GLboolean (*GetDoublev)(GLcontext *ctx, GLenum pname, GLdouble *result);
 | 
			
		||||
   GLboolean (*GetFloatv)(GLcontext *ctx, GLenum pname, GLfloat *result);
 | 
			
		||||
   GLboolean (*GetIntegerv)(GLcontext *ctx, GLenum pname, GLint *result);
 | 
			
		||||
   GLboolean (*GetPointerv)(GLcontext *ctx, GLenum pname, GLvoid **result);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: drawpix.c,v 1.26 2000/06/30 22:19:41 brianp Exp $ */
 | 
			
		||||
/* $Id: drawpix.c,v 1.26.4.6 2000/10/17 00:24:11 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -122,11 +122,10 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
       && ctx->ColorMatrix.type == MATRIX_IDENTITY
 | 
			
		||||
       && !ctx->Pixel.ColorTableEnabled
 | 
			
		||||
       && !ctx->Pixel.PostColorMatrixColorTableEnabled
 | 
			
		||||
       && ctx->Pixel.PostConvolutionColorTableEnabled
 | 
			
		||||
       && !ctx->Pixel.PostConvolutionColorTableEnabled
 | 
			
		||||
       && !ctx->Pixel.MinMaxEnabled
 | 
			
		||||
       && !ctx->Pixel.HistogramEnabled
 | 
			
		||||
       && ctx->Pixel.IndexShift==0 && ctx->Pixel.IndexOffset==0
 | 
			
		||||
       && ctx->Pixel.MapColorFlag==0
 | 
			
		||||
       && ctx->Texture.ReallyEnabled == 0
 | 
			
		||||
       && unpack->Alignment==1
 | 
			
		||||
       && !unpack->SwapBytes
 | 
			
		||||
@@ -140,7 +139,7 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
      GLint skipRows = unpack->SkipRows;
 | 
			
		||||
      GLint rowLength;
 | 
			
		||||
      GLdepth zSpan[MAX_WIDTH];  /* only used when zooming */
 | 
			
		||||
      GLint zoomY0;
 | 
			
		||||
      GLint zoomY0 = 0;
 | 
			
		||||
 | 
			
		||||
      if (unpack->RowLength > 0)
 | 
			
		||||
         rowLength = unpack->RowLength;
 | 
			
		||||
@@ -173,14 +172,36 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
            drawHeight -= (destY + drawHeight - ctx->DrawBuffer->Ymax - 1);
 | 
			
		||||
         if (drawHeight <= 0)
 | 
			
		||||
            return GL_TRUE;
 | 
			
		||||
      }
 | 
			
		||||
      else if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==-1.0F) {
 | 
			
		||||
         /* upside-down image */
 | 
			
		||||
         /* horizontal clipping */
 | 
			
		||||
         if (destX < ctx->DrawBuffer->Xmin) {
 | 
			
		||||
            skipPixels += (ctx->DrawBuffer->Xmin - destX);
 | 
			
		||||
            drawWidth  -= (ctx->DrawBuffer->Xmin - destX);
 | 
			
		||||
            destX = ctx->DrawBuffer->Xmin;
 | 
			
		||||
         }
 | 
			
		||||
         if (destX + drawWidth > ctx->DrawBuffer->Xmax)
 | 
			
		||||
            drawWidth -= (destX + drawWidth - ctx->DrawBuffer->Xmax - 1);
 | 
			
		||||
         if (drawWidth <= 0)
 | 
			
		||||
            return GL_TRUE;
 | 
			
		||||
 | 
			
		||||
         zoomY0 = 0;  /* not used - silence compiler warning */
 | 
			
		||||
         /* vertical clipping */
 | 
			
		||||
         if (destY > ctx->DrawBuffer->Ymax) {
 | 
			
		||||
            skipRows   += (destY - ctx->DrawBuffer->Ymax - 1);
 | 
			
		||||
            drawHeight -= (destY - ctx->DrawBuffer->Ymax - 1);
 | 
			
		||||
            destY = ctx->DrawBuffer->Ymax + 1;
 | 
			
		||||
         }
 | 
			
		||||
         if (destY - drawHeight < ctx->DrawBuffer->Ymin)
 | 
			
		||||
            drawHeight -= (ctx->DrawBuffer->Ymin - (destY - drawHeight));
 | 
			
		||||
         if (drawHeight <= 0)
 | 
			
		||||
            return GL_TRUE;
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         /* setup array of fragment Z value to pass to zoom function */
 | 
			
		||||
         GLdepth z = (GLdepth) (ctx->Current.RasterPos[2] * ctx->Visual->DepthMaxF);
 | 
			
		||||
         GLint i;
 | 
			
		||||
         assert(drawWidth < MAX_WIDTH);
 | 
			
		||||
         ASSERT(drawWidth < MAX_WIDTH);
 | 
			
		||||
         for (i=0; i<drawWidth; i++)
 | 
			
		||||
            zSpan[i] = z;
 | 
			
		||||
 | 
			
		||||
@@ -197,7 +218,8 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
       * skip "skipRows" rows and skip "skipPixels" pixels/row.
 | 
			
		||||
       */
 | 
			
		||||
 | 
			
		||||
      if (format==GL_RGBA && type==GL_UNSIGNED_BYTE) {
 | 
			
		||||
      if (format==GL_RGBA && type==GL_UNSIGNED_BYTE
 | 
			
		||||
          && ctx->Pixel.MapColorFlag==0) {
 | 
			
		||||
         if (ctx->Visual->RGBAflag) {
 | 
			
		||||
            GLubyte *src = (GLubyte *) pixels
 | 
			
		||||
               + (skipRows * rowLength + skipPixels) * 4;
 | 
			
		||||
@@ -211,6 +233,16 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                  destY++;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==-1.0F) {
 | 
			
		||||
               /* upside-down */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  destY--;
 | 
			
		||||
                  (*ctx->Driver.WriteRGBASpan)(ctx, drawWidth, destX, destY,
 | 
			
		||||
                                              (void *) src, NULL);
 | 
			
		||||
                  src += rowLength * 4;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
               /* with zooming */
 | 
			
		||||
               GLint row;
 | 
			
		||||
@@ -224,7 +256,8 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
         }
 | 
			
		||||
         return GL_TRUE;
 | 
			
		||||
      }
 | 
			
		||||
      else if (format==GL_RGB && type==GL_UNSIGNED_BYTE) {
 | 
			
		||||
      else if (format==GL_RGB && type==GL_UNSIGNED_BYTE
 | 
			
		||||
               && ctx->Pixel.MapColorFlag==0) {
 | 
			
		||||
         if (ctx->Visual->RGBAflag) {
 | 
			
		||||
            GLubyte *src = (GLubyte *) pixels
 | 
			
		||||
               + (skipRows * rowLength + skipPixels) * 3;
 | 
			
		||||
@@ -237,6 +270,16 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                  destY++;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==-1.0F) {
 | 
			
		||||
               /* upside-down */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  destY--;
 | 
			
		||||
                  (*ctx->Driver.WriteRGBSpan)(ctx, drawWidth, destX, destY,
 | 
			
		||||
                                              (void *) src, NULL);
 | 
			
		||||
                  src += rowLength * 3;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
               /* with zooming */
 | 
			
		||||
               GLint row;
 | 
			
		||||
@@ -250,14 +293,15 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
         }
 | 
			
		||||
         return GL_TRUE;
 | 
			
		||||
      }
 | 
			
		||||
      else if (format==GL_LUMINANCE && type==GL_UNSIGNED_BYTE) {
 | 
			
		||||
      else if (format==GL_LUMINANCE && type==GL_UNSIGNED_BYTE
 | 
			
		||||
               && ctx->Pixel.MapColorFlag==0) {
 | 
			
		||||
         if (ctx->Visual->RGBAflag) {
 | 
			
		||||
            GLubyte *src = (GLubyte *) pixels
 | 
			
		||||
               + (skipRows * rowLength + skipPixels);
 | 
			
		||||
            if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) {
 | 
			
		||||
               /* no zooming */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               assert(drawWidth < MAX_WIDTH);
 | 
			
		||||
               ASSERT(drawWidth < MAX_WIDTH);
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  GLint i;
 | 
			
		||||
		  for (i=0;i<drawWidth;i++) {
 | 
			
		||||
@@ -271,10 +315,27 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                  destY++;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==-1.0F) {
 | 
			
		||||
               /* upside-down */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               ASSERT(drawWidth < MAX_WIDTH);
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  GLint i;
 | 
			
		||||
                  for (i=0;i<drawWidth;i++) {
 | 
			
		||||
                     rgb[i][0] = src[i];
 | 
			
		||||
                     rgb[i][1] = src[i];
 | 
			
		||||
                     rgb[i][2] = src[i];
 | 
			
		||||
                  }
 | 
			
		||||
                  destY--;
 | 
			
		||||
                  (*ctx->Driver.WriteRGBSpan)(ctx, drawWidth, destX, destY,
 | 
			
		||||
                                              (void *) rgb, NULL);
 | 
			
		||||
                  src += rowLength;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
               /* with zooming */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               assert(drawWidth < MAX_WIDTH);
 | 
			
		||||
               ASSERT(drawWidth < MAX_WIDTH);
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  GLint i;
 | 
			
		||||
		  for (i=0;i<drawWidth;i++) {
 | 
			
		||||
@@ -291,14 +352,15 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
         }
 | 
			
		||||
         return GL_TRUE;
 | 
			
		||||
      }
 | 
			
		||||
      else if (format==GL_LUMINANCE_ALPHA && type==GL_UNSIGNED_BYTE) {
 | 
			
		||||
      else if (format==GL_LUMINANCE_ALPHA && type==GL_UNSIGNED_BYTE
 | 
			
		||||
               && ctx->Pixel.MapColorFlag==0) {
 | 
			
		||||
         if (ctx->Visual->RGBAflag) {
 | 
			
		||||
            GLubyte *src = (GLubyte *) pixels
 | 
			
		||||
               + (skipRows * rowLength + skipPixels)*2;
 | 
			
		||||
            if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) {
 | 
			
		||||
               /* no zooming */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               assert(drawWidth < MAX_WIDTH);
 | 
			
		||||
               ASSERT(drawWidth < MAX_WIDTH);
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  GLint i;
 | 
			
		||||
                  GLubyte *ptr = src;
 | 
			
		||||
@@ -314,10 +376,29 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                  destY++;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==-1.0F) {
 | 
			
		||||
               /* upside-down */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               ASSERT(drawWidth < MAX_WIDTH);
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  GLint i;
 | 
			
		||||
                  GLubyte *ptr = src;
 | 
			
		||||
                  for (i=0;i<drawWidth;i++) {
 | 
			
		||||
                     rgba[i][0] = *ptr;
 | 
			
		||||
                     rgba[i][1] = *ptr;
 | 
			
		||||
                     rgba[i][2] = *ptr++;
 | 
			
		||||
                     rgba[i][3] = *ptr++;
 | 
			
		||||
                  }
 | 
			
		||||
                  destY--;
 | 
			
		||||
                  (*ctx->Driver.WriteRGBASpan)(ctx, drawWidth, destX, destY,
 | 
			
		||||
                                               (void *) rgba, NULL);
 | 
			
		||||
                  src += rowLength*2;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
               /* with zooming */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               assert(drawWidth < MAX_WIDTH);
 | 
			
		||||
               ASSERT(drawWidth < MAX_WIDTH);
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  GLubyte *ptr = src;
 | 
			
		||||
                  GLint i;
 | 
			
		||||
@@ -344,7 +425,7 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
               /* no zooming */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  assert(drawWidth < MAX_WIDTH);
 | 
			
		||||
                  ASSERT(drawWidth < MAX_WIDTH);
 | 
			
		||||
                  _mesa_map_ci8_to_rgba(ctx, drawWidth, src, rgba);
 | 
			
		||||
                  (*ctx->Driver.WriteRGBASpan)(ctx, drawWidth, destX, destY,
 | 
			
		||||
                                               (const GLubyte (*)[4])rgba, 
 | 
			
		||||
@@ -354,11 +435,25 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
               }
 | 
			
		||||
               return GL_TRUE;
 | 
			
		||||
            }
 | 
			
		||||
            else if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==-1.0F) {
 | 
			
		||||
               /* upside-down */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  ASSERT(drawWidth < MAX_WIDTH);
 | 
			
		||||
                  _mesa_map_ci8_to_rgba(ctx, drawWidth, src, rgba);
 | 
			
		||||
                  destY--;
 | 
			
		||||
                  (*ctx->Driver.WriteRGBASpan)(ctx, drawWidth, destX, destY,
 | 
			
		||||
                                               (const GLubyte (*)[4])rgba, 
 | 
			
		||||
                                               NULL);
 | 
			
		||||
                  src += rowLength;
 | 
			
		||||
               }
 | 
			
		||||
               return GL_TRUE;
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
               /* with zooming */
 | 
			
		||||
               GLint row;
 | 
			
		||||
               for (row=0; row<drawHeight; row++) {
 | 
			
		||||
                  assert(drawWidth < MAX_WIDTH);
 | 
			
		||||
                  ASSERT(drawWidth < MAX_WIDTH);
 | 
			
		||||
                  _mesa_map_ci8_to_rgba(ctx, drawWidth, src, rgba);
 | 
			
		||||
                  gl_write_zoomed_rgba_span(ctx, drawWidth, destX, destY,
 | 
			
		||||
                                            zSpan, (void *) rgba, zoomY0);
 | 
			
		||||
@@ -616,6 +711,11 @@ draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
   GLdepth zspan[MAX_WIDTH];
 | 
			
		||||
   GLboolean quickDraw;
 | 
			
		||||
 | 
			
		||||
   if (!_mesa_is_legal_format_and_type(format, type)) {
 | 
			
		||||
      gl_error(ctx, GL_INVALID_ENUM, "glDrawPixels(format or type)");
 | 
			
		||||
      return;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /* Try an optimized glDrawPixels first */
 | 
			
		||||
   if (simple_DrawPixels(ctx, x, y, width, height, format, type, pixels))
 | 
			
		||||
      return;
 | 
			
		||||
@@ -723,6 +823,7 @@ _mesa_DrawPixels( GLsizei width, GLsizei height,
 | 
			
		||||
         return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      RENDER_START(ctx);
 | 
			
		||||
      switch (format) {
 | 
			
		||||
	 case GL_STENCIL_INDEX:
 | 
			
		||||
	    draw_stencil_pixels( ctx, x, y, width, height, type, pixels );
 | 
			
		||||
@@ -751,8 +852,8 @@ _mesa_DrawPixels( GLsizei width, GLsizei height,
 | 
			
		||||
	    break;
 | 
			
		||||
	 default:
 | 
			
		||||
	    gl_error( ctx, GL_INVALID_ENUM, "glDrawPixels(format)" );
 | 
			
		||||
            return;
 | 
			
		||||
      }
 | 
			
		||||
      RENDER_FINISH(ctx);
 | 
			
		||||
   }
 | 
			
		||||
   else if (ctx->RenderMode==GL_FEEDBACK) {
 | 
			
		||||
      if (ctx->Current.RasterPosValid) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
/* $Id: enable.c,v 1.21 2000/05/23 15:17:12 brianp Exp $ */
 | 
			
		||||
/* $Id: enable.c,v 1.21.4.2 2000/10/21 01:22:13 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
@@ -285,12 +285,14 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
 | 
			
		||||
      case GL_POINT_SMOOTH:
 | 
			
		||||
	 if (ctx->Point.SmoothFlag!=state) {
 | 
			
		||||
            ctx->Point.SmoothFlag = state;
 | 
			
		||||
	    ctx->TriangleCaps ^= DD_POINT_SMOOTH;
 | 
			
		||||
            ctx->NewState |= NEW_RASTER_OPS;
 | 
			
		||||
         }
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_POLYGON_SMOOTH:
 | 
			
		||||
	 if (ctx->Polygon.SmoothFlag!=state) {
 | 
			
		||||
            ctx->Polygon.SmoothFlag = state;
 | 
			
		||||
	    ctx->TriangleCaps ^= DD_TRI_SMOOTH;
 | 
			
		||||
            ctx->NewState |= NEW_RASTER_OPS;
 | 
			
		||||
         }
 | 
			
		||||
	 break;
 | 
			
		||||
@@ -350,48 +352,39 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
 | 
			
		||||
      case GL_TEXTURE_1D:
 | 
			
		||||
         if (ctx->Visual->RGBAflag) {
 | 
			
		||||
	    const GLuint curr = ctx->Texture.CurrentUnit;
 | 
			
		||||
	    const GLuint flag = TEXTURE0_1D << (curr * 4);
 | 
			
		||||
            struct gl_texture_unit *texUnit = &ctx->Texture.Unit[curr];
 | 
			
		||||
	    ctx->NewState |= NEW_TEXTURE_ENABLE;
 | 
			
		||||
            if (state) {
 | 
			
		||||
	       texUnit->Enabled |= TEXTURE0_1D;
 | 
			
		||||
	       ctx->Enabled |= flag;
 | 
			
		||||
	    }
 | 
			
		||||
            else {
 | 
			
		||||
               texUnit->Enabled &= ~TEXTURE0_1D;
 | 
			
		||||
               ctx->Enabled &= ~flag;
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_TEXTURE_2D:
 | 
			
		||||
         if (ctx->Visual->RGBAflag) {
 | 
			
		||||
	    const GLuint curr = ctx->Texture.CurrentUnit;
 | 
			
		||||
	    const GLuint flag = TEXTURE0_2D << (curr * 4);
 | 
			
		||||
            struct gl_texture_unit *texUnit = &ctx->Texture.Unit[curr];
 | 
			
		||||
	    ctx->NewState |= NEW_TEXTURE_ENABLE;
 | 
			
		||||
            if (state) {
 | 
			
		||||
	       texUnit->Enabled |= TEXTURE0_2D;
 | 
			
		||||
	       ctx->Enabled |= flag;
 | 
			
		||||
	    }
 | 
			
		||||
            else {
 | 
			
		||||
               texUnit->Enabled &= ~TEXTURE0_2D;
 | 
			
		||||
               ctx->Enabled &= ~flag;
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_3D:
 | 
			
		||||
         if (ctx->Visual->RGBAflag) {
 | 
			
		||||
	    const GLuint curr = ctx->Texture.CurrentUnit;
 | 
			
		||||
	    const GLuint flag = TEXTURE0_3D << (curr * 4);
 | 
			
		||||
            struct gl_texture_unit *texUnit = &ctx->Texture.Unit[curr];
 | 
			
		||||
	    ctx->NewState |= NEW_TEXTURE_ENABLE;
 | 
			
		||||
            if (state) {
 | 
			
		||||
	       texUnit->Enabled |= TEXTURE0_3D;
 | 
			
		||||
	       ctx->Enabled |= flag;
 | 
			
		||||
	    }
 | 
			
		||||
            else {
 | 
			
		||||
               texUnit->Enabled &= ~TEXTURE0_3D;
 | 
			
		||||
               ctx->Enabled &= ~flag;
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         break;
 | 
			
		||||
@@ -511,35 +504,24 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
 | 
			
		||||
         if (ctx->Extensions.HaveTextureCubeMap) {
 | 
			
		||||
            if (ctx->Visual->RGBAflag) {
 | 
			
		||||
               const GLuint curr = ctx->Texture.CurrentUnit;
 | 
			
		||||
               const GLuint flag = TEXTURE0_CUBE << (curr * 4);
 | 
			
		||||
               struct gl_texture_unit *texUnit = &ctx->Texture.Unit[curr];
 | 
			
		||||
               ctx->NewState |= NEW_TEXTURE_ENABLE;
 | 
			
		||||
               if (state) {
 | 
			
		||||
                  texUnit->Enabled |= TEXTURE0_CUBE;
 | 
			
		||||
                  ctx->Enabled |= flag;
 | 
			
		||||
               }
 | 
			
		||||
               else {
 | 
			
		||||
                  texUnit->Enabled &= ~TEXTURE0_CUBE;
 | 
			
		||||
                  ctx->Enabled &= ~flag;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         else {
 | 
			
		||||
            if (state)
 | 
			
		||||
               gl_error(ctx, GL_INVALID_ENUM, "glEnable");
 | 
			
		||||
            else
 | 
			
		||||
               gl_error(ctx, GL_INVALID_ENUM, "glDisable");
 | 
			
		||||
            gl_error(ctx, GL_INVALID_ENUM, state ? "glEnable" : "glDisable");
 | 
			
		||||
            return;
 | 
			
		||||
         }
 | 
			
		||||
	 break;
 | 
			
		||||
 | 
			
		||||
      default:
 | 
			
		||||
	 if (state) {
 | 
			
		||||
	    gl_error( ctx, GL_INVALID_ENUM, "glEnable" );
 | 
			
		||||
	 }
 | 
			
		||||
	 else {
 | 
			
		||||
	    gl_error( ctx, GL_INVALID_ENUM, "glDisable" );
 | 
			
		||||
	 }
 | 
			
		||||
         gl_error(ctx, GL_INVALID_ENUM, state ? "glEnable" : "glDisable");
 | 
			
		||||
         return;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: extensions.c,v 1.32 2000/06/27 21:42:13 brianp Exp $ */
 | 
			
		||||
/* $Id: extensions.c,v 1.32.4.1 2000/08/29 22:58:57 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -51,7 +51,7 @@ struct extension {
 | 
			
		||||
static struct { int enabled; const char *name; } default_extensions[] = {
 | 
			
		||||
   { DEFAULT_OFF,    "GL_ARB_imaging" },  /* in progress */
 | 
			
		||||
   { DEFAULT_ON,     "GL_ARB_multitexture" },
 | 
			
		||||
   { DEFAULT_OFF,    "GL_ARB_texture_compression" },  /* in progress */
 | 
			
		||||
   { DEFAULT_OFF,    "GL_ARB_texture_compression" },
 | 
			
		||||
   { DEFAULT_OFF,    "GL_ARB_texture_cube_map" },  /* in progress */
 | 
			
		||||
   { ALWAYS_ENABLED, "GL_ARB_tranpose_matrix" },
 | 
			
		||||
   { ALWAYS_ENABLED, "GL_EXT_abgr" },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: fog.c,v 1.19 2000/07/07 15:10:35 keithw Exp $ */
 | 
			
		||||
/* $Id: fog.c,v 1.19.4.1 2000/10/17 00:24:11 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -331,7 +331,7 @@ _mesa_fog_rgba_pixels( const GLcontext *ctx,
 | 
			
		||||
               GLfloat eyez = d / (c+ndcz);
 | 
			
		||||
               GLfloat f, g;
 | 
			
		||||
               GLfloat tmp = negDensitySquared * eyez * eyez;
 | 
			
		||||
#ifdef __alpha__
 | 
			
		||||
#if defined(__alpha__) || defined(__alpha)
 | 
			
		||||
               /* XXX this underflow check may be needed for other systems */
 | 
			
		||||
               if (tmp < FLT_MIN_10_EXP)
 | 
			
		||||
                  f = exp( FLT_MIN_10_EXP );
 | 
			
		||||
@@ -410,7 +410,7 @@ _mesa_fog_ci_pixels( const GLcontext *ctx,
 | 
			
		||||
               if (eyez < 0.0)
 | 
			
		||||
                  eyez = -eyez;
 | 
			
		||||
               tmp = negDensitySquared * eyez * eyez;
 | 
			
		||||
#ifdef __alpha__
 | 
			
		||||
#if defined(__alpha__) || defined(__alpha)
 | 
			
		||||
               /* XXX this underflow check may be needed for other systems */
 | 
			
		||||
               if (tmp < FLT_MIN_10_EXP)
 | 
			
		||||
                  f = exp( FLT_MIN_10_EXP );
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: get.c,v 1.30 2000/07/21 15:41:08 brianp Exp $ */
 | 
			
		||||
/* $Id: get.c,v 1.30.2.1 2000/08/08 16:02:10 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -92,9 +92,16 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetBooleanv");
 | 
			
		||||
 | 
			
		||||
   if (!params)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE & VERBOSE_API) 
 | 
			
		||||
      fprintf(stderr, "glGetBooleanv %s\n", gl_lookup_enum_by_nr(pname));
 | 
			
		||||
 | 
			
		||||
   if (ctx->Driver.GetBooleanv
 | 
			
		||||
       && (*ctx->Driver.GetBooleanv)(ctx, pname, params))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_ACCUM_RED_BITS:
 | 
			
		||||
         *params = INT_TO_BOOL(ctx->Visual->AccumRedBits);
 | 
			
		||||
@@ -1235,9 +1242,15 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetDoublev");
 | 
			
		||||
 | 
			
		||||
   if (!params)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE & VERBOSE_API) 
 | 
			
		||||
      fprintf(stderr, "glGetDoublev %s\n", gl_lookup_enum_by_nr(pname));
 | 
			
		||||
 | 
			
		||||
   if (ctx->Driver.GetDoublev && (*ctx->Driver.GetDoublev)(ctx, pname, params))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_ACCUM_RED_BITS:
 | 
			
		||||
         *params = (GLdouble) ctx->Visual->AccumRedBits;
 | 
			
		||||
@@ -2378,9 +2391,15 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetFloatv");
 | 
			
		||||
 | 
			
		||||
   if (!params)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE & VERBOSE_API) 
 | 
			
		||||
      fprintf(stderr, "glGetFloatv %s\n", gl_lookup_enum_by_nr(pname));
 | 
			
		||||
 | 
			
		||||
   if (ctx->Driver.GetFloatv && (*ctx->Driver.GetFloatv)(ctx, pname, params))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_ACCUM_RED_BITS:
 | 
			
		||||
         *params = (GLfloat) ctx->Visual->AccumRedBits;
 | 
			
		||||
@@ -3492,9 +3511,16 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetIntegerv");
 | 
			
		||||
 | 
			
		||||
   if (!params)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE & VERBOSE_API) 
 | 
			
		||||
      fprintf(stderr, "glGetIntegerv %s\n", gl_lookup_enum_by_nr(pname));
 | 
			
		||||
 | 
			
		||||
   if (ctx->Driver.GetIntegerv
 | 
			
		||||
       && (*ctx->Driver.GetIntegerv)(ctx, pname, params))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_ACCUM_RED_BITS:
 | 
			
		||||
         *params = (GLint) ctx->Visual->AccumRedBits;
 | 
			
		||||
@@ -4629,11 +4655,19 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint texUnit = ctx->Texture.CurrentUnit;
 | 
			
		||||
   /*GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;*/
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetPointerv");
 | 
			
		||||
 | 
			
		||||
   if (!params)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE & VERBOSE_API) 
 | 
			
		||||
      fprintf(stderr, "glGetPointerv %s\n", gl_lookup_enum_by_nr(pname));
 | 
			
		||||
 | 
			
		||||
   if (ctx->Driver.GetPointerv
 | 
			
		||||
       && (*ctx->Driver.GetPointerv)(ctx, pname, params))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_VERTEX_ARRAY_POINTER:
 | 
			
		||||
         *params = ctx->Array.Vertex.Ptr;
 | 
			
		||||
@@ -4673,7 +4707,7 @@ _mesa_GetString( GLenum name )
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   static const char *vendor = "Brian Paul";
 | 
			
		||||
   static const char *renderer = "Mesa";
 | 
			
		||||
   static const char *version = "1.2 Mesa 3.3";
 | 
			
		||||
   static const char *version = "1.2 Mesa 3.4";
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, "glGetString", 0);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: glheader.h,v 1.11 2000/06/12 15:40:47 brianp Exp $ */
 | 
			
		||||
/* $Id: glheader.h,v 1.11.4.3 2000/09/15 15:42:51 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -47,7 +47,12 @@
 | 
			
		||||
#else
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
/* If we can use Compaq's Fast Math Library on Alpha */
 | 
			
		||||
#if defined(__alpha__) && defined(CCPML)
 | 
			
		||||
#include <cpml.h>
 | 
			
		||||
#else
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
@@ -132,13 +137,18 @@
 | 
			
		||||
#if defined(_WIN32) && !defined(_WINDEF_) && !defined(_GNU_H_WINDOWS32_BASE) && !defined(OPENSTEP)
 | 
			
		||||
#if 0
 | 
			
		||||
#	define CALLBACK GLCALLBACK
 | 
			
		||||
#endif
 | 
			
		||||
typedef int (GLAPIENTRY *PROC)();
 | 
			
		||||
typedef void *HGLRC;
 | 
			
		||||
typedef void *HDC;
 | 
			
		||||
#endif
 | 
			
		||||
typedef int (GLAPIENTRY *PROC)();
 | 
			
		||||
typedef unsigned long COLORREF;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Make sure we include glext.h from gl.h */
 | 
			
		||||
#define GL_GLEXT_PROTOTYPES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32) && !defined(_WINGDI_) && !defined(_GNU_H_WINDOWS32_DEFINES) && !defined(OPENSTEP)
 | 
			
		||||
#	define WGL_FONT_LINES      0
 | 
			
		||||
#	define WGL_FONT_POLYGONS   1
 | 
			
		||||
@@ -160,8 +170,6 @@ typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESC
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Make sure we include glext.h */
 | 
			
		||||
#define GL_GLEXT_PROTOTYPES
 | 
			
		||||
#include "GL/gl.h"
 | 
			
		||||
#include "GL/glext.h"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: image.c,v 1.35 2000/06/30 22:12:00 brianp Exp $ */
 | 
			
		||||
/* $Id: image.c,v 1.35.4.2 2000/10/05 16:23:18 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -1277,7 +1277,7 @@ _mesa_pack_rgba_span( GLcontext *ctx,
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
         case GL_UNSIGNED_SHORT_4_4_4_4:
 | 
			
		||||
            if (format == GL_RGB) {
 | 
			
		||||
            if (format == GL_RGBA) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][RCOMP] * 15.0F)) << 12)
 | 
			
		||||
@@ -1286,9 +1286,27 @@ _mesa_pack_rgba_span( GLcontext *ctx,
 | 
			
		||||
                         | (((GLint) (rgba[i][ACOMP] * 15.0F))      );
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (format == GL_BGRA) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][BCOMP] * 15.0F)) << 12)
 | 
			
		||||
                         | (((GLint) (rgba[i][GCOMP] * 15.0F)) <<  8)
 | 
			
		||||
                         | (((GLint) (rgba[i][RCOMP] * 15.0F)) <<  4)
 | 
			
		||||
                         | (((GLint) (rgba[i][ACOMP] * 15.0F))      );
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (format == GL_ABGR_EXT) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][ACOMP] * 15.0F)) <<  4)
 | 
			
		||||
                         | (((GLint) (rgba[i][BCOMP] * 15.0F)) <<  8)
 | 
			
		||||
                         | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 12)
 | 
			
		||||
                         | (((GLint) (rgba[i][RCOMP] * 15.0F))      );
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
         case GL_UNSIGNED_SHORT_4_4_4_4_REV:
 | 
			
		||||
            if (format == GL_RGB) {
 | 
			
		||||
            if (format == GL_RGBA) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][RCOMP] * 15.0F))      )
 | 
			
		||||
@@ -1297,9 +1315,27 @@ _mesa_pack_rgba_span( GLcontext *ctx,
 | 
			
		||||
                         | (((GLint) (rgba[i][ACOMP] * 15.0F)) << 12);
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (format == GL_BGRA) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][BCOMP] * 15.0F))      )
 | 
			
		||||
                         | (((GLint) (rgba[i][GCOMP] * 15.0F)) <<  4)
 | 
			
		||||
                         | (((GLint) (rgba[i][RCOMP] * 15.0F)) <<  8)
 | 
			
		||||
                         | (((GLint) (rgba[i][ACOMP] * 15.0F)) << 12);
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (format == GL_ABGR_EXT) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][ACOMP] * 15.0F))      )
 | 
			
		||||
                         | (((GLint) (rgba[i][BCOMP] * 15.0F)) <<  4)
 | 
			
		||||
                         | (((GLint) (rgba[i][GCOMP] * 15.0F)) <<  8)
 | 
			
		||||
                         | (((GLint) (rgba[i][RCOMP] * 15.0F)) << 12);
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
         case GL_UNSIGNED_SHORT_5_5_5_1:
 | 
			
		||||
            if (format == GL_RGB) {
 | 
			
		||||
            if (format == GL_RGBA) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][RCOMP] * 31.0F)) << 11)
 | 
			
		||||
@@ -1308,9 +1344,27 @@ _mesa_pack_rgba_span( GLcontext *ctx,
 | 
			
		||||
                         | (((GLint) (rgba[i][ACOMP] *  1.0F))      );
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (format == GL_BGRA) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][BCOMP] * 31.0F)) << 11)
 | 
			
		||||
                         | (((GLint) (rgba[i][GCOMP] * 31.0F)) <<  6)
 | 
			
		||||
                         | (((GLint) (rgba[i][RCOMP] * 31.0F)) <<  1)
 | 
			
		||||
                         | (((GLint) (rgba[i][ACOMP] *  1.0F))      );
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (format == GL_ABGR_EXT) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][ACOMP] * 31.0F)) << 11)
 | 
			
		||||
                         | (((GLint) (rgba[i][BCOMP] * 31.0F)) <<  6)
 | 
			
		||||
                         | (((GLint) (rgba[i][GCOMP] * 31.0F)) <<  1)
 | 
			
		||||
                         | (((GLint) (rgba[i][RCOMP] *  1.0F))      );
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
         case GL_UNSIGNED_SHORT_1_5_5_5_REV:
 | 
			
		||||
            if (format == GL_RGB) {
 | 
			
		||||
            if (format == GL_RGBA) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][RCOMP] * 31.0F))      )
 | 
			
		||||
@@ -1319,6 +1373,24 @@ _mesa_pack_rgba_span( GLcontext *ctx,
 | 
			
		||||
                         | (((GLint) (rgba[i][ACOMP] *  1.0F)) << 15);
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (format == GL_BGRA) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][BCOMP] * 31.0F))      )
 | 
			
		||||
                         | (((GLint) (rgba[i][GCOMP] * 31.0F)) <<  5)
 | 
			
		||||
                         | (((GLint) (rgba[i][RCOMP] * 31.0F)) << 10)
 | 
			
		||||
                         | (((GLint) (rgba[i][ACOMP] *  1.0F)) << 15);
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else if (format == GL_ABGR_EXT) {
 | 
			
		||||
               GLushort *dst = (GLushort *) destination;
 | 
			
		||||
               for (i=0;i<n;i++) {
 | 
			
		||||
                  dst[i] = (((GLint) (rgba[i][ACOMP] * 31.0F))      )
 | 
			
		||||
                         | (((GLint) (rgba[i][BCOMP] * 31.0F)) <<  5)
 | 
			
		||||
                         | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 10)
 | 
			
		||||
                         | (((GLint) (rgba[i][RCOMP] *  1.0F)) << 15);
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
         case GL_UNSIGNED_INT_8_8_8_8:
 | 
			
		||||
            if (format == GL_RGBA) {
 | 
			
		||||
@@ -2281,7 +2353,7 @@ _mesa_unpack_ubyte_color_span( GLcontext *ctx,
 | 
			
		||||
                              unpacking);
 | 
			
		||||
 | 
			
		||||
         if (applyTransferOps) {
 | 
			
		||||
            if (ctx->Pixel.MapColorFlag) {
 | 
			
		||||
            if (dstFormat == GL_COLOR_INDEX && ctx->Pixel.MapColorFlag) {
 | 
			
		||||
               _mesa_map_ci(ctx, n, indexes);
 | 
			
		||||
            }
 | 
			
		||||
            if (ctx->Pixel.IndexShift || ctx->Pixel.IndexOffset) {
 | 
			
		||||
@@ -2550,7 +2622,7 @@ _mesa_unpack_float_color_span( GLcontext *ctx,
 | 
			
		||||
                              unpacking);
 | 
			
		||||
 | 
			
		||||
         if (applyTransferOps) {
 | 
			
		||||
            if (ctx->Pixel.MapColorFlag) {
 | 
			
		||||
            if (dstFormat == GL_COLOR_INDEX && ctx->Pixel.MapColorFlag) {
 | 
			
		||||
               _mesa_map_ci(ctx, n, indexes);
 | 
			
		||||
            }
 | 
			
		||||
            if (ctx->Pixel.IndexShift || ctx->Pixel.IndexOffset) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: matrix.c,v 1.18 2000/06/27 22:10:00 brianp Exp $ */
 | 
			
		||||
/* $Id: matrix.c,v 1.18.4.1 2000/07/31 15:31:17 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -597,7 +597,7 @@ void gl_rotation_matrix( GLfloat angle, GLfloat x, GLfloat y, GLfloat z,
 | 
			
		||||
 | 
			
		||||
   mag = GL_SQRT( x*x + y*y + z*z );
 | 
			
		||||
 | 
			
		||||
   if (mag == 0.0) {
 | 
			
		||||
   if (mag <= 1.0e-4) {
 | 
			
		||||
      /* generate an identity matrix and return */
 | 
			
		||||
      MEMCPY(m, Identity, sizeof(GLfloat)*16);
 | 
			
		||||
      return;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: pixel.c,v 1.11 2000/05/07 20:41:30 brianp Exp $ */
 | 
			
		||||
/* $Id: pixel.c,v 1.11.4.1 2000/10/19 20:09:29 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -105,6 +105,14 @@ _mesa_PixelStorei( GLenum pname, GLint param )
 | 
			
		||||
	    ctx->Pack.SkipRows = param;
 | 
			
		||||
	 }
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_PACK_SKIP_IMAGES:
 | 
			
		||||
	 if (param<0) {
 | 
			
		||||
	    gl_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );
 | 
			
		||||
	 }
 | 
			
		||||
	 else {
 | 
			
		||||
	    ctx->Pack.SkipImages = param;
 | 
			
		||||
	 }
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_PACK_ALIGNMENT:
 | 
			
		||||
         if (param==1 || param==2 || param==4 || param==8) {
 | 
			
		||||
	    ctx->Pack.Alignment = param;
 | 
			
		||||
@@ -149,6 +157,14 @@ _mesa_PixelStorei( GLenum pname, GLint param )
 | 
			
		||||
	    ctx->Unpack.SkipRows = param;
 | 
			
		||||
	 }
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_UNPACK_SKIP_IMAGES:
 | 
			
		||||
	 if (param < 0) {
 | 
			
		||||
	    gl_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );
 | 
			
		||||
	 }
 | 
			
		||||
	 else {
 | 
			
		||||
	    ctx->Unpack.SkipImages = param;
 | 
			
		||||
	 }
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_UNPACK_ALIGNMENT:
 | 
			
		||||
         if (param==1 || param==2 || param==4 || param==8) {
 | 
			
		||||
	    ctx->Unpack.Alignment = param;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: points.c,v 1.11 2000/07/15 03:13:43 brianp Exp $ */
 | 
			
		||||
/* $Id: points.c,v 1.11.2.1 2000/08/16 17:25:40 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -555,8 +555,8 @@ antialiased_rgba_points( GLcontext *ctx, GLuint first, GLuint last )
 | 
			
		||||
         if (VB->ClipMask[i] == 0) {
 | 
			
		||||
            GLint x, y;
 | 
			
		||||
            GLint red, green, blue, alpha;
 | 
			
		||||
            GLfloat s, t, u;
 | 
			
		||||
            GLfloat s1, t1, u1;
 | 
			
		||||
            GLfloat s = 0.0F, t = 0.0F, u = 0.0F;
 | 
			
		||||
            GLfloat s1 = 0.0F, t1 = 0.0F, u1 = 0.0F;
 | 
			
		||||
            GLfloat vx = VB->Win.data[i][0];
 | 
			
		||||
            GLfloat vy = VB->Win.data[i][1];
 | 
			
		||||
 | 
			
		||||
@@ -962,8 +962,8 @@ dist_atten_textured_rgba_points( GLcontext *ctx, GLuint first, GLuint last )
 | 
			
		||||
         GLint ix, iy;
 | 
			
		||||
         GLint isize, radius;
 | 
			
		||||
         GLint red, green, blue, alpha;
 | 
			
		||||
         GLfloat s, t, u;
 | 
			
		||||
         GLfloat s1, t1, u1;
 | 
			
		||||
         GLfloat s = 0.0F, t = 0.0F, u = 0.0F;
 | 
			
		||||
         GLfloat s1 = 0.0F, t1 = 0.0F, u1 = 0.0F;
 | 
			
		||||
 | 
			
		||||
         GLint x = (GLint)  VB->Win.data[i][0];
 | 
			
		||||
         GLint y = (GLint)  VB->Win.data[i][1];
 | 
			
		||||
@@ -1110,8 +1110,8 @@ dist_atten_antialiased_rgba_points( GLcontext *ctx, GLuint first, GLuint last )
 | 
			
		||||
            GLint xmin, ymin, xmax, ymax;
 | 
			
		||||
            GLint x, y, z;
 | 
			
		||||
            GLint red, green, blue, alpha;
 | 
			
		||||
            GLfloat s, t, u;
 | 
			
		||||
            GLfloat s1, t1, u1;
 | 
			
		||||
            GLfloat s = 0.0F, t = 0.0F, u = 0.0F;
 | 
			
		||||
            GLfloat s1 = 0.0F, t1 = 0.0F, u1 = 0.0F;
 | 
			
		||||
            GLfloat dsize = psize * dist[i];
 | 
			
		||||
 | 
			
		||||
            if (dsize >= ctx->Point.Threshold) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: state.c,v 1.21 2000/06/30 14:14:37 brianp Exp $ */
 | 
			
		||||
/* $Id: state.c,v 1.21.4.4 2000/10/31 19:57:39 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -778,7 +778,7 @@ static void update_fog_mode( GLcontext *ctx )
 | 
			
		||||
   int old_mode = ctx->FogMode;
 | 
			
		||||
 | 
			
		||||
   if (ctx->Fog.Enabled) {
 | 
			
		||||
      if (ctx->Texture.Enabled)
 | 
			
		||||
      if (ctx->Texture.ReallyEnabled)
 | 
			
		||||
         ctx->FogMode = FOG_FRAGMENT;
 | 
			
		||||
      else if (ctx->Hint.Fog == GL_NICEST)
 | 
			
		||||
         ctx->FogMode = FOG_FRAGMENT;
 | 
			
		||||
@@ -922,8 +922,9 @@ void gl_update_state( GLcontext *ctx )
 | 
			
		||||
      gl_update_client_state( ctx );
 | 
			
		||||
 | 
			
		||||
   if ((ctx->NewState & NEW_TEXTURE_ENABLE) &&
 | 
			
		||||
       (ctx->Enabled & ENABLE_TEX_ANY) != ctx->Texture.Enabled)
 | 
			
		||||
       (ctx->Enabled & ENABLE_TEX_ANY) != ctx->Texture.ReallyEnabled) {
 | 
			
		||||
      ctx->NewState |= NEW_TEXTURING | NEW_RASTER_OPS;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (ctx->NewState & NEW_TEXTURE_ENV) {
 | 
			
		||||
      if (ctx->Texture.Unit[0].EnvMode == ctx->Texture.Unit[0].LastEnvMode &&
 | 
			
		||||
@@ -933,21 +934,23 @@ void gl_update_state( GLcontext *ctx )
 | 
			
		||||
      ctx->Texture.Unit[1].LastEnvMode = ctx->Texture.Unit[1].EnvMode;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (ctx->NewState & NEW_TEXTURE_MATRIX) {
 | 
			
		||||
      ctx->Enabled &= ~(ENABLE_TEXMAT0|ENABLE_TEXMAT1);
 | 
			
		||||
   /* Update ctx->Enabled's ENABLE_TEXMATn flags */
 | 
			
		||||
   if (ctx->NewState & (NEW_TEXTURE_MATRIX | NEW_TEXTURE_ENABLE)) {
 | 
			
		||||
      ctx->Enabled &= ~(ENABLE_TEXMAT0 | ENABLE_TEXMAT1);
 | 
			
		||||
 | 
			
		||||
      for (i=0; i < MAX_TEXTURE_UNITS; i++) {
 | 
			
		||||
	 if (ctx->TextureMatrix[i].flags & MAT_DIRTY_ALL_OVER) {
 | 
			
		||||
	    gl_matrix_analyze( &ctx->TextureMatrix[i] );
 | 
			
		||||
	    ctx->TextureMatrix[i].flags &= ~MAT_DIRTY_DEPENDENTS;
 | 
			
		||||
 | 
			
		||||
	    if (ctx->Texture.Unit[i].Enabled &&
 | 
			
		||||
		ctx->TextureMatrix[i].type != MATRIX_IDENTITY)
 | 
			
		||||
	       ctx->Enabled |= ENABLE_TEXMAT0 << i;
 | 
			
		||||
	 }
 | 
			
		||||
         if (ctx->Texture.Unit[i].Enabled &&
 | 
			
		||||
             ctx->TextureMatrix[i].type != MATRIX_IDENTITY) {
 | 
			
		||||
            ctx->Enabled |= ENABLE_TEXMAT0 << i;
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /* Update ctx->Enabled's ENABLE_TEXGENn and ENABLE_TEXn flags */
 | 
			
		||||
   if (ctx->NewState & (NEW_TEXTURING | NEW_TEXTURE_ENABLE)) {
 | 
			
		||||
      ctx->Texture.NeedNormals = GL_FALSE;
 | 
			
		||||
      gl_update_dirty_texobjs(ctx);
 | 
			
		||||
@@ -974,9 +977,11 @@ void gl_update_state( GLcontext *ctx )
 | 
			
		||||
	       }
 | 
			
		||||
	    }
 | 
			
		||||
	 }
 | 
			
		||||
         else {
 | 
			
		||||
            ctx->Texture.Unit[i].ReallyEnabled = 0;
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      ctx->Texture.Enabled = ctx->Enabled & ENABLE_TEX_ANY;
 | 
			
		||||
      ctx->Enabled = (ctx->Enabled & ~ENABLE_TEX_ANY) | ctx->Texture.ReallyEnabled;
 | 
			
		||||
      ctx->NeedNormals = (ctx->Light.Enabled || ctx->Texture.NeedNormals);
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
@@ -1187,8 +1192,9 @@ void gl_update_state( GLcontext *ctx )
 | 
			
		||||
	 }
 | 
			
		||||
	 ctx->NeedEyeNormals = ctx->NeedEyeCoords;
 | 
			
		||||
      }
 | 
			
		||||
      if (ctx->Texture.Enabled || ctx->RenderMode==GL_FEEDBACK) {
 | 
			
		||||
	 if (ctx->Texture.NeedEyeCoords) ctx->NeedEyeCoords = GL_TRUE;
 | 
			
		||||
      if (ctx->Texture.ReallyEnabled || ctx->RenderMode==GL_FEEDBACK) {
 | 
			
		||||
	 if (ctx->Texture.NeedEyeCoords)
 | 
			
		||||
            ctx->NeedEyeCoords = GL_TRUE;
 | 
			
		||||
	 if (ctx->Texture.NeedNormals)
 | 
			
		||||
	    ctx->NeedNormals = ctx->NeedEyeNormals = GL_TRUE;
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/* $Id: teximage.c,v 1.39.4.7 2000/10/16 23:37:16 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -139,21 +140,23 @@ logbase2( int n )
 | 
			
		||||
GLint
 | 
			
		||||
_mesa_base_tex_format( GLcontext *ctx, GLint format )
 | 
			
		||||
{
 | 
			
		||||
  /*
 | 
			
		||||
   * Ask the driver for the base format, if it doesn't
 | 
			
		||||
   * know, it will return -1;
 | 
			
		||||
   */
 | 
			
		||||
   if (ctx->Driver.BaseCompressedTexFormat) {
 | 
			
		||||
      GLint ifmt = (*ctx->Driver.BaseCompressedTexFormat)(ctx, format);
 | 
			
		||||
      if (ifmt >= 0) {
 | 
			
		||||
         return ifmt;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   switch (format) {
 | 
			
		||||
      case GL_COMPRESSED_ALPHA_ARB:
 | 
			
		||||
         if (ctx && !ctx->Extensions.HaveTextureCompression)
 | 
			
		||||
            return -1;
 | 
			
		||||
         /* fall-through */
 | 
			
		||||
      case GL_ALPHA:
 | 
			
		||||
      case GL_ALPHA4:
 | 
			
		||||
      case GL_ALPHA8:
 | 
			
		||||
      case GL_ALPHA12:
 | 
			
		||||
      case GL_ALPHA16:
 | 
			
		||||
         return GL_ALPHA;
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ARB:
 | 
			
		||||
         if (ctx && !ctx->Extensions.HaveTextureCompression)
 | 
			
		||||
            return -1;
 | 
			
		||||
         /* fall-through */
 | 
			
		||||
      case 1:
 | 
			
		||||
      case GL_LUMINANCE:
 | 
			
		||||
      case GL_LUMINANCE4:
 | 
			
		||||
@@ -161,10 +164,6 @@ _mesa_base_tex_format( GLcontext *ctx, GLint format )
 | 
			
		||||
      case GL_LUMINANCE12:
 | 
			
		||||
      case GL_LUMINANCE16:
 | 
			
		||||
         return GL_LUMINANCE;
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
 | 
			
		||||
         if (ctx && !ctx->Extensions.HaveTextureCompression)
 | 
			
		||||
            return -1;
 | 
			
		||||
         /* fall-through */
 | 
			
		||||
      case 2:
 | 
			
		||||
      case GL_LUMINANCE_ALPHA:
 | 
			
		||||
      case GL_LUMINANCE4_ALPHA4:
 | 
			
		||||
@@ -174,31 +173,12 @@ _mesa_base_tex_format( GLcontext *ctx, GLint format )
 | 
			
		||||
      case GL_LUMINANCE12_ALPHA12:
 | 
			
		||||
      case GL_LUMINANCE16_ALPHA16:
 | 
			
		||||
         return GL_LUMINANCE_ALPHA;
 | 
			
		||||
      case GL_COMPRESSED_INTENSITY_ARB:
 | 
			
		||||
         if (ctx && !ctx->Extensions.HaveTextureCompression)
 | 
			
		||||
            return -1;
 | 
			
		||||
         /* fall-through */
 | 
			
		||||
      case GL_INTENSITY:
 | 
			
		||||
      case GL_INTENSITY4:
 | 
			
		||||
      case GL_INTENSITY8:
 | 
			
		||||
      case GL_INTENSITY12:
 | 
			
		||||
      case GL_INTENSITY16:
 | 
			
		||||
         return GL_INTENSITY;
 | 
			
		||||
      case GL_COMPRESSED_RGB_ARB:
 | 
			
		||||
         if (ctx && ctx->Extensions.HaveTextureCompression)
 | 
			
		||||
            return GL_RGB;
 | 
			
		||||
         else
 | 
			
		||||
            return -1;
 | 
			
		||||
      case GL_COMPRESSED_RGB_FXT1_3DFX:
 | 
			
		||||
         if (ctx && ctx->Extensions.HaveTextureCompressionFXT1)
 | 
			
		||||
            return GL_RGB;
 | 
			
		||||
         else
 | 
			
		||||
            return -1;
 | 
			
		||||
      case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
 | 
			
		||||
         if (ctx && ctx->Extensions.HaveTextureCompressionS3TC)
 | 
			
		||||
            return GL_RGB;
 | 
			
		||||
         else
 | 
			
		||||
            return -1;
 | 
			
		||||
      case 3:
 | 
			
		||||
      case GL_RGB:
 | 
			
		||||
      case GL_R3_G3_B2:
 | 
			
		||||
@@ -209,23 +189,6 @@ _mesa_base_tex_format( GLcontext *ctx, GLint format )
 | 
			
		||||
      case GL_RGB12:
 | 
			
		||||
      case GL_RGB16:
 | 
			
		||||
         return GL_RGB;
 | 
			
		||||
      case GL_COMPRESSED_RGBA_ARB:
 | 
			
		||||
         if (ctx && ctx->Extensions.HaveTextureCompression)
 | 
			
		||||
            return GL_RGBA;
 | 
			
		||||
         else
 | 
			
		||||
            return -1;
 | 
			
		||||
      case GL_COMPRESSED_RGBA_FXT1_3DFX:
 | 
			
		||||
         if (ctx && ctx->Extensions.HaveTextureCompressionFXT1)
 | 
			
		||||
            return GL_RGBA;
 | 
			
		||||
         else
 | 
			
		||||
            return -1;
 | 
			
		||||
      case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
 | 
			
		||||
      case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
 | 
			
		||||
      case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
 | 
			
		||||
         if (ctx && ctx->Extensions.HaveTextureCompressionS3TC)
 | 
			
		||||
            return GL_RGBA;
 | 
			
		||||
         else
 | 
			
		||||
            return -1;
 | 
			
		||||
      case 4:
 | 
			
		||||
      case GL_RGBA:
 | 
			
		||||
      case GL_RGBA2:
 | 
			
		||||
@@ -328,25 +291,12 @@ components_in_intformat( GLint format )
 | 
			
		||||
 * otherwise.
 | 
			
		||||
 */
 | 
			
		||||
static GLboolean
 | 
			
		||||
is_compressed_format(GLenum internalFormat)
 | 
			
		||||
is_compressed_format(GLcontext *ctx, GLenum internalFormat)
 | 
			
		||||
{
 | 
			
		||||
   switch (internalFormat) {
 | 
			
		||||
      case GL_COMPRESSED_ALPHA_ARB:
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ARB:
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
 | 
			
		||||
      case GL_COMPRESSED_INTENSITY_ARB:
 | 
			
		||||
      case GL_COMPRESSED_RGB_ARB:
 | 
			
		||||
      case GL_COMPRESSED_RGBA_ARB:
 | 
			
		||||
      case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
 | 
			
		||||
      case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
 | 
			
		||||
      case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
 | 
			
		||||
      case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
 | 
			
		||||
      case GL_COMPRESSED_RGB_FXT1_3DFX:
 | 
			
		||||
      case GL_COMPRESSED_RGBA_FXT1_3DFX:
 | 
			
		||||
         return GL_TRUE;
 | 
			
		||||
      default:
 | 
			
		||||
         return GL_FALSE;
 | 
			
		||||
   }
 | 
			
		||||
    if (ctx->Driver.IsCompressedFormat) {
 | 
			
		||||
        return (*ctx->Driver.IsCompressedFormat)(ctx, internalFormat);
 | 
			
		||||
    }
 | 
			
		||||
    return GL_FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -511,13 +461,14 @@ _mesa_alloc_texture_image( void )
 | 
			
		||||
 * Initialize most fields of a gl_texture_image struct.
 | 
			
		||||
 */
 | 
			
		||||
static void
 | 
			
		||||
init_texture_image( struct gl_texture_image *img,
 | 
			
		||||
init_texture_image( GLcontext *ctx,
 | 
			
		||||
                    struct gl_texture_image *img,
 | 
			
		||||
                    GLsizei width, GLsizei height, GLsizei depth,
 | 
			
		||||
                    GLint border, GLenum internalFormat )
 | 
			
		||||
{
 | 
			
		||||
   ASSERT(img);
 | 
			
		||||
   ASSERT(!img->Data);
 | 
			
		||||
   img->Format = (GLenum) _mesa_base_tex_format(NULL, internalFormat);
 | 
			
		||||
   img->Format = (GLenum) _mesa_base_tex_format(ctx, internalFormat);
 | 
			
		||||
   set_teximage_component_sizes( img );
 | 
			
		||||
   img->IntFormat = (GLenum) internalFormat;
 | 
			
		||||
   img->Border = border;
 | 
			
		||||
@@ -537,7 +488,7 @@ init_texture_image( struct gl_texture_image *img,
 | 
			
		||||
   img->Height2 = 1 << img->HeightLog2;
 | 
			
		||||
   img->Depth2 = 1 << img->DepthLog2;
 | 
			
		||||
   img->MaxLog2 = MAX2(img->WidthLog2, img->HeightLog2);
 | 
			
		||||
   img->IsCompressed = is_compressed_format(internalFormat);
 | 
			
		||||
   img->IsCompressed = is_compressed_format(ctx, internalFormat);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -556,13 +507,26 @@ _mesa_free_texture_image( struct gl_texture_image *teximage )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return number of bytes of storage needed to store a compressed texture
 | 
			
		||||
 * image.
 | 
			
		||||
 * image.  Only the driver knows for sure.  If the driver can't help us,
 | 
			
		||||
 * we must return 0.
 | 
			
		||||
 */
 | 
			
		||||
GLuint
 | 
			
		||||
_mesa_compressed_image_size(GLenum internalFormat,
 | 
			
		||||
                            GLint width, GLint height, GLint depth)
 | 
			
		||||
_mesa_compressed_image_size(GLcontext *ctx,
 | 
			
		||||
                            GLenum internalFormat,
 | 
			
		||||
                            GLint numDimensions,
 | 
			
		||||
                            GLint width,
 | 
			
		||||
                            GLint height,
 | 
			
		||||
                            GLint depth)
 | 
			
		||||
{
 | 
			
		||||
   return 0;
 | 
			
		||||
   if (ctx->Driver.CompressedImageSize) {
 | 
			
		||||
      return (*ctx->Driver.CompressedImageSize)(ctx, internalFormat,
 | 
			
		||||
                                                numDimensions,
 | 
			
		||||
                                                width, height, depth);
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      /* Shouldn't this be an internal error of some sort? */
 | 
			
		||||
      return 0;
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -877,6 +841,40 @@ make_null_texture( struct gl_texture_image *texImage )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is called when a proxy texture test fails, we set all the
 | 
			
		||||
 * image members (except DriverData) to zero.
 | 
			
		||||
 */
 | 
			
		||||
static void
 | 
			
		||||
clear_proxy_teximage(struct gl_texture_image *img)
 | 
			
		||||
{
 | 
			
		||||
   ASSERT(img);
 | 
			
		||||
   img->Format = 0;
 | 
			
		||||
   img->IntFormat = 0;
 | 
			
		||||
   img->RedBits = 0;
 | 
			
		||||
   img->GreenBits = 0;
 | 
			
		||||
   img->BlueBits = 0;
 | 
			
		||||
   img->AlphaBits = 0;
 | 
			
		||||
   img->IntensityBits = 0;
 | 
			
		||||
   img->LuminanceBits = 0;
 | 
			
		||||
   img->IndexBits = 0;
 | 
			
		||||
   img->Border = 0;
 | 
			
		||||
   img->Width = 0;
 | 
			
		||||
   img->Height = 0;
 | 
			
		||||
   img->Depth = 0;
 | 
			
		||||
   img->Width2 = 0;
 | 
			
		||||
   img->Height2 = 0;
 | 
			
		||||
   img->Depth2 = 0;
 | 
			
		||||
   img->WidthLog2 = 0;
 | 
			
		||||
   img->HeightLog2 = 0;
 | 
			
		||||
   img->DepthLog2 = 0;
 | 
			
		||||
   img->Data = NULL;
 | 
			
		||||
   img->IsCompressed = 0;
 | 
			
		||||
   img->CompressedSize = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Test glTexImage[123]D() parameters for errors.
 | 
			
		||||
 * Input:
 | 
			
		||||
@@ -999,7 +997,7 @@ texture_error_check( GLcontext *ctx, GLenum target,
 | 
			
		||||
      return GL_TRUE;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (!is_compressed_format(internalFormat)) {
 | 
			
		||||
   if (!is_compressed_format(ctx, internalFormat)) {
 | 
			
		||||
      if (!_mesa_is_legal_format_and_type( format, type )) {
 | 
			
		||||
         /* Yes, generate GL_INVALID_OPERATION, not GL_INVALID_ENUM, if there
 | 
			
		||||
          * is a type/format mismatch.  See 1.2 spec page 94, sec 3.6.4.
 | 
			
		||||
@@ -1125,7 +1123,7 @@ subtexture_error_check( GLcontext *ctx, GLuint dimensions,
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (!is_compressed_format(destTex->IntFormat)) {
 | 
			
		||||
   if (!is_compressed_format(ctx, destTex->IntFormat)) {
 | 
			
		||||
      if (!_mesa_is_legal_format_and_type(format, type)) {
 | 
			
		||||
         char message[100];
 | 
			
		||||
         sprintf(message, "glTexSubImage%dD(format or type)", dimensions);
 | 
			
		||||
@@ -1343,6 +1341,103 @@ copytexsubimage_error_check( GLcontext *ctx, GLuint dimensions,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Turn generic compressed formats into specific compressed format.
 | 
			
		||||
 * Some of the compressed formats we don't support, so we
 | 
			
		||||
 * fall back to the uncompressed format.  (See issue 15 of
 | 
			
		||||
 * the GL_ARB_texture_compression specification.)
 | 
			
		||||
 */
 | 
			
		||||
static GLint
 | 
			
		||||
get_specific_compressed_tex_format(GLcontext *ctx,
 | 
			
		||||
                                   GLint ifmt, GLint numDimensions,
 | 
			
		||||
                                   GLint     *levelp,
 | 
			
		||||
                                   GLsizei   *widthp,
 | 
			
		||||
                                   GLsizei   *heightp,
 | 
			
		||||
                                   GLsizei   *depthp,
 | 
			
		||||
                                   GLint     *borderp,
 | 
			
		||||
                                   GLenum    *formatp,
 | 
			
		||||
                                   GLenum    *typep)
 | 
			
		||||
{
 | 
			
		||||
   char message[100];
 | 
			
		||||
   GLint internalFormat = ifmt;
 | 
			
		||||
 | 
			
		||||
   if (ctx->Extensions.HaveTextureCompression
 | 
			
		||||
       && ctx->Driver.SpecificCompressedTexFormat) {
 | 
			
		||||
      /*
 | 
			
		||||
       * First, ask the driver for the specific format.
 | 
			
		||||
       * We do this for all formats, since we may want to
 | 
			
		||||
       * fake one compressed format for another.
 | 
			
		||||
       */
 | 
			
		||||
       internalFormat = (*ctx->Driver.SpecificCompressedTexFormat)
 | 
			
		||||
                               (ctx, internalFormat, numDimensions,
 | 
			
		||||
                                levelp,
 | 
			
		||||
                                widthp, heightp, depthp,
 | 
			
		||||
                                borderp, formatp, typep);
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /*
 | 
			
		||||
    * Now, convert any generic format left to an uncompressed
 | 
			
		||||
    * specific format.  If the driver does not support compression
 | 
			
		||||
    * of the format, we must drop back to the uncompressed format.
 | 
			
		||||
    * See issue 15 of the GL_ARB_texture_compression specification.
 | 
			
		||||
    */
 | 
			
		||||
   switch (internalFormat) {
 | 
			
		||||
      case GL_COMPRESSED_ALPHA_ARB:
 | 
			
		||||
         if (ctx && !ctx->Extensions.HaveTextureCompression) {
 | 
			
		||||
            sprintf(message, "glTexImage%dD(internalFormat)", numDimensions);
 | 
			
		||||
            gl_error(ctx, GL_INVALID_VALUE, message);
 | 
			
		||||
            return -1;
 | 
			
		||||
         }
 | 
			
		||||
         internalFormat = GL_ALPHA;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ARB:
 | 
			
		||||
         if (ctx && !ctx->Extensions.HaveTextureCompression) {
 | 
			
		||||
            sprintf(message, "glTexImage%dD(internalFormat)", numDimensions);
 | 
			
		||||
            gl_error(ctx, GL_INVALID_VALUE, message);
 | 
			
		||||
            return -1;
 | 
			
		||||
         }
 | 
			
		||||
         internalFormat = GL_LUMINANCE;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
 | 
			
		||||
         if (ctx && !ctx->Extensions.HaveTextureCompression) {
 | 
			
		||||
            sprintf(message, "glTexImage%dD(internalFormat)", numDimensions);
 | 
			
		||||
            gl_error(ctx, GL_INVALID_VALUE, message);
 | 
			
		||||
            return -1;
 | 
			
		||||
         }
 | 
			
		||||
         internalFormat = GL_LUMINANCE_ALPHA;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_COMPRESSED_INTENSITY_ARB:
 | 
			
		||||
         if (ctx && !ctx->Extensions.HaveTextureCompression) {
 | 
			
		||||
            sprintf(message, "glTexImage%dD(internalFormat)", numDimensions);
 | 
			
		||||
            gl_error(ctx, GL_INVALID_VALUE, message);
 | 
			
		||||
            return -1;
 | 
			
		||||
         }
 | 
			
		||||
         internalFormat = GL_INTENSITY;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_COMPRESSED_RGB_ARB:
 | 
			
		||||
         if (ctx && !ctx->Extensions.HaveTextureCompression) {
 | 
			
		||||
            sprintf(message, "glTexImage%dD(internalFormat)", numDimensions);
 | 
			
		||||
            gl_error(ctx, GL_INVALID_VALUE, message);
 | 
			
		||||
            return -1;
 | 
			
		||||
         }
 | 
			
		||||
         internalFormat = GL_RGB;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_COMPRESSED_RGBA_ARB:
 | 
			
		||||
         if (ctx && !ctx->Extensions.HaveTextureCompression) {
 | 
			
		||||
            sprintf(message, "glTexImage%dD(internalFormat)", numDimensions);
 | 
			
		||||
            gl_error(ctx, GL_INVALID_VALUE, message);
 | 
			
		||||
            return -1;
 | 
			
		||||
         }
 | 
			
		||||
         internalFormat = GL_RGBA;
 | 
			
		||||
         break;
 | 
			
		||||
      default:
 | 
			
		||||
         /* silence compiler warning */
 | 
			
		||||
         ;
 | 
			
		||||
   }
 | 
			
		||||
   return internalFormat;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Called from the API.  Note that width includes the border.
 | 
			
		||||
 */
 | 
			
		||||
@@ -1358,6 +1453,22 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
 | 
			
		||||
      struct gl_texture_unit *texUnit;
 | 
			
		||||
      struct gl_texture_object *texObj;
 | 
			
		||||
      struct gl_texture_image *texImage;
 | 
			
		||||
      GLint ifmt;
 | 
			
		||||
 | 
			
		||||
      ifmt = get_specific_compressed_tex_format(ctx, internalFormat, 1,
 | 
			
		||||
                                                &level,
 | 
			
		||||
                                                &width, 0, 0,
 | 
			
		||||
                                                &border, &format, &type);
 | 
			
		||||
      if (ifmt < 0) {
 | 
			
		||||
         /*
 | 
			
		||||
          * The error here is that we were sent a generic compressed
 | 
			
		||||
          * format, but the extension is not supported.
 | 
			
		||||
          */
 | 
			
		||||
         return;
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         internalFormat = ifmt;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                              format, type, 1, width, 1, 1, border)) {
 | 
			
		||||
@@ -1382,7 +1493,7 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* setup the teximage struct's fields */
 | 
			
		||||
      init_texture_image(texImage, width, 1, 1, border, internalFormat);
 | 
			
		||||
      init_texture_image(ctx, texImage, width, 1, 1, border, internalFormat);
 | 
			
		||||
 | 
			
		||||
      /* process the texture image */
 | 
			
		||||
      if (pixels) {
 | 
			
		||||
@@ -1427,19 +1538,24 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
 | 
			
		||||
      gl_put_texobj_on_dirty_list( ctx, texObj );
 | 
			
		||||
      ctx->NewState |= NEW_TEXTURING;
 | 
			
		||||
   }
 | 
			
		||||
   else if (target==GL_PROXY_TEXTURE_1D) {
 | 
			
		||||
   else if (target == GL_PROXY_TEXTURE_1D) {
 | 
			
		||||
      /* Proxy texture: check for errors and update proxy state */
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                              format, type, 1, width, 1, 1, border)) {
 | 
			
		||||
      GLenum error = texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                                         format, type, 1, width, 1, 1, border);
 | 
			
		||||
      if (!error && ctx->Driver.TestProxyTexImage) {
 | 
			
		||||
         error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
 | 
			
		||||
                                                  internalFormat, format, type,
 | 
			
		||||
                                                  width, 1, 1, border);
 | 
			
		||||
      }
 | 
			
		||||
      if (error) {
 | 
			
		||||
         /* if error, clear all proxy texture image parameters */
 | 
			
		||||
         if (level>=0 && level<ctx->Const.MaxTextureLevels) {
 | 
			
		||||
            MEMSET( ctx->Texture.Proxy1D->Image[level], 0,
 | 
			
		||||
                    sizeof(struct gl_texture_image) );
 | 
			
		||||
            clear_proxy_teximage(ctx->Texture.Proxy1D->Image[level]);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         /* if no error, update proxy texture image parameters */
 | 
			
		||||
         init_texture_image(ctx->Texture.Proxy1D->Image[level],
 | 
			
		||||
         init_texture_image(ctx, ctx->Texture.Proxy1D->Image[level],
 | 
			
		||||
                            width, 1, 1, border, internalFormat);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
@@ -1466,6 +1582,22 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
 | 
			
		||||
      struct gl_texture_unit *texUnit;
 | 
			
		||||
      struct gl_texture_object *texObj;
 | 
			
		||||
      struct gl_texture_image *texImage;
 | 
			
		||||
      GLint ifmt;
 | 
			
		||||
 | 
			
		||||
      ifmt = get_specific_compressed_tex_format(ctx, internalFormat, 2,
 | 
			
		||||
                                                &level,
 | 
			
		||||
                                                &width, &height, 0,
 | 
			
		||||
                                                &border, &format, &type);
 | 
			
		||||
      if (ifmt < 0) {
 | 
			
		||||
         /*
 | 
			
		||||
          * The error here is that we were sent a generic compressed
 | 
			
		||||
          * format, but the extension is not supported.
 | 
			
		||||
          */
 | 
			
		||||
         return;
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         internalFormat = ifmt;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                              format, type, 2, width, height, 1, border)) {
 | 
			
		||||
@@ -1491,7 +1623,8 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* setup the teximage struct's fields */
 | 
			
		||||
      init_texture_image(texImage, width, height, 1, border, internalFormat);
 | 
			
		||||
      init_texture_image(ctx, texImage, width, height,
 | 
			
		||||
                         1, border, internalFormat);
 | 
			
		||||
 | 
			
		||||
      /* process the texture image */
 | 
			
		||||
      if (pixels) {
 | 
			
		||||
@@ -1545,19 +1678,25 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
 | 
			
		||||
      gl_put_texobj_on_dirty_list( ctx, texObj );
 | 
			
		||||
      ctx->NewState |= NEW_TEXTURING;
 | 
			
		||||
   }
 | 
			
		||||
   else if (target==GL_PROXY_TEXTURE_2D) {
 | 
			
		||||
   else if (target == GL_PROXY_TEXTURE_2D) {
 | 
			
		||||
      /* Proxy texture: check for errors and update proxy state */
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                              format, type, 2, width, height, 1, border)) {
 | 
			
		||||
      GLenum error = texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                                    format, type, 2, width, height, 1, border);
 | 
			
		||||
      if (!error && ctx->Driver.TestProxyTexImage) {
 | 
			
		||||
         error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
 | 
			
		||||
                                                  internalFormat, format, type,
 | 
			
		||||
                                                  width, height, 1, border);
 | 
			
		||||
      }
 | 
			
		||||
      if (error) {
 | 
			
		||||
         /* if error, clear all proxy texture image parameters */
 | 
			
		||||
         if (level>=0 && level<ctx->Const.MaxTextureLevels) {
 | 
			
		||||
            MEMSET( ctx->Texture.Proxy2D->Image[level], 0,
 | 
			
		||||
                    sizeof(struct gl_texture_image) );
 | 
			
		||||
            clear_proxy_teximage(ctx->Texture.Proxy2D->Image[level]);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         /* if no error, update proxy texture image parameters */
 | 
			
		||||
         init_texture_image(ctx->Texture.Proxy2D->Image[level],
 | 
			
		||||
         init_texture_image(ctx,
 | 
			
		||||
                            ctx->Texture.Proxy2D->Image[level],
 | 
			
		||||
                            width, height, 1, border, internalFormat);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
@@ -1568,7 +1707,6 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Called by the API or display list executor.
 | 
			
		||||
 * Note that width and height include the border.
 | 
			
		||||
@@ -1586,6 +1724,23 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
 | 
			
		||||
      struct gl_texture_unit *texUnit;
 | 
			
		||||
      struct gl_texture_object *texObj;
 | 
			
		||||
      struct gl_texture_image *texImage;
 | 
			
		||||
      GLint ifmt;
 | 
			
		||||
 | 
			
		||||
      ifmt = get_specific_compressed_tex_format(ctx, internalFormat, 3,
 | 
			
		||||
                                                &level,
 | 
			
		||||
                                                &width, &height, &depth,
 | 
			
		||||
                                                &border, &format, &type);
 | 
			
		||||
      if (ifmt < 0) {
 | 
			
		||||
         /*
 | 
			
		||||
          * The error here is that we were sent a generic compressed
 | 
			
		||||
          * format, but the extension is not supported.
 | 
			
		||||
          */
 | 
			
		||||
         return;
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         internalFormat = ifmt;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                              format, type, 3, width, height, depth, border)) {
 | 
			
		||||
         return;   /* error in texture image was detected */
 | 
			
		||||
@@ -1609,7 +1764,7 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* setup the teximage struct's fields */
 | 
			
		||||
      init_texture_image(texImage, width, height, depth,
 | 
			
		||||
      init_texture_image(ctx, texImage, width, height, depth,
 | 
			
		||||
                         border, internalFormat);
 | 
			
		||||
 | 
			
		||||
      /* process the texture image */
 | 
			
		||||
@@ -1655,19 +1810,24 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
 | 
			
		||||
      gl_put_texobj_on_dirty_list( ctx, texObj );
 | 
			
		||||
      ctx->NewState |= NEW_TEXTURING;
 | 
			
		||||
   }
 | 
			
		||||
   else if (target==GL_PROXY_TEXTURE_3D) {
 | 
			
		||||
   else if (target == GL_PROXY_TEXTURE_3D) {
 | 
			
		||||
      /* Proxy texture: check for errors and update proxy state */
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                              format, type, 3, width, height, depth, border)) {
 | 
			
		||||
      GLenum error = texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                                format, type, 3, width, height, depth, border);
 | 
			
		||||
      if (!error && ctx->Driver.TestProxyTexImage) {
 | 
			
		||||
         error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
 | 
			
		||||
                                                 internalFormat, format, type,
 | 
			
		||||
                                                 width, height, depth, border);
 | 
			
		||||
      }
 | 
			
		||||
      if (error) {
 | 
			
		||||
         /* if error, clear all proxy texture image parameters */
 | 
			
		||||
         if (level>=0 && level<ctx->Const.MaxTextureLevels) {
 | 
			
		||||
            MEMSET( ctx->Texture.Proxy3D->Image[level], 0,
 | 
			
		||||
                    sizeof(struct gl_texture_image) );
 | 
			
		||||
            clear_proxy_teximage(ctx->Texture.Proxy3D->Image[level]);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         /* if no error, update proxy texture image parameters */
 | 
			
		||||
         init_texture_image(ctx->Texture.Proxy3D->Image[level],
 | 
			
		||||
         init_texture_image(ctx, ctx->Texture.Proxy3D->Image[level],
 | 
			
		||||
                            width, height, depth, border, internalFormat);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
@@ -1780,6 +1940,56 @@ _mesa_get_teximage_from_driver( GLcontext *ctx, GLenum target, GLint level,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Get all the mipmap images for a texture object from the device driver.
 | 
			
		||||
 * Actually, only get mipmap images if we're using a mipmap filter.
 | 
			
		||||
 */
 | 
			
		||||
GLboolean
 | 
			
		||||
_mesa_get_teximages_from_driver(GLcontext *ctx,
 | 
			
		||||
                                struct gl_texture_object *texObj)
 | 
			
		||||
{
 | 
			
		||||
   if (ctx->Driver.GetTexImage) {
 | 
			
		||||
      static const GLenum targets[] = {
 | 
			
		||||
         GL_TEXTURE_1D,
 | 
			
		||||
         GL_TEXTURE_2D,
 | 
			
		||||
         GL_TEXTURE_3D,
 | 
			
		||||
         GL_TEXTURE_CUBE_MAP_ARB,
 | 
			
		||||
         GL_TEXTURE_CUBE_MAP_ARB,
 | 
			
		||||
         GL_TEXTURE_CUBE_MAP_ARB
 | 
			
		||||
      };
 | 
			
		||||
      GLboolean needLambda = (texObj->MinFilter != texObj->MagFilter);
 | 
			
		||||
      GLenum target = targets[texObj->Dimensions - 1];
 | 
			
		||||
      if (needLambda) {
 | 
			
		||||
         GLint level;
 | 
			
		||||
         /* Get images for all mipmap levels.  We might not need them
 | 
			
		||||
          * all but this is easier.  We're on a (slow) software path
 | 
			
		||||
          * anyway.
 | 
			
		||||
          */
 | 
			
		||||
         for (level = 0; level <= texObj->P; level++) {
 | 
			
		||||
            struct gl_texture_image *texImg = texObj->Image[level];
 | 
			
		||||
            if (texImg && !texImg->Data) {
 | 
			
		||||
               _mesa_get_teximage_from_driver(ctx, target, level, texObj);
 | 
			
		||||
               if (!texImg->Data)
 | 
			
		||||
                  return GL_FALSE;  /* out of memory */
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         GLint level = texObj->BaseLevel;
 | 
			
		||||
         struct gl_texture_image *texImg = texObj->Image[level];
 | 
			
		||||
         if (texImg && !texImg->Data) {
 | 
			
		||||
            _mesa_get_teximage_from_driver(ctx, target, level, texObj);
 | 
			
		||||
            if (!texImg->Data)
 | 
			
		||||
               return GL_FALSE;  /* out of memory */
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      return GL_TRUE;
 | 
			
		||||
   }
 | 
			
		||||
   return GL_FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetTexImage( GLenum target, GLint level, GLenum format,
 | 
			
		||||
                   GLenum type, GLvoid *pixels )
 | 
			
		||||
@@ -2511,10 +2721,25 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glCompressedTexImage1DARB");
 | 
			
		||||
 | 
			
		||||
   switch (internalFormat) {
 | 
			
		||||
      case GL_COMPRESSED_ALPHA_ARB:
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ARB:
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
 | 
			
		||||
      case GL_COMPRESSED_INTENSITY_ARB:
 | 
			
		||||
      case GL_COMPRESSED_RGB_ARB:
 | 
			
		||||
      case GL_COMPRESSED_RGBA_ARB:
 | 
			
		||||
         gl_error(ctx, GL_INVALID_ENUM, "glCompressedTexImage1DARB");
 | 
			
		||||
         return;
 | 
			
		||||
      default:
 | 
			
		||||
         /* silence compiler warning */
 | 
			
		||||
         ;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (target == GL_TEXTURE_1D) {
 | 
			
		||||
      struct gl_texture_unit *texUnit;
 | 
			
		||||
      struct gl_texture_object *texObj;
 | 
			
		||||
      struct gl_texture_image *texImage;
 | 
			
		||||
      GLsizei computedImageSize;
 | 
			
		||||
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                              GL_NONE, GL_NONE, 1, width, 1, 1, border)) {
 | 
			
		||||
@@ -2539,23 +2764,32 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* setup the teximage struct's fields */
 | 
			
		||||
      init_texture_image(texImage, width, 1, 1, border, internalFormat);
 | 
			
		||||
      init_texture_image(ctx, texImage, width, 1, 1,
 | 
			
		||||
                         border, internalFormat);
 | 
			
		||||
 | 
			
		||||
      /* process the texture image */
 | 
			
		||||
      if (data) {
 | 
			
		||||
         GLboolean retain = GL_TRUE;
 | 
			
		||||
         GLboolean success = GL_FALSE;
 | 
			
		||||
         if (ctx->Driver.CompressedTexImage1D) {
 | 
			
		||||
            success = (*ctx->Driver.CompressedTexImage1D)( ctx, target, level,
 | 
			
		||||
                                              data, texObj, texImage, &retain);
 | 
			
		||||
            success = (*ctx->Driver.CompressedTexImage1D)(ctx, target, level,
 | 
			
		||||
                               imageSize, data, texObj, texImage, &retain);
 | 
			
		||||
         }
 | 
			
		||||
         if (retain || !success) {
 | 
			
		||||
            /* make internal copy of the texture image */
 | 
			
		||||
            GLuint imageSize = _mesa_compressed_image_size(internalFormat,
 | 
			
		||||
                                                           width, 1, 1);
 | 
			
		||||
            texImage->Data = MALLOC(imageSize);
 | 
			
		||||
            computedImageSize = _mesa_compressed_image_size(ctx,
 | 
			
		||||
                                                        internalFormat,
 | 
			
		||||
                                                        1,    /* num dims */
 | 
			
		||||
                                                        width,
 | 
			
		||||
                                                        1,    /* height   */
 | 
			
		||||
                                                        1);   /* depth    */
 | 
			
		||||
            if (computedImageSize != imageSize) {
 | 
			
		||||
                gl_error(ctx, GL_INVALID_VALUE, "glCompressedTexImage1DARB(imageSize)");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            texImage->Data = MALLOC(computedImageSize);
 | 
			
		||||
            if (texImage->Data) {
 | 
			
		||||
               MEMCPY(texImage->Data, data, imageSize);
 | 
			
		||||
               MEMCPY(texImage->Data, data, computedImageSize);
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         if (!retain && texImage->Data) {
 | 
			
		||||
@@ -2567,8 +2801,9 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
 | 
			
		||||
         make_null_texture(texImage);
 | 
			
		||||
         if (ctx->Driver.CompressedTexImage1D) {
 | 
			
		||||
            GLboolean retain;
 | 
			
		||||
            (*ctx->Driver.CompressedTexImage1D)( ctx, target, level,
 | 
			
		||||
                                    texImage->Data, texObj, texImage, &retain);
 | 
			
		||||
            (*ctx->Driver.CompressedTexImage1D)(ctx, target, level, 0,
 | 
			
		||||
                                                texImage->Data, texObj,
 | 
			
		||||
                                                texImage, &retain);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -2578,17 +2813,22 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
 | 
			
		||||
   }
 | 
			
		||||
   else if (target == GL_PROXY_TEXTURE_1D) {
 | 
			
		||||
      /* Proxy texture: check for errors and update proxy state */
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                              GL_NONE, GL_NONE, 1, width, 1, 1, border)) {
 | 
			
		||||
      GLenum error = texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                                    GL_NONE, GL_NONE, 1, width, 1, 1, border);
 | 
			
		||||
      if (!error && ctx->Driver.TestProxyTexImage) {
 | 
			
		||||
         error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
 | 
			
		||||
                                             internalFormat, GL_NONE, GL_NONE,
 | 
			
		||||
                                             width, 1, 1, border);
 | 
			
		||||
      }
 | 
			
		||||
      if (error) {
 | 
			
		||||
         /* if error, clear all proxy texture image parameters */
 | 
			
		||||
         if (level>=0 && level<ctx->Const.MaxTextureLevels) {
 | 
			
		||||
            MEMSET( ctx->Texture.Proxy1D->Image[level], 0,
 | 
			
		||||
                    sizeof(struct gl_texture_image) );
 | 
			
		||||
            clear_proxy_teximage(ctx->Texture.Proxy1D->Image[level]);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         /* if no error, update proxy texture image parameters */
 | 
			
		||||
         init_texture_image(ctx->Texture.Proxy1D->Image[level],
 | 
			
		||||
         init_texture_image(ctx, ctx->Texture.Proxy1D->Image[level],
 | 
			
		||||
                            width, 1, 1, border, internalFormat);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
@@ -2608,6 +2848,20 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glCompressedTexImage2DARB");
 | 
			
		||||
 | 
			
		||||
   switch (internalFormat) {
 | 
			
		||||
      case GL_COMPRESSED_ALPHA_ARB:
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ARB:
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
 | 
			
		||||
      case GL_COMPRESSED_INTENSITY_ARB:
 | 
			
		||||
      case GL_COMPRESSED_RGB_ARB:
 | 
			
		||||
      case GL_COMPRESSED_RGBA_ARB:
 | 
			
		||||
         gl_error(ctx, GL_INVALID_ENUM, "glCompressedTexImage2DARB");
 | 
			
		||||
         return;
 | 
			
		||||
      default:
 | 
			
		||||
         /* silence compiler warning */
 | 
			
		||||
         ;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (target==GL_TEXTURE_2D ||
 | 
			
		||||
       (ctx->Extensions.HaveTextureCubeMap &&
 | 
			
		||||
        target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB &&
 | 
			
		||||
@@ -2615,6 +2869,7 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
 | 
			
		||||
      struct gl_texture_unit *texUnit;
 | 
			
		||||
      struct gl_texture_object *texObj;
 | 
			
		||||
      struct gl_texture_image *texImage;
 | 
			
		||||
      GLsizei computedImageSize;
 | 
			
		||||
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                              GL_NONE, GL_NONE, 1, width, height, 1, border)) {
 | 
			
		||||
@@ -2639,23 +2894,37 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* setup the teximage struct's fields */
 | 
			
		||||
      init_texture_image(texImage, width, height, 1, border, internalFormat);
 | 
			
		||||
      init_texture_image(ctx, texImage, width, height, 1, border, internalFormat);
 | 
			
		||||
 | 
			
		||||
      /* process the texture image */
 | 
			
		||||
      if (data) {
 | 
			
		||||
         GLboolean retain = GL_TRUE;
 | 
			
		||||
         GLboolean success = GL_FALSE;
 | 
			
		||||
         if (ctx->Driver.CompressedTexImage2D) {
 | 
			
		||||
            success = (*ctx->Driver.CompressedTexImage2D)( ctx, target, level,
 | 
			
		||||
                                              data, texObj, texImage, &retain);
 | 
			
		||||
            success = (*ctx->Driver.CompressedTexImage2D)( ctx,
 | 
			
		||||
                                                           target,
 | 
			
		||||
                                                           level,
 | 
			
		||||
                                                           imageSize,
 | 
			
		||||
                                                           data,
 | 
			
		||||
                                                           texObj,
 | 
			
		||||
                                                           texImage,
 | 
			
		||||
                                                           &retain);
 | 
			
		||||
         }
 | 
			
		||||
         if (retain || !success) {
 | 
			
		||||
            /* make internal copy of the texture image */
 | 
			
		||||
            GLuint imageSize = _mesa_compressed_image_size(internalFormat,
 | 
			
		||||
                                                           width, height, 1);
 | 
			
		||||
            texImage->Data = MALLOC(imageSize);
 | 
			
		||||
            computedImageSize = _mesa_compressed_image_size(ctx,
 | 
			
		||||
                                                           internalFormat,
 | 
			
		||||
                                                           2,    /* num dims */
 | 
			
		||||
                                                           width,
 | 
			
		||||
                                                           height,
 | 
			
		||||
                                                           1);   /* depth    */
 | 
			
		||||
            if (computedImageSize != imageSize) {
 | 
			
		||||
                gl_error(ctx, GL_INVALID_VALUE, "glCompressedTexImage2DARB(imageSize)");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            texImage->Data = MALLOC(computedImageSize);
 | 
			
		||||
            if (texImage->Data) {
 | 
			
		||||
               MEMCPY(texImage->Data, data, imageSize);
 | 
			
		||||
               MEMCPY(texImage->Data, data, computedImageSize);
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         if (!retain && texImage->Data) {
 | 
			
		||||
@@ -2667,8 +2936,9 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
 | 
			
		||||
         make_null_texture(texImage);
 | 
			
		||||
         if (ctx->Driver.CompressedTexImage2D) {
 | 
			
		||||
            GLboolean retain;
 | 
			
		||||
            (*ctx->Driver.CompressedTexImage2D)( ctx, target, level,
 | 
			
		||||
                                    texImage->Data, texObj, texImage, &retain);
 | 
			
		||||
            (*ctx->Driver.CompressedTexImage2D)( ctx, target, level, 0,
 | 
			
		||||
                                                 texImage->Data, texObj,
 | 
			
		||||
                                                 texImage, &retain);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -2678,17 +2948,22 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
 | 
			
		||||
   }
 | 
			
		||||
   else if (target == GL_PROXY_TEXTURE_2D) {
 | 
			
		||||
      /* Proxy texture: check for errors and update proxy state */
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                              GL_NONE, GL_NONE, 1, width, 1, 1, border)) {
 | 
			
		||||
      GLenum error = texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                                GL_NONE, GL_NONE, 2, width, height, 1, border);
 | 
			
		||||
      if (!error && ctx->Driver.TestProxyTexImage) {
 | 
			
		||||
         error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
 | 
			
		||||
                                              internalFormat, GL_NONE, GL_NONE,
 | 
			
		||||
                                              width, height, 1, border);
 | 
			
		||||
      }
 | 
			
		||||
      if (error) {
 | 
			
		||||
         /* if error, clear all proxy texture image parameters */
 | 
			
		||||
         if (level>=0 && level<ctx->Const.MaxTextureLevels) {
 | 
			
		||||
            MEMSET( ctx->Texture.Proxy2D->Image[level], 0,
 | 
			
		||||
                    sizeof(struct gl_texture_image) );
 | 
			
		||||
            clear_proxy_teximage(ctx->Texture.Proxy2D->Image[level]);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         /* if no error, update proxy texture image parameters */
 | 
			
		||||
         init_texture_image(ctx->Texture.Proxy2D->Image[level],
 | 
			
		||||
         init_texture_image(ctx, ctx->Texture.Proxy2D->Image[level],
 | 
			
		||||
                            width, 1, 1, border, internalFormat);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
@@ -2708,10 +2983,25 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glCompressedTexImage3DARB");
 | 
			
		||||
 | 
			
		||||
   switch (internalFormat) {
 | 
			
		||||
      case GL_COMPRESSED_ALPHA_ARB:
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ARB:
 | 
			
		||||
      case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
 | 
			
		||||
      case GL_COMPRESSED_INTENSITY_ARB:
 | 
			
		||||
      case GL_COMPRESSED_RGB_ARB:
 | 
			
		||||
      case GL_COMPRESSED_RGBA_ARB:
 | 
			
		||||
         gl_error(ctx, GL_INVALID_ENUM, "glCompressedTexImage3DARB");
 | 
			
		||||
         return;
 | 
			
		||||
      default:
 | 
			
		||||
         /* silence compiler warning */
 | 
			
		||||
         ;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (target == GL_TEXTURE_3D) {
 | 
			
		||||
      struct gl_texture_unit *texUnit;
 | 
			
		||||
      struct gl_texture_object *texObj;
 | 
			
		||||
      struct gl_texture_image *texImage;
 | 
			
		||||
      GLsizei computedImageSize;
 | 
			
		||||
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                          GL_NONE, GL_NONE, 1, width, height, depth, border)) {
 | 
			
		||||
@@ -2736,23 +3026,34 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* setup the teximage struct's fields */
 | 
			
		||||
      init_texture_image(texImage, width, height, depth, border, internalFormat);
 | 
			
		||||
      init_texture_image(ctx, texImage, width, height, depth,
 | 
			
		||||
                         border, internalFormat);
 | 
			
		||||
 | 
			
		||||
      /* process the texture image */
 | 
			
		||||
      if (data) {
 | 
			
		||||
         GLboolean retain = GL_TRUE;
 | 
			
		||||
         GLboolean success = GL_FALSE;
 | 
			
		||||
         if (ctx->Driver.CompressedTexImage3D) {
 | 
			
		||||
            success = (*ctx->Driver.CompressedTexImage3D)( ctx, target, level,
 | 
			
		||||
                                              data, texObj, texImage, &retain);
 | 
			
		||||
            success = (*ctx->Driver.CompressedTexImage3D)(ctx, target, level,
 | 
			
		||||
                                                          imageSize, data,
 | 
			
		||||
                                                          texObj, texImage,
 | 
			
		||||
                                                          &retain);
 | 
			
		||||
         }
 | 
			
		||||
         if (retain || !success) {
 | 
			
		||||
            /* make internal copy of the texture image */
 | 
			
		||||
            GLuint imageSize = _mesa_compressed_image_size(internalFormat,
 | 
			
		||||
                                                         width, height, depth);
 | 
			
		||||
            texImage->Data = MALLOC(imageSize);
 | 
			
		||||
            computedImageSize = _mesa_compressed_image_size(ctx,
 | 
			
		||||
                                                            internalFormat,
 | 
			
		||||
                                                            3,  /* num dims */
 | 
			
		||||
                                                            width,
 | 
			
		||||
                                                            height,
 | 
			
		||||
                                                            depth);
 | 
			
		||||
            if (computedImageSize != imageSize) {
 | 
			
		||||
                gl_error(ctx, GL_INVALID_VALUE, "glCompressedTexImage3DARB(imageSize)");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            texImage->Data = MALLOC(computedImageSize);
 | 
			
		||||
            if (texImage->Data) {
 | 
			
		||||
               MEMCPY(texImage->Data, data, imageSize);
 | 
			
		||||
               MEMCPY(texImage->Data, data, computedImageSize);
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         if (!retain && texImage->Data) {
 | 
			
		||||
@@ -2764,8 +3065,9 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
 | 
			
		||||
         make_null_texture(texImage);
 | 
			
		||||
         if (ctx->Driver.CompressedTexImage3D) {
 | 
			
		||||
            GLboolean retain;
 | 
			
		||||
            (*ctx->Driver.CompressedTexImage3D)( ctx, target, level,
 | 
			
		||||
                                    texImage->Data, texObj, texImage, &retain);
 | 
			
		||||
            (*ctx->Driver.CompressedTexImage3D)( ctx, target, level, 0,
 | 
			
		||||
                                                 texImage->Data, texObj,
 | 
			
		||||
                                                 texImage, &retain);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -2775,17 +3077,22 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
 | 
			
		||||
   }
 | 
			
		||||
   else if (target == GL_PROXY_TEXTURE_3D) {
 | 
			
		||||
      /* Proxy texture: check for errors and update proxy state */
 | 
			
		||||
      if (texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                          GL_NONE, GL_NONE, 1, width, height, depth, border)) {
 | 
			
		||||
      GLenum error = texture_error_check(ctx, target, level, internalFormat,
 | 
			
		||||
                            GL_NONE, GL_NONE, 1, width, height, depth, border);
 | 
			
		||||
      if (!error && ctx->Driver.TestProxyTexImage) {
 | 
			
		||||
         error = !(*ctx->Driver.TestProxyTexImage)(ctx, target, level,
 | 
			
		||||
                                             internalFormat, GL_NONE, GL_NONE,
 | 
			
		||||
                                             width, height, depth, border);
 | 
			
		||||
      }
 | 
			
		||||
      if (error) {
 | 
			
		||||
         /* if error, clear all proxy texture image parameters */
 | 
			
		||||
         if (level>=0 && level<ctx->Const.MaxTextureLevels) {
 | 
			
		||||
            MEMSET( ctx->Texture.Proxy3D->Image[level], 0,
 | 
			
		||||
                    sizeof(struct gl_texture_image) );
 | 
			
		||||
            clear_proxy_teximage(ctx->Texture.Proxy3D->Image[level]);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         /* if no error, update proxy texture image parameters */
 | 
			
		||||
         init_texture_image(ctx->Texture.Proxy3D->Image[level],
 | 
			
		||||
         init_texture_image(ctx, ctx->Texture.Proxy3D->Image[level],
 | 
			
		||||
                            width, 1, 1, border, internalFormat);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
@@ -2829,7 +3136,6 @@ _mesa_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset,
 | 
			
		||||
      gl_problem(ctx, "glCompressedTexSubImage1DARB failed!");
 | 
			
		||||
      return;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: teximage.h,v 1.11 2000/06/05 07:28:49 joukj Exp $ */
 | 
			
		||||
/* $Id: teximage.h,v 1.11.4.2 2000/10/16 23:37:16 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -48,7 +48,9 @@ _mesa_free_texture_image( struct gl_texture_image *teximage );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern GLuint
 | 
			
		||||
_mesa_compressed_image_size(GLenum internalFormat,
 | 
			
		||||
_mesa_compressed_image_size(GLcontext *ctx,
 | 
			
		||||
                            GLenum internalFormat,
 | 
			
		||||
                            GLint numDimensions,
 | 
			
		||||
                            GLint width, GLint height, GLint depth);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -63,8 +65,14 @@ _mesa_select_tex_image(GLcontext *ctx, const struct gl_texture_unit *texUnit,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void
 | 
			
		||||
_mesa_get_teximage_from_driver( GLcontext *ctx, GLenum target, GLint level,
 | 
			
		||||
                                const struct gl_texture_object *texObj );
 | 
			
		||||
_mesa_get_teximage_from_driver(GLcontext *ctx, GLenum target, GLint level,
 | 
			
		||||
                               const struct gl_texture_object *texObj);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern GLboolean
 | 
			
		||||
_mesa_get_teximages_from_driver(GLcontext *ctx,
 | 
			
		||||
                                struct gl_texture_object *texObj);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*** API entry point functions ***/
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/* $Id: texobj.c,v 1.23.4.6 2000/10/24 02:52:36 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -62,9 +63,11 @@ gl_alloc_texture_object( struct gl_shared_state *shared, GLuint name,
 | 
			
		||||
 | 
			
		||||
   if (obj) {
 | 
			
		||||
      /* init the non-zero fields */
 | 
			
		||||
      _glthread_INIT_MUTEX(obj->Mutex);
 | 
			
		||||
      obj->RefCount = 1;
 | 
			
		||||
      obj->Name = name;
 | 
			
		||||
      obj->Dimensions = dimensions;
 | 
			
		||||
      obj->Priority = 1.0F;
 | 
			
		||||
      obj->WrapS = GL_REPEAT;
 | 
			
		||||
      obj->WrapT = GL_REPEAT;
 | 
			
		||||
      obj->MinFilter = GL_NEAREST_MIPMAP_LINEAR;
 | 
			
		||||
@@ -155,6 +158,20 @@ void gl_free_texture_object( struct gl_shared_state *shared,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is helpful to diagnose incomplete texture problems.
 | 
			
		||||
 */
 | 
			
		||||
#if 0
 | 
			
		||||
static void
 | 
			
		||||
incomplete(const struct gl_texture_object *t, const char *why)
 | 
			
		||||
{
 | 
			
		||||
   printf("Texture Obj %d incomplete because: %s\n", t->Name, why);
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
#define incomplete(a, b)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Examine a texture object to determine if it is complete or not.
 | 
			
		||||
 * The t->Complete flag will be set to GL_TRUE or GL_FALSE accordingly.
 | 
			
		||||
@@ -169,6 +186,7 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,
 | 
			
		||||
 | 
			
		||||
   /* Always need level zero image */
 | 
			
		||||
   if (!t->Image[baseLevel]) {
 | 
			
		||||
      incomplete(t, "Image[baseLevel] == NULL");
 | 
			
		||||
      t->Complete = GL_FALSE;
 | 
			
		||||
      return;
 | 
			
		||||
   }
 | 
			
		||||
@@ -212,6 +230,7 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,
 | 
			
		||||
          t->NegZ[baseLevel]->Width2 != w ||
 | 
			
		||||
          t->NegZ[baseLevel]->Height2 != h) {
 | 
			
		||||
         t->Complete = GL_FALSE;
 | 
			
		||||
         incomplete(t, "Non-quare cubemap image");
 | 
			
		||||
         return;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
@@ -227,6 +246,7 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,
 | 
			
		||||
 | 
			
		||||
      if (minLevel > maxLevel) {
 | 
			
		||||
         t->Complete = GL_FALSE;
 | 
			
		||||
         incomplete(t, "minLevel > maxLevel");
 | 
			
		||||
         return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -235,10 +255,12 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,
 | 
			
		||||
         if (t->Image[i]) {
 | 
			
		||||
            if (t->Image[i]->Format != t->Image[baseLevel]->Format) {
 | 
			
		||||
               t->Complete = GL_FALSE;
 | 
			
		||||
               incomplete(t, "Format[i] != Format[baseLevel]");
 | 
			
		||||
               return;
 | 
			
		||||
            }
 | 
			
		||||
            if (t->Image[i]->Border != t->Image[baseLevel]->Border) {
 | 
			
		||||
               t->Complete = GL_FALSE;
 | 
			
		||||
               incomplete(t, "Border[i] != Border[baseLevel]");
 | 
			
		||||
               return;
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
@@ -255,10 +277,12 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,
 | 
			
		||||
            if (i >= minLevel && i <= maxLevel) {
 | 
			
		||||
               if (!t->Image[i]) {
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  incomplete(t, "1D Image[i] == NULL");
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
               if (t->Image[i]->Width2 != width ) {
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  incomplete(t, "1D Image[i] bad width");
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
@@ -281,14 +305,17 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,
 | 
			
		||||
            if (i >= minLevel && i <= maxLevel) {
 | 
			
		||||
               if (!t->Image[i]) {
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  incomplete(t, "2D Image[i] == NULL");
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
               if (t->Image[i]->Width2 != width) {
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  incomplete(t, "2D Image[i] bad width");
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
               if (t->Image[i]->Height2 != height) {
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  incomplete(t, "2D Image[i] bad height");
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
               if (width==1 && height==1) {
 | 
			
		||||
@@ -314,19 +341,23 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,
 | 
			
		||||
            }
 | 
			
		||||
            if (i >= minLevel && i <= maxLevel) {
 | 
			
		||||
               if (!t->Image[i]) {
 | 
			
		||||
                  incomplete(t, "3D Image[i] == NULL");
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
               if (t->Image[i]->Width2 != width) {
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  incomplete(t, "3D Image[i] bad width");
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
               if (t->Image[i]->Height2 != height) {
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  incomplete(t, "3D Image[i] bad height");
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
               if (t->Image[i]->Depth2 != depth) {
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  incomplete(t, "3D Image[i] bad depth");
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
@@ -352,6 +383,7 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,
 | 
			
		||||
                   !t->PosY[i]  || !t->NegY[i] ||
 | 
			
		||||
                   !t->PosZ[i]  || !t->NegZ[i]) {
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  incomplete(t, "CubeMap Image[i] == NULL");
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
               /* check that all six images have same size */
 | 
			
		||||
@@ -361,6 +393,7 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,
 | 
			
		||||
                   t->PosZ[i]->Width2!=width || t->PosZ[i]->Height2!=height ||
 | 
			
		||||
                   t->NegZ[i]->Width2!=width || t->NegZ[i]->Height2!=height) {
 | 
			
		||||
                  t->Complete = GL_FALSE;
 | 
			
		||||
                  incomplete(t, "CubeMap Image[i] bad size");
 | 
			
		||||
                  return;
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
@@ -391,11 +424,13 @@ _mesa_GenTextures( GLsizei n, GLuint *texName )
 | 
			
		||||
   GLint i;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGenTextures");
 | 
			
		||||
   if (n<0) {
 | 
			
		||||
   if (n < 0) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_VALUE, "glGenTextures" );
 | 
			
		||||
      return;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (!texName)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   /*
 | 
			
		||||
    * This must be atomic (generation and allocation of texture IDs)
 | 
			
		||||
@@ -432,6 +467,9 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *texName)
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glDeleteTextures");
 | 
			
		||||
 | 
			
		||||
   if (!texName)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   for (i=0;i<n;i++) {
 | 
			
		||||
      struct gl_texture_object *t;
 | 
			
		||||
      if (texName[i]>0) {
 | 
			
		||||
@@ -583,6 +621,8 @@ _mesa_BindTexture( GLenum target, GLuint texName )
 | 
			
		||||
   /* Pass BindTexture call to device driver */
 | 
			
		||||
   if (ctx->Driver.BindTexture) {
 | 
			
		||||
      (*ctx->Driver.BindTexture)( ctx, target, newTexObj );
 | 
			
		||||
      /* Make sure the Driver.UpdateState() function gets called! */
 | 
			
		||||
      ctx->NewState |= NEW_TEXTURING;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (oldTexObj->Name > 0) {
 | 
			
		||||
@@ -610,19 +650,20 @@ _mesa_PrioritizeTextures( GLsizei n, const GLuint *texName,
 | 
			
		||||
   GLint i;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glPrioritizeTextures");
 | 
			
		||||
   if (n<0) {
 | 
			
		||||
   if (n < 0) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_VALUE, "glPrioritizeTextures" );
 | 
			
		||||
      return;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   for (i=0;i<n;i++) {
 | 
			
		||||
      struct gl_texture_object *t;
 | 
			
		||||
      if (texName[i]>0) {
 | 
			
		||||
         t = (struct gl_texture_object *)
 | 
			
		||||
   if (!priorities)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   for (i = 0; i < n; i++) {
 | 
			
		||||
      if (texName[i] > 0) {
 | 
			
		||||
         struct gl_texture_object *t = (struct gl_texture_object *)
 | 
			
		||||
            _mesa_HashLookup(ctx->Shared->TexObjects, texName[i]);
 | 
			
		||||
         if (t) {
 | 
			
		||||
            t->Priority = CLAMP( priorities[i], 0.0F, 1.0F );
 | 
			
		||||
 | 
			
		||||
	    if (ctx->Driver.PrioritizeTexture)
 | 
			
		||||
	       ctx->Driver.PrioritizeTexture( ctx, t, t->Priority );
 | 
			
		||||
         }
 | 
			
		||||
@@ -636,41 +677,47 @@ _mesa_PrioritizeTextures( GLsizei n, const GLuint *texName,
 | 
			
		||||
 * Execute glAreTexturesResident 
 | 
			
		||||
 */
 | 
			
		||||
GLboolean
 | 
			
		||||
_mesa_AreTexturesResident( GLsizei n, const GLuint *texName,
 | 
			
		||||
                           GLboolean *residences )
 | 
			
		||||
_mesa_AreTexturesResident(GLsizei n, const GLuint *texName,
 | 
			
		||||
                          GLboolean *residences)
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLboolean resident = GL_TRUE;
 | 
			
		||||
   GLboolean allResident = GL_TRUE;
 | 
			
		||||
   GLint i;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, 
 | 
			
		||||
						  "glAreTexturesResident",
 | 
			
		||||
						  GL_FALSE);
 | 
			
		||||
   if (n<0) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_VALUE, "glAreTexturesResident(n)" );
 | 
			
		||||
                                            "glAreTexturesResident", GL_FALSE);
 | 
			
		||||
   if (n < 0) {
 | 
			
		||||
      gl_error(ctx, GL_INVALID_VALUE, "glAreTexturesResident(n)");
 | 
			
		||||
      return GL_FALSE;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   for (i=0;i<n;i++) {
 | 
			
		||||
   if (!texName || !residences)
 | 
			
		||||
      return GL_FALSE;
 | 
			
		||||
 | 
			
		||||
   for (i = 0; i < n; i++) {
 | 
			
		||||
      struct gl_texture_object *t;
 | 
			
		||||
      if (texName[i]==0) {
 | 
			
		||||
         gl_error( ctx, GL_INVALID_VALUE, "glAreTexturesResident(textures)" );
 | 
			
		||||
      if (texName[i] == 0) {
 | 
			
		||||
         gl_error(ctx, GL_INVALID_VALUE, "glAreTexturesResident(textures)");
 | 
			
		||||
         return GL_FALSE;
 | 
			
		||||
      }
 | 
			
		||||
      t = (struct gl_texture_object *)
 | 
			
		||||
         _mesa_HashLookup(ctx->Shared->TexObjects, texName[i]);
 | 
			
		||||
      if (t) {
 | 
			
		||||
	 if (ctx->Driver.IsTextureResident)
 | 
			
		||||
	    residences[i] = ctx->Driver.IsTextureResident( ctx, t );
 | 
			
		||||
	 else 
 | 
			
		||||
	 if (ctx->Driver.IsTextureResident) {
 | 
			
		||||
	    residences[i] = ctx->Driver.IsTextureResident(ctx, t);
 | 
			
		||||
            if (!residences[i])
 | 
			
		||||
               allResident = GL_FALSE;
 | 
			
		||||
         }
 | 
			
		||||
	 else {
 | 
			
		||||
	    residences[i] = GL_TRUE;
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         gl_error( ctx, GL_INVALID_VALUE, "glAreTexturesResident(textures)" );
 | 
			
		||||
         gl_error(ctx, GL_INVALID_VALUE, "glAreTexturesResident(textures)");
 | 
			
		||||
         return GL_FALSE;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   return resident;
 | 
			
		||||
   return allResident;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -684,7 +731,7 @@ _mesa_IsTexture( GLuint texture )
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, "glIsTextures",
 | 
			
		||||
						  GL_FALSE);
 | 
			
		||||
   if (texture>0 && _mesa_HashLookup(ctx->Shared->TexObjects, texture)) {
 | 
			
		||||
   if (texture > 0 && _mesa_HashLookup(ctx->Shared->TexObjects, texture)) {
 | 
			
		||||
      return GL_TRUE;
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: texstate.c,v 1.15 2000/07/05 16:14:24 brianp Exp $ */
 | 
			
		||||
/* $Id: texstate.c,v 1.15.4.1 2000/08/01 17:33:51 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -971,7 +971,14 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
 | 
			
		||||
         params[3] = obj->BorderColor[3] / 255.0F;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_TEXTURE_RESIDENT:
 | 
			
		||||
         *params = ENUM_TO_FLOAT(GL_TRUE);
 | 
			
		||||
         {
 | 
			
		||||
            GLboolean resident;
 | 
			
		||||
            if (ctx->Driver.IsTextureResident)
 | 
			
		||||
               resident = ctx->Driver.IsTextureResident(ctx, obj);
 | 
			
		||||
            else
 | 
			
		||||
               resident = GL_TRUE;
 | 
			
		||||
            *params = ENUM_TO_FLOAT(resident);
 | 
			
		||||
         }
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_TEXTURE_PRIORITY:
 | 
			
		||||
         *params = obj->Priority;
 | 
			
		||||
@@ -1039,7 +1046,14 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
 | 
			
		||||
         }
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_TEXTURE_RESIDENT:
 | 
			
		||||
         *params = (GLint) GL_TRUE;
 | 
			
		||||
         {
 | 
			
		||||
            GLboolean resident;
 | 
			
		||||
            if (ctx->Driver.IsTextureResident)
 | 
			
		||||
               resident = ctx->Driver.IsTextureResident(ctx, obj);
 | 
			
		||||
            else
 | 
			
		||||
               resident = GL_TRUE;
 | 
			
		||||
            *params = (GLint) resident;
 | 
			
		||||
         }
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_TEXTURE_PRIORITY:
 | 
			
		||||
         *params = (GLint) obj->Priority;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/* $Id: texutil.c,v 1.5.4.2 2000/09/13 22:06:36 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -80,7 +81,10 @@
 | 
			
		||||
 *   GL_RGBA             GL_UNSIGNED_BYTE                 MESA_A4_R4_G4_B4
 | 
			
		||||
 *   GL_BGRA             GL_UNSIGNED_SHORT_4_4_4_4_REV    MESA_A4_R4_G4_B4
 | 
			
		||||
 *   GL_BGRA             GL_UNSIGHED_SHORT_1_5_5_5_REV    MESA_A1_R5_G5_B5
 | 
			
		||||
 *   GL_RGBA             GL_UNSIGNED_BYTE                 MESA_A1_R5_G5_B5
 | 
			
		||||
 *   GL_BGRA             GL_UNSIGNED_INT_8_8_8_8_REV      MESA_A8_R8_G8_B8
 | 
			
		||||
 *   GL_RGBA             GL_UNSIGNED_BYTE                 MESA_A8_R8_G8_B8
 | 
			
		||||
 *   GL_RGB              GL_UNSIGNED_BYTE                 MESA_A8_R8_G8_B8
 | 
			
		||||
 *   more to be added for new drivers...
 | 
			
		||||
 *
 | 
			
		||||
 * Notes:
 | 
			
		||||
@@ -499,7 +503,7 @@ _mesa_convert_teximage(MesaIntTexFormat dstFormat,
 | 
			
		||||
 | 
			
		||||
      case MESA_A1_R5_G5_B5:
 | 
			
		||||
         /* store as 16-bit texels (GR_TEXFMT_ARGB_1555) */
 | 
			
		||||
         if (srcFormat == GL_RGBA && srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV){
 | 
			
		||||
         if (srcFormat == GL_BGRA && srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV){
 | 
			
		||||
            /* special, optimized case */
 | 
			
		||||
            if (wScale == 1 && hScale == 1) {
 | 
			
		||||
               const GLubyte *src = _mesa_image_address(packing, srcImage,
 | 
			
		||||
@@ -586,6 +590,7 @@ _mesa_convert_teximage(MesaIntTexFormat dstFormat,
 | 
			
		||||
         break;
 | 
			
		||||
 | 
			
		||||
      case MESA_A8_R8_G8_B8:
 | 
			
		||||
      case MESA_FF_R8_G8_B8:
 | 
			
		||||
         /* 32-bit texels */
 | 
			
		||||
         if (srcFormat == GL_BGRA && srcType == GL_UNSIGNED_INT_8_8_8_8_REV){
 | 
			
		||||
            /* special, optimized case */
 | 
			
		||||
@@ -661,13 +666,63 @@ _mesa_convert_teximage(MesaIntTexFormat dstFormat,
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         else if (srcFormat == GL_RGB && srcType == GL_UNSIGNED_BYTE) {
 | 
			
		||||
            /* general case */
 | 
			
		||||
            if (wScale == 1 && hScale == 1) {
 | 
			
		||||
               const GLubyte *src = _mesa_image_address(packing, srcImage,
 | 
			
		||||
                             srcWidth, srcHeight, srcFormat, srcType, 0, 0, 0);
 | 
			
		||||
               const GLint srcStride = _mesa_image_row_stride(packing,
 | 
			
		||||
                                                 srcWidth, srcFormat, srcType);
 | 
			
		||||
               GLuint *dst = dstImage;
 | 
			
		||||
               GLint row;
 | 
			
		||||
               for (row = 0; row < dstHeight; row++) {
 | 
			
		||||
                  GLint col, col3;
 | 
			
		||||
                  for (col = col3 = 0; col < dstWidth; col++, col3 += 3) {
 | 
			
		||||
                     GLubyte r = src[col3 + 0];
 | 
			
		||||
                     GLubyte g = src[col3 + 1];
 | 
			
		||||
                     GLubyte b = src[col3 + 2];
 | 
			
		||||
                     GLubyte a = 255;
 | 
			
		||||
                     dst[col] = (a << 24) | (r << 16) | (g << 8) | b;
 | 
			
		||||
                  }
 | 
			
		||||
                  src += srcStride;
 | 
			
		||||
                  dst = (GLuint *) ((GLubyte *) dst + dstRowStride);
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
               /* must rescale image */
 | 
			
		||||
               GLuint *dst = dstImage;
 | 
			
		||||
               GLint row;
 | 
			
		||||
               for (row = 0; row < dstHeight; row++) {
 | 
			
		||||
                  GLint srcRow = row / hScale;
 | 
			
		||||
                  const GLubyte *src = _mesa_image_address(packing, srcImage,
 | 
			
		||||
                        srcWidth, srcHeight, srcFormat, srcType, 0, srcRow, 0);
 | 
			
		||||
                  GLint col;
 | 
			
		||||
                  for (col = 0; col < dstWidth; col++) {
 | 
			
		||||
                     GLint col3 = (col / wScale) * 3;
 | 
			
		||||
                     GLubyte r = src[col3 + 0];
 | 
			
		||||
                     GLubyte g = src[col3 + 1];
 | 
			
		||||
                     GLubyte b = src[col3 + 2];
 | 
			
		||||
                     GLubyte a = 255;
 | 
			
		||||
                     dst[col] = (a << 24) | (r << 16) | (g << 8) | b;
 | 
			
		||||
                  }
 | 
			
		||||
                  dst = (GLuint *) ((GLubyte *) dst + dstRowStride);
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         else {
 | 
			
		||||
            /* can't handle this source format/type combination */
 | 
			
		||||
            return GL_FALSE;
 | 
			
		||||
         }
 | 
			
		||||
         if (dstFormat == MESA_FF_R8_G8_B8) {
 | 
			
		||||
            /* set alpha bytes to 0xff */
 | 
			
		||||
            GLuint i;
 | 
			
		||||
            GLubyte *dst = (GLubyte *) dstImage;
 | 
			
		||||
            for (i = 0; i < dstWidth * dstHeight; i++) {
 | 
			
		||||
               dst[i * 4 + 3] = 0xff;
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      default:
 | 
			
		||||
         /* unexpected internal format! */
 | 
			
		||||
         return GL_FALSE;
 | 
			
		||||
@@ -1049,7 +1104,7 @@ _mesa_convert_texsubimage(MesaIntTexFormat dstFormat,
 | 
			
		||||
 | 
			
		||||
      case MESA_A1_R5_G5_B5:
 | 
			
		||||
         /* store as 16-bit texels (GR_TEXFMT_ARGB_1555) */
 | 
			
		||||
         if (srcFormat == GL_RGBA && srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV){
 | 
			
		||||
         if (srcFormat == GL_BGRA && srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV){
 | 
			
		||||
            /* special, optimized case */
 | 
			
		||||
            if (wScale == 1 && hScale == 1) {
 | 
			
		||||
               const GLubyte *src = _mesa_image_address(packing, srcImage,
 | 
			
		||||
@@ -1140,6 +1195,7 @@ _mesa_convert_texsubimage(MesaIntTexFormat dstFormat,
 | 
			
		||||
         break;
 | 
			
		||||
 | 
			
		||||
      case MESA_A8_R8_G8_B8:
 | 
			
		||||
      case MESA_FF_R8_G8_B8:
 | 
			
		||||
         /* 32-bit texels */
 | 
			
		||||
         if (srcFormat == GL_BGRA && srcType == GL_UNSIGNED_INT_8_8_8_8_REV){
 | 
			
		||||
            /* special, optimized case */
 | 
			
		||||
@@ -1223,6 +1279,18 @@ _mesa_convert_texsubimage(MesaIntTexFormat dstFormat,
 | 
			
		||||
            /* can't handle this source format/type combination */
 | 
			
		||||
            return GL_FALSE;
 | 
			
		||||
         }
 | 
			
		||||
         if (dstFormat == MESA_FF_R8_G8_B8) {
 | 
			
		||||
            /* set alpha bytes to 0xff */
 | 
			
		||||
            GLint row, col;
 | 
			
		||||
            GLubyte *dst = (GLubyte *) dstImage
 | 
			
		||||
                           + dstYoffset * dstRowStride + dstXoffset;
 | 
			
		||||
            for (row = 0; row < height; row++) {
 | 
			
		||||
               for (col = 0; col < width; col++) {
 | 
			
		||||
                  dst[col * 4 + 3] = 0xff;
 | 
			
		||||
               }
 | 
			
		||||
               dst = dst + dstRowStride;
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1491,6 +1559,7 @@ _mesa_unconvert_teximage(MesaIntTexFormat srcFormat,
 | 
			
		||||
         }
 | 
			
		||||
         break;
 | 
			
		||||
      case MESA_A8_R8_G8_B8:
 | 
			
		||||
      case MESA_FF_R8_G8_B8:
 | 
			
		||||
         ASSERT(dstFormat == GL_RGBA);
 | 
			
		||||
         if (wScale == 1 && hScale == 1) {
 | 
			
		||||
            GLint i, n = dstWidth * dstHeight;
 | 
			
		||||
@@ -1546,6 +1615,7 @@ _mesa_set_teximage_component_sizes(MesaIntTexFormat mesaFormat,
 | 
			
		||||
      { MESA_A4_R4_G4_B4,  4, 4, 4, 4, 0, 0, 0 },
 | 
			
		||||
      { MESA_A1_R5_G5_B5,  5, 5, 5, 1, 0, 0, 0 },
 | 
			
		||||
      { MESA_A8_R8_G8_B8,  8, 8, 8, 8, 0, 0, 0 },
 | 
			
		||||
      { MESA_FF_R8_G8_B8,  8, 8, 8, 8, 0, 0, 0 },
 | 
			
		||||
      { -1,                0, 0, 0, 0, 0, 0, 0 }
 | 
			
		||||
   };
 | 
			
		||||
   GLint i;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/* $Id: texutil.h,v 1.3.4.1 2000/08/29 22:58:33 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -32,6 +33,9 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * NOTE: "FF" means fill with byte value 0xff
 | 
			
		||||
 */
 | 
			
		||||
                           /* msb <------ TEXEL BITS -----------> lsb */
 | 
			
		||||
typedef enum {             /* ---- ---- ---- ---- ---- ---- ---- ---- */
 | 
			
		||||
   MESA_I8,                /*                               IIII IIII */
 | 
			
		||||
@@ -42,7 +46,8 @@ typedef enum {             /* ---- ---- ---- ---- ---- ---- ---- ---- */
 | 
			
		||||
   MESA_R5_G6_B5,          /*                     RRRR RGGG GGGB BBBB */
 | 
			
		||||
   MESA_A4_R4_G4_B4,       /*                     AAAA RRRR GGGG BBBB */
 | 
			
		||||
   MESA_A1_R5_G5_B5,       /*                     ARRR RRGG GGGB BBBB */
 | 
			
		||||
   MESA_A8_R8_G8_B8        /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */
 | 
			
		||||
   MESA_A8_R8_G8_B8,       /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */
 | 
			
		||||
   MESA_FF_R8_G8_B8        /* FFFF FFFF RRRR RRRR GGGG GGGG BBBB BBBB */
 | 
			
		||||
} MesaIntTexFormat;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,21 @@
 | 
			
		||||
/* $Id: 3dnow.c,v 1.5 2000/06/27 22:10:01 brianp Exp $ */
 | 
			
		||||
/* $Id: 3dnow.c,v 1.5.4.3 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * 
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
@@ -24,175 +24,162 @@
 | 
			
		||||
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 3DNow! optimizations contributed by
 | 
			
		||||
 * Holger Waechtler <holger@akaflieg.extern.tu-berlin.de>
 | 
			
		||||
 */
 | 
			
		||||
#if defined(USE_3DNOW_ASM) && defined(USE_X86_ASM)
 | 
			
		||||
#include "3dnow.h"
 | 
			
		||||
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "types.h"
 | 
			
		||||
#include "xform.h"
 | 
			
		||||
#include "vertices.h"
 | 
			
		||||
#include "xform.h"
 | 
			
		||||
#include "3dnow.h"
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
#include "debug_xform.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define XFORM_ARGS	GLvector4f *to_vec,				\
 | 
			
		||||
			const GLfloat m[16],				\
 | 
			
		||||
			const GLvector4f *from_vec,			\
 | 
			
		||||
			const GLubyte *mask,				\
 | 
			
		||||
			const GLubyte flag
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define XFORM_ARGS      GLvector4f *to_vec,             \
 | 
			
		||||
                        const GLfloat m[16],            \
 | 
			
		||||
                        const GLvector4f *from_vec,     \
 | 
			
		||||
                        const GLubyte *mask,            \
 | 
			
		||||
                        const GLubyte flag
 | 
			
		||||
#define DECLARE_XFORM_GROUP( pfx, sz, masked ) \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_general_##masked( XFORM_ARGS );	    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_identity_##masked( XFORM_ARGS );	    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_3d_no_rot_##masked( XFORM_ARGS );    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_perspective_##masked( XFORM_ARGS );  \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_2d_##masked( XFORM_ARGS );	    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_2d_no_rot_##masked( XFORM_ARGS );    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_3d_##masked( XFORM_ARGS );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define ASSIGN_XFORM_GROUP( pfx, cma, sz, masked )			\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_GENERAL] =				\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_general_##masked;		\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_IDENTITY] =				\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_identity_##masked;		\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_3D_NO_ROT] =			\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_3d_no_rot_##masked;		\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_PERSPECTIVE] =			\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_perspective_##masked;		\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_2D] =				\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_2d_##masked;			\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_2D_NO_ROT] =			\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_2d_no_rot_##masked;		\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_3D] =				\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_3d_##masked;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define DECLARE_XFORM_GROUP(pfx, v, masked) \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_points##v##_general_##masked(XFORM_ARGS);    \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_points##v##_identity_##masked(XFORM_ARGS);   \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_points##v##_3d_no_rot_##masked(XFORM_ARGS);  \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_points##v##_perspective_##masked(XFORM_ARGS);\
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_points##v##_2d_##masked(XFORM_ARGS);         \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_points##v##_2d_no_rot_##masked(XFORM_ARGS);  \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_points##v##_3d_##masked(XFORM_ARGS);
 | 
			
		||||
#define NORM_ARGS	const GLmatrix *mat,				\
 | 
			
		||||
			GLfloat scale,					\
 | 
			
		||||
			const GLvector3f *in,				\
 | 
			
		||||
			const GLfloat *lengths,				\
 | 
			
		||||
			const GLubyte mask[],				\
 | 
			
		||||
			GLvector3f *dest
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define ASSIGN_XFORM_GROUP( pfx, cma, vsize, masked )           \
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_GENERAL]                   \
 | 
			
		||||
  = gl##pfx##_transform_points##vsize##_general_##masked;      \
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_IDENTITY]                  \
 | 
			
		||||
  = gl##pfx##_transform_points##vsize##_identity_##masked;     \
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_3D_NO_ROT]                 \
 | 
			
		||||
  = gl##pfx##_transform_points##vsize##_3d_no_rot_##masked;    \
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_PERSPECTIVE]               \
 | 
			
		||||
  = gl##pfx##_transform_points##vsize##_perspective_##masked;  \
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_2D]                        \
 | 
			
		||||
  = gl##pfx##_transform_points##vsize##_2d_##masked;           \
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_2D_NO_ROT]                 \
 | 
			
		||||
  = gl##pfx##_transform_points##vsize##_2d_no_rot_##masked;    \
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_3D]                        \
 | 
			
		||||
  = gl##pfx##_transform_points##vsize##_3d_##masked;
 | 
			
		||||
#define DECLARE_NORM_GROUP( pfx, masked ) \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_rescale_normals_##masked( NORM_ARGS );			    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_normalize_normals_##masked( NORM_ARGS );		    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_normals_##masked( NORM_ARGS );		    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_normals_no_rot_##masked( NORM_ARGS );		    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_rescale_normals_##masked( NORM_ARGS );	    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_rescale_normals_no_rot_##masked( NORM_ARGS );	    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_normalize_normals_##masked( NORM_ARGS );	    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_normalize_normals_no_rot_##masked( NORM_ARGS );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define ASSIGN_NORM_GROUP( pfx, cma, masked )				\
 | 
			
		||||
   gl_normal_tab[NORM_RESCALE][cma] =					\
 | 
			
		||||
      gl_##pfx##_rescale_normals_##masked;				\
 | 
			
		||||
   gl_normal_tab[NORM_NORMALIZE][cma] =					\
 | 
			
		||||
      gl_##pfx##_normalize_normals_##masked;				\
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM][cma] =					\
 | 
			
		||||
      gl_##pfx##_transform_normals_##masked;				\
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM_NO_ROT][cma] =				\
 | 
			
		||||
      gl_##pfx##_transform_normals_no_rot_##masked;			\
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM | NORM_RESCALE][cma] =			\
 | 
			
		||||
      gl_##pfx##_transform_rescale_normals_##masked;			\
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_RESCALE][cma] =		\
 | 
			
		||||
      gl_##pfx##_transform_rescale_normals_no_rot_##masked;		\
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM | NORM_NORMALIZE][cma] =		\
 | 
			
		||||
      gl_##pfx##_transform_normalize_normals_##masked;			\
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_NORMALIZE][cma] =		\
 | 
			
		||||
      gl_##pfx##_transform_normalize_normals_no_rot_##masked;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define NORM_ARGS       const GLmatrix *mat,        \
 | 
			
		||||
                        GLfloat scale,              \
 | 
			
		||||
                        const GLvector3f *in,       \
 | 
			
		||||
                        const GLfloat *lengths,     \
 | 
			
		||||
                        const GLubyte mask[],       \
 | 
			
		||||
                        GLvector3f *dest 
 | 
			
		||||
#ifdef USE_3DNOW_ASM
 | 
			
		||||
DECLARE_XFORM_GROUP( 3dnow, 1, raw )
 | 
			
		||||
DECLARE_XFORM_GROUP( 3dnow, 2, raw )
 | 
			
		||||
DECLARE_XFORM_GROUP( 3dnow, 3, raw )
 | 
			
		||||
DECLARE_XFORM_GROUP( 3dnow, 4, raw )
 | 
			
		||||
 | 
			
		||||
DECLARE_XFORM_GROUP( 3dnow, 1, masked )
 | 
			
		||||
DECLARE_XFORM_GROUP( 3dnow, 2, masked )
 | 
			
		||||
DECLARE_XFORM_GROUP( 3dnow, 3, masked )
 | 
			
		||||
DECLARE_XFORM_GROUP( 3dnow, 4, masked )
 | 
			
		||||
 | 
			
		||||
DECLARE_NORM_GROUP( 3dnow, raw )
 | 
			
		||||
/*DECLARE_NORM_GROUP( 3dnow, masked )*/
 | 
			
		||||
 | 
			
		||||
#define DECLARE_NORM_GROUP(pfx, masked)                                        \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_rescale_normals_##masked## (NORM_ARGS);                \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_normalize_normals_##masked## (NORM_ARGS);              \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_normals_##masked## (NORM_ARGS);              \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_normals_no_rot_##masked## (NORM_ARGS);       \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_rescale_normals_##masked## (NORM_ARGS);      \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_rescale_normals_no_rot_##masked## (NORM_ARGS); \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_normalize_normals_##masked## (NORM_ARGS);    \
 | 
			
		||||
 extern void _ASMAPI gl##pfx##_transform_normalize_normals_no_rot_##masked## (NORM_ARGS);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define ASSIGN_NORM_GROUP( pfx, cma, masked )                                 \
 | 
			
		||||
   gl_normal_tab[NORM_RESCALE][cma]   =                                       \
 | 
			
		||||
      gl##pfx##_rescale_normals_##masked##;                                  \
 | 
			
		||||
   gl_normal_tab[NORM_NORMALIZE][cma] =                                       \
 | 
			
		||||
      gl##pfx##_normalize_normals_##masked##;                                \
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM][cma] =                                       \
 | 
			
		||||
      gl##pfx##_transform_normals_##masked##;                                \
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM_NO_ROT][cma] =                                \
 | 
			
		||||
      gl##pfx##_transform_normals_no_rot_##masked##;                         \
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM | NORM_RESCALE][cma] =                        \
 | 
			
		||||
      gl##pfx##_transform_rescale_normals_##masked##;                        \
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_RESCALE][cma] =                 \
 | 
			
		||||
      gl##pfx##_transform_rescale_normals_no_rot_##masked##;                 \
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM | NORM_NORMALIZE][cma] =                      \
 | 
			
		||||
      gl##pfx##_transform_normalize_normals_##masked##;                      \
 | 
			
		||||
   gl_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_NORMALIZE][cma] =               \
 | 
			
		||||
	  gl##pfx##_transform_normalize_normals_no_rot_##masked##;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void _ASMAPI gl_3dnow_project_vertices( GLfloat *first,
 | 
			
		||||
				       GLfloat *last,
 | 
			
		||||
				       const GLfloat *m,
 | 
			
		||||
				       GLuint stride );
 | 
			
		||||
 | 
			
		||||
extern void _ASMAPI gl_3dnow_project_clipped_vertices( GLfloat *first,
 | 
			
		||||
					       GLfloat *last,
 | 
			
		||||
					       const GLfloat *m,
 | 
			
		||||
					       GLuint stride,
 | 
			
		||||
					       const GLubyte *clipmask );
 | 
			
		||||
 | 
			
		||||
extern void _ASMAPI gl_v16_3dnow_general_xform( GLfloat *first_vert,
 | 
			
		||||
					const GLfloat *m,
 | 
			
		||||
					const GLfloat *src,
 | 
			
		||||
					GLuint src_stride,
 | 
			
		||||
					GLuint count );
 | 
			
		||||
						const GLfloat *m,
 | 
			
		||||
						const GLfloat *src,
 | 
			
		||||
						GLuint src_stride,
 | 
			
		||||
						GLuint count );
 | 
			
		||||
 | 
			
		||||
void gl_init_3dnow_asm_transforms (void)
 | 
			
		||||
extern void _ASMAPI gl_3dnow_project_vertices( GLfloat *first,
 | 
			
		||||
					       GLfloat *last,
 | 
			
		||||
					       const GLfloat *m,
 | 
			
		||||
					       GLuint stride );
 | 
			
		||||
 | 
			
		||||
extern void _ASMAPI gl_3dnow_project_clipped_vertices( GLfloat *first,
 | 
			
		||||
						       GLfloat *last,
 | 
			
		||||
						       const GLfloat *m,
 | 
			
		||||
						       GLuint stride,
 | 
			
		||||
						       const GLubyte *clipmask );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_init_3dnow_transform_asm( void )
 | 
			
		||||
{
 | 
			
		||||
   DECLARE_XFORM_GROUP( _3dnow, 1, raw )
 | 
			
		||||
   DECLARE_XFORM_GROUP( _3dnow, 2, raw )
 | 
			
		||||
   DECLARE_XFORM_GROUP( _3dnow, 3, raw )
 | 
			
		||||
   DECLARE_XFORM_GROUP( _3dnow, 4, raw )
 | 
			
		||||
#ifdef USE_3DNOW_ASM
 | 
			
		||||
   ASSIGN_XFORM_GROUP( 3dnow, 0, 1, raw );
 | 
			
		||||
   ASSIGN_XFORM_GROUP( 3dnow, 0, 2, raw );
 | 
			
		||||
   ASSIGN_XFORM_GROUP( 3dnow, 0, 3, raw );
 | 
			
		||||
   ASSIGN_XFORM_GROUP( 3dnow, 0, 4, raw );
 | 
			
		||||
 | 
			
		||||
   DECLARE_XFORM_GROUP( _3dnow, 1, masked )
 | 
			
		||||
   DECLARE_XFORM_GROUP( _3dnow, 2, masked )
 | 
			
		||||
   DECLARE_XFORM_GROUP( _3dnow, 3, masked )
 | 
			
		||||
   DECLARE_XFORM_GROUP( _3dnow, 4, masked )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 1, masked );
 | 
			
		||||
   ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 2, masked );
 | 
			
		||||
   ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 3, masked );
 | 
			
		||||
   ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 4, masked );
 | 
			
		||||
 | 
			
		||||
   DECLARE_NORM_GROUP( _3dnow, raw )
 | 
			
		||||
/* DECLARE_NORM_GROUP( _3dnow, masked )
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
   ASSIGN_XFORM_GROUP( _3dnow, 0, 1, raw )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( _3dnow, 0, 2, raw )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( _3dnow, 0, 3, raw )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( _3dnow, 0, 4, raw )
 | 
			
		||||
 | 
			
		||||
   ASSIGN_XFORM_GROUP( _3dnow, CULL_MASK_ACTIVE, 1, masked )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( _3dnow, CULL_MASK_ACTIVE, 2, masked )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( _3dnow, CULL_MASK_ACTIVE, 3, masked )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( _3dnow, CULL_MASK_ACTIVE, 4, masked )
 | 
			
		||||
 | 
			
		||||
   ASSIGN_NORM_GROUP( _3dnow, 0, raw )
 | 
			
		||||
/* ASSIGN_NORM_GROUP( _3dnow, CULL_MASK_ACTIVE, masked )
 | 
			
		||||
*/
 | 
			
		||||
   ASSIGN_NORM_GROUP( 3dnow, 0, raw );
 | 
			
		||||
/* ASSIGN_NORM_GROUP( 3dnow, CULL_MASK_ACTIVE, masked ); */
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
   gl_test_all_transform_functions("3Dnow!");
 | 
			
		||||
   gl_test_all_normal_transform_functions("3Dnow!");
 | 
			
		||||
   gl_test_all_transform_functions( "3DNow!" );
 | 
			
		||||
   gl_test_all_normal_transform_functions( "3DNow!" );
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
   /* Hook in some stuff for vertices.c.
 | 
			
		||||
    */
 | 
			
		||||
   gl_xform_points3_v16_general = gl_v16_3dnow_general_xform;
 | 
			
		||||
   gl_project_v16 = gl_3dnow_project_vertices;
 | 
			
		||||
   gl_project_clipped_v16 = gl_3dnow_project_clipped_vertices;
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* silence compiler warning */
 | 
			
		||||
extern void _mesa_3dnow_dummy_function(void);
 | 
			
		||||
void _mesa_3dnow_dummy_function(void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void gl_init_3dnow_vertex_asm( void )
 | 
			
		||||
{
 | 
			
		||||
#ifdef USE_3DNOW_ASM
 | 
			
		||||
   gl_xform_points3_v16_general	= gl_v16_3dnow_general_xform;
 | 
			
		||||
   gl_project_v16		= gl_3dnow_project_vertices;
 | 
			
		||||
   gl_project_clipped_v16	= gl_3dnow_project_clipped_vertices;
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
   gl_test_all_vertex_functions( "3DNow!" );
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,21 @@
 | 
			
		||||
/* $Id: 3dnow.h,v 1.1 1999/08/19 00:55:42 jtg Exp $ */
 | 
			
		||||
/* $Id: 3dnow.h,v 1.1.1.1.6.1 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
@@ -24,72 +24,17 @@
 | 
			
		||||
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 3DNow! optimizations contributed by
 | 
			
		||||
 * Holger Waechtler <holger@akaflieg.extern.tu-berlin.de>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef _3dnow_h
 | 
			
		||||
#define _3dnow_h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __3DNOW_H__
 | 
			
		||||
#define __3DNOW_H__
 | 
			
		||||
 | 
			
		||||
#include "xform.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_init_3dnow_asm_transforms (void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
GLvector4f *gl_project_points( GLvector4f *proj_vec,
 | 
			
		||||
                               const GLvector4f *clip_vec )
 | 
			
		||||
{
 | 
			
		||||
   __asm__ (
 | 
			
		||||
   "   femms                                                              \n"
 | 
			
		||||
   "                                                                      \n"
 | 
			
		||||
   "   movq       (%0),     %%mm0      # x1             | x0              \n"
 | 
			
		||||
   "   movq       8(%0),    %%mm1      # oow            | x2              \n"
 | 
			
		||||
   "                                                                      \n"
 | 
			
		||||
   "1: movq       %%mm1,    %%mm2      # oow            | x2              \n"
 | 
			
		||||
   "   addl       %2,       %0         # next point                       \n"
 | 
			
		||||
   "                                                                      \n"
 | 
			
		||||
   "   punpckhdq  %%mm2,    %%mm2      # oow            | oow             \n"
 | 
			
		||||
   "   addl       $16,      %1         # next point                       \n"
 | 
			
		||||
   "                                                                      \n"
 | 
			
		||||
   "   pfrcp      %%mm2,    %%mm3      # 1/oow          | 1/oow           \n"
 | 
			
		||||
   "   decl       %3                                                      \n"
 | 
			
		||||
   "                                                                      \n"
 | 
			
		||||
   "   pfmul      %%mm3,    %%mm0      # x1/oow         | x0/oow          \n"
 | 
			
		||||
   "   movq       %%mm0,    -16(%1)    # write r0, r1                     \n"
 | 
			
		||||
   "                                                                      \n"
 | 
			
		||||
   "   pfmul      %%mm3,    %%mm1      # 1              | x2/oow          \n"
 | 
			
		||||
   "   movq       (%0),     %%mm0      # x1             | x0              \n"
 | 
			
		||||
   "                                                                      \n"
 | 
			
		||||
   "   movd       %%mm1,    8(%1)      # write r2                         \n"
 | 
			
		||||
   "   movd       %%mm3,    12(%1)     # write r3                         \n"
 | 
			
		||||
   "                                                                      \n"
 | 
			
		||||
   "   movq       8(%0),    %%mm1      # oow            | x2              \n"
 | 
			
		||||
   "   ja         1b                                                      \n"
 | 
			
		||||
   "                                                                      \n"
 | 
			
		||||
   "   femms                                                              \n"
 | 
			
		||||
   "                                                                        "
 | 
			
		||||
   ::"a" (clip_vec->start),
 | 
			
		||||
   "c" (proj_vec->start),
 | 
			
		||||
   "g" (clip_vec->stride),
 | 
			
		||||
   "d" (clip_vec->count)
 | 
			
		||||
   );
 | 
			
		||||
 | 
			
		||||
   proj_vec->flags |= VEC_SIZE_4;
 | 
			
		||||
   proj_vec->size = 3;
 | 
			
		||||
   proj_vec->count = clip_vec->count;
 | 
			
		||||
   return proj_vec;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_init_3dnow_transform_asm( void );
 | 
			
		||||
void gl_init_3dnow_vertex_asm( void );
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										76
									
								
								src/mesa/x86/clip_args.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/mesa/x86/clip_args.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
/* $Id: clip_args.h,v 1.1.2.1 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | 
			
		||||
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 | 
			
		||||
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Clip test function interface for assembly code.  Simply define
 | 
			
		||||
 * FRAME_OFFSET to the number of bytes pushed onto the stack before
 | 
			
		||||
 * using the ARG_* argument macros.
 | 
			
		||||
 *
 | 
			
		||||
 * Gareth Hughes <gareth@valinux.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CLIP_ARGS_H__
 | 
			
		||||
#define __CLIP_ARGS_H__
 | 
			
		||||
 | 
			
		||||
/* Offsets into GLvector4f
 | 
			
		||||
 */
 | 
			
		||||
#define V4F_DATA	0
 | 
			
		||||
#define V4F_START	4
 | 
			
		||||
#define V4F_COUNT	8
 | 
			
		||||
#define V4F_STRIDE	12
 | 
			
		||||
#define V4F_SIZE	16
 | 
			
		||||
#define V4F_FLAGS	20
 | 
			
		||||
 | 
			
		||||
/* GLvector4f flags
 | 
			
		||||
 */
 | 
			
		||||
#define VEC_SIZE_1	1
 | 
			
		||||
#define VEC_SIZE_2	3
 | 
			
		||||
#define VEC_SIZE_3	7
 | 
			
		||||
#define VEC_SIZE_4	15
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Offsets for clip_func arguments
 | 
			
		||||
 *
 | 
			
		||||
 * typedef GLvector4f *(*clip_func)( GLvector4f *vClip,
 | 
			
		||||
 *	                             GLvector4f *vProj,
 | 
			
		||||
 *	                             GLubyte clipMask[],
 | 
			
		||||
 *	                             GLubyte *orMask,
 | 
			
		||||
 *	                             GLubyte *andMask );
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define OFFSET_SOURCE	4
 | 
			
		||||
#define OFFSET_DEST	8
 | 
			
		||||
#define OFFSET_CLIP	12
 | 
			
		||||
#define OFFSET_OR	16
 | 
			
		||||
#define OFFSET_AND	20
 | 
			
		||||
 | 
			
		||||
#define ARG_SOURCE	REGOFF(FRAME_OFFSET+OFFSET_SOURCE, ESP)
 | 
			
		||||
#define ARG_DEST	REGOFF(FRAME_OFFSET+OFFSET_DEST, ESP)
 | 
			
		||||
#define ARG_CLIP	REGOFF(FRAME_OFFSET+OFFSET_CLIP, ESP)
 | 
			
		||||
#define ARG_OR		REGOFF(FRAME_OFFSET+OFFSET_OR, ESP)
 | 
			
		||||
#define ARG_AND		REGOFF(FRAME_OFFSET+OFFSET_AND, ESP)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,21 +1,21 @@
 | 
			
		||||
/* $Id: common_x86.c,v 1.6 2000/01/25 17:04:47 brianp Exp $ */
 | 
			
		||||
/* $Id: common_x86.c,v 1.6.4.2 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * 
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
@@ -26,81 +26,102 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *  Check CPU capabilities & initialize optimized funtions for this particular
 | 
			
		||||
 *   processor.
 | 
			
		||||
 * Check CPU capabilities & initialize optimized funtions for this particular
 | 
			
		||||
 * processor.
 | 
			
		||||
 *
 | 
			
		||||
 *  Written by Holger Waechtler <holger@akaflieg.extern.tu-berlin.de>
 | 
			
		||||
 *  Changed by Andre Werthmann <wertmann@cs.uni-potsdam.de> for using the
 | 
			
		||||
 *  new Katmai functions
 | 
			
		||||
 * Written by Holger Waechtler <holger@akaflieg.extern.tu-berlin.de>
 | 
			
		||||
 * Changed by Andre Werthmann <wertmann@cs.uni-potsdam.de> for using the
 | 
			
		||||
 * new Katmai functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "common_x86asm.h"
 | 
			
		||||
 | 
			
		||||
#include "common_x86_asm.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int gl_x86_cpu_features = 0;
 | 
			
		||||
 | 
			
		||||
static void message(const char *msg)
 | 
			
		||||
/* No reason for this to be public.
 | 
			
		||||
 */
 | 
			
		||||
extern int gl_identify_x86_cpu_features( void );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void message( const char *msg )
 | 
			
		||||
{
 | 
			
		||||
   if (getenv("MESA_DEBUG"))
 | 
			
		||||
      fprintf(stderr, "%s\n", msg);
 | 
			
		||||
   if ( getenv( "MESA_DEBUG" ) ) {
 | 
			
		||||
      fprintf( stderr, "%s\n", msg );
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_init_all_x86_asm (void)
 | 
			
		||||
void gl_init_all_x86_transform_asm( void )
 | 
			
		||||
{
 | 
			
		||||
#ifdef USE_X86_ASM
 | 
			
		||||
   gl_x86_cpu_features = gl_identify_x86_cpu_features ();
 | 
			
		||||
   gl_x86_cpu_features |= GL_CPU_AnyX86;
 | 
			
		||||
   gl_x86_cpu_features = gl_identify_x86_cpu_features();
 | 
			
		||||
 | 
			
		||||
   if (getenv("MESA_NO_ASM") != 0)
 | 
			
		||||
   if ( getenv( "MESA_NO_ASM" ) ) {
 | 
			
		||||
      gl_x86_cpu_features = 0;
 | 
			
		||||
 | 
			
		||||
   if (gl_x86_cpu_features & GL_CPU_GenuineIntel) {
 | 
			
		||||
      message("GenuineIntel cpu detected.");
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (gl_x86_cpu_features) {
 | 
			
		||||
      gl_init_x86_asm_transforms ();
 | 
			
		||||
   if ( gl_x86_cpu_features ) {
 | 
			
		||||
      gl_init_x86_transform_asm();
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
#ifdef USE_MMX_ASM
 | 
			
		||||
   if (gl_x86_cpu_features & GL_CPU_MMX) {
 | 
			
		||||
      char *s = getenv( "MESA_NO_MMX" );
 | 
			
		||||
      if (s == NULL) { 
 | 
			
		||||
         message("MMX cpu detected.");
 | 
			
		||||
   if ( cpu_has_mmx ) {
 | 
			
		||||
      if ( getenv( "MESA_NO_MMX" ) == 0 ) {
 | 
			
		||||
         message( "MMX cpu detected." );
 | 
			
		||||
      } else {
 | 
			
		||||
         gl_x86_cpu_features &= (~GL_CPU_MMX); 
 | 
			
		||||
         gl_x86_cpu_features &= ~(X86_FEATURE_MMX);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef USE_3DNOW_ASM
 | 
			
		||||
   if (gl_x86_cpu_features & GL_CPU_3Dnow) {
 | 
			
		||||
      char *s = getenv( "MESA_NO_3DNOW" );
 | 
			
		||||
      if (s == NULL) {
 | 
			
		||||
         message("3Dnow cpu detected.");
 | 
			
		||||
         gl_init_3dnow_asm_transforms ();
 | 
			
		||||
   if ( cpu_has_3dnow ) {
 | 
			
		||||
      if ( getenv( "MESA_NO_3DNOW" ) == 0 ) {
 | 
			
		||||
         message( "3Dnow cpu detected." );
 | 
			
		||||
         gl_init_3dnow_transform_asm();
 | 
			
		||||
      } else {
 | 
			
		||||
         gl_x86_cpu_features &= (~GL_CPU_3Dnow); 
 | 
			
		||||
         gl_x86_cpu_features &= ~(X86_FEATURE_3DNOW);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef USE_KATMAI_ASM
 | 
			
		||||
   if (gl_x86_cpu_features & GL_CPU_Katmai) {
 | 
			
		||||
      char *s = getenv( "MESA_NO_KATMAI" );
 | 
			
		||||
      if (s == NULL) {
 | 
			
		||||
         message("Katmai cpu detected.");
 | 
			
		||||
         gl_init_katmai_asm_transforms ();
 | 
			
		||||
   if ( cpu_has_xmm ) {
 | 
			
		||||
      if ( getenv( "MESA_NO_KATMAI" ) == 0 ) {
 | 
			
		||||
         message( "Katmai cpu detected." );
 | 
			
		||||
         gl_init_katmai_transform_asm();
 | 
			
		||||
      } else {
 | 
			
		||||
         gl_x86_cpu_features &= (~GL_CPU_Katmai); 
 | 
			
		||||
         gl_x86_cpu_features &= ~(X86_FEATURE_XMM);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Note: the above function must be called before this one, so that
 | 
			
		||||
 * gl_x86_cpu_features gets correctly initialized.
 | 
			
		||||
 */
 | 
			
		||||
void gl_init_all_x86_vertex_asm( void )
 | 
			
		||||
{
 | 
			
		||||
#ifdef USE_X86_ASM
 | 
			
		||||
   if ( gl_x86_cpu_features ) {
 | 
			
		||||
      gl_init_x86_vertex_asm();
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
#ifdef USE_3DNOW_ASM
 | 
			
		||||
   if ( cpu_has_3dnow && getenv( "MESA_NO_3DNOW" ) == 0 ) {
 | 
			
		||||
      gl_init_3dnow_vertex_asm();
 | 
			
		||||
   }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef USE_KATMAI_ASM
 | 
			
		||||
   if ( cpu_has_xmm && getenv( "MESA_NO_KATMAI" ) == 0 ) {
 | 
			
		||||
      gl_init_katmai_vertex_asm();
 | 
			
		||||
   }
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										152
									
								
								src/mesa/x86/common_x86_asm.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								src/mesa/x86/common_x86_asm.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,152 @@
 | 
			
		||||
/* $Id: common_x86_asm.S,v 1.1.2.1 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | 
			
		||||
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 | 
			
		||||
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Check extended CPU capabilities.  Now justs returns the raw CPUID
 | 
			
		||||
 * feature information, allowing the higher level code to interpret the
 | 
			
		||||
 * results.
 | 
			
		||||
 *
 | 
			
		||||
 * Written by Holger Waechtler <holger@akaflieg.extern.tu-berlin.de>
 | 
			
		||||
 *
 | 
			
		||||
 * Cleaned up and simplified by Gareth Hughes <gareth@valinux.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "assyntax.h"
 | 
			
		||||
#include "common_x86_features.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Intel vendor string
 | 
			
		||||
 */
 | 
			
		||||
#define GENU	0x756e6547	/* "Genu" */
 | 
			
		||||
#define INEI	0x49656e69	/* "ineI" */
 | 
			
		||||
#define NTEL	0x6c65746e	/* "ntel" */
 | 
			
		||||
 | 
			
		||||
/* AMD vendor string
 | 
			
		||||
 */
 | 
			
		||||
#define AUTH	0x68747541	/* "Auth" */
 | 
			
		||||
#define ENTI	0x69746e65	/* "enti" */
 | 
			
		||||
#define CAMD	0x444d4163	/* "cAMD" */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	SEG_DATA
 | 
			
		||||
 | 
			
		||||
/* We might want to print out some useful messages.
 | 
			
		||||
 */
 | 
			
		||||
LLBL( found_intel ):	STRING( "Genuine Intel processor found\n\0" )
 | 
			
		||||
LLBL( found_amd ):	STRING( "Authentic AMD processor found\n\0" )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	SEG_TEXT
 | 
			
		||||
 | 
			
		||||
ALIGNTEXT4
 | 
			
		||||
GLOBL GLNAME( gl_identify_x86_cpu_features )
 | 
			
		||||
GLNAME( gl_identify_x86_cpu_features ):
 | 
			
		||||
 | 
			
		||||
	PUSH_L	( EBX )
 | 
			
		||||
 | 
			
		||||
	/* Test for the CPUID command.  If the ID Flag bit in EFLAGS
 | 
			
		||||
	 * (bit 21) is writable, the CPUID command is present.
 | 
			
		||||
	 */
 | 
			
		||||
	PUSHF_L
 | 
			
		||||
	POP_L	( EAX )
 | 
			
		||||
	MOV_L	( EAX, ECX )
 | 
			
		||||
	XOR_L	( CONST(0x00200000), EAX )
 | 
			
		||||
	PUSH_L	( EAX )
 | 
			
		||||
	POPF_L
 | 
			
		||||
	PUSHF_L
 | 
			
		||||
	POP_L	( EAX )
 | 
			
		||||
 | 
			
		||||
	/* Verify the ID Flag bit has been written.
 | 
			
		||||
	 */
 | 
			
		||||
	CMP_L	( ECX, EAX )
 | 
			
		||||
	JZ	( LLBL ( cpuid_done ) )
 | 
			
		||||
 | 
			
		||||
	/* Get the CPU vendor info.
 | 
			
		||||
	 */
 | 
			
		||||
	XOR_L	( EAX, EAX )
 | 
			
		||||
	CPUID
 | 
			
		||||
 | 
			
		||||
	/* Test for Intel processors.  We must look for the
 | 
			
		||||
	 * "GenuineIntel" string in EBX, ECX and EDX.
 | 
			
		||||
	 */
 | 
			
		||||
	CMP_L	( CONST(GENU), EBX )
 | 
			
		||||
	JNE	( LLBL( cpuid_amd ) )
 | 
			
		||||
	CMP_L	( CONST(INEI), EDX )
 | 
			
		||||
	JNE	( LLBL( cpuid_amd ) )
 | 
			
		||||
	CMP_L	( CONST(NTEL), ECX )
 | 
			
		||||
	JNE	( LLBL( cpuid_amd ) )
 | 
			
		||||
 | 
			
		||||
	/* We have an Intel processor, so we can get the feature
 | 
			
		||||
	 * information with an CPUID input value of 1.
 | 
			
		||||
	 */
 | 
			
		||||
	MOV_L	( CONST(0x1), EAX )
 | 
			
		||||
	CPUID
 | 
			
		||||
	MOV_L	( EDX, EAX )
 | 
			
		||||
	JMP	( LLBL( cpuid_done ) )
 | 
			
		||||
 | 
			
		||||
LLBL( cpuid_amd ):
 | 
			
		||||
 | 
			
		||||
	/* Test for AMD processors.  We must look for the
 | 
			
		||||
	 * "AuthenticAMD" string in EBX, ECX and EDX.
 | 
			
		||||
	 */
 | 
			
		||||
	CMP_L	( CONST(AUTH), EBX )
 | 
			
		||||
	JNE	( LLBL( cpuid_other ) )
 | 
			
		||||
	CMP_L	( CONST(ENTI), EDX )
 | 
			
		||||
	JNE	( LLBL( cpuid_other ) )
 | 
			
		||||
	CMP_L	( CONST(CAMD), ECX )
 | 
			
		||||
	JNE	( LLBL( cpuid_other ) )
 | 
			
		||||
 | 
			
		||||
	/* We have an AMD processor, so we can get the feature
 | 
			
		||||
	 * information after we verify that the extended functions are
 | 
			
		||||
	 * supported.
 | 
			
		||||
	 */
 | 
			
		||||
	MOV_L	( CONST(0x80000000), EAX )
 | 
			
		||||
	CPUID
 | 
			
		||||
	TEST_L	( EAX, EAX )
 | 
			
		||||
	JZ	( LLBL ( cpuid_failed ) )
 | 
			
		||||
 | 
			
		||||
	MOV_L	( CONST(0x80000001), EAX )
 | 
			
		||||
	CPUID
 | 
			
		||||
	MOV_L	( EDX, EAX )
 | 
			
		||||
	JMP	( LLBL ( cpuid_done ) )
 | 
			
		||||
 | 
			
		||||
LLBL( cpuid_other ):
 | 
			
		||||
 | 
			
		||||
	/* Test for other processors here when required.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
LLBL( cpuid_failed ):
 | 
			
		||||
 | 
			
		||||
	/* If we can't determine the feature information, we must
 | 
			
		||||
	 * return zero to indicate that no platform-specific
 | 
			
		||||
	 * optimizations can be used.
 | 
			
		||||
	 */
 | 
			
		||||
	MOV_L	( CONST(0), EAX )
 | 
			
		||||
 | 
			
		||||
LLBL ( cpuid_done ):
 | 
			
		||||
 | 
			
		||||
	POP_L	( EBX )
 | 
			
		||||
	RET
 | 
			
		||||
							
								
								
									
										63
									
								
								src/mesa/x86/common_x86_asm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								src/mesa/x86/common_x86_asm.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
/* $Id: common_x86_asm.h,v 1.1.2.1 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | 
			
		||||
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 | 
			
		||||
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Check CPU capabilities & initialize optimized funtions for this particular
 | 
			
		||||
 * processor.
 | 
			
		||||
 *
 | 
			
		||||
 * Written by Holger Waechtler <holger@akaflieg.extern.tu-berlin.de>
 | 
			
		||||
 * Changed by Andre Werthmann <wertmann@cs.uni-potsdam.de> for using the
 | 
			
		||||
 * new Katmai functions
 | 
			
		||||
 *
 | 
			
		||||
 * Reimplemented by Gareth Hughes <gareth@valinux.com> in a more
 | 
			
		||||
 * future-proof manner, based on code in the Linux kernel.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __COMMON_X86_ASM_H__
 | 
			
		||||
#define __COMMON_X86_ASM_H__
 | 
			
		||||
 | 
			
		||||
#include "common_x86_features.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "conf.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef USE_X86_ASM
 | 
			
		||||
#include "x86.h"
 | 
			
		||||
#ifdef USE_3DNOW_ASM
 | 
			
		||||
#include "3dnow.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_KATMAI_ASM
 | 
			
		||||
#include "katmai.h"
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
extern int gl_x86_cpu_features;
 | 
			
		||||
 | 
			
		||||
extern void gl_init_all_x86_transform_asm( void );
 | 
			
		||||
extern void gl_init_all_x86_vertex_asm( void );
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										77
									
								
								src/mesa/x86/common_x86_features.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								src/mesa/x86/common_x86_features.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
			
		||||
/* $Id: common_x86_features.h,v 1.1.2.1 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | 
			
		||||
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 | 
			
		||||
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * x86 CPUID feature information.  The raw data is returned by
 | 
			
		||||
 * gl_identify_x86_cpu_features() and interpreted with the cpu_has_*
 | 
			
		||||
 * helper macros.
 | 
			
		||||
 *
 | 
			
		||||
 * Gareth Hughes <gareth@valinux.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __COMMON_X86_FEATURES_H__
 | 
			
		||||
#define __COMMON_X86_FEATURES_H__
 | 
			
		||||
 | 
			
		||||
/* Capabilities of CPUs
 | 
			
		||||
 */
 | 
			
		||||
#define X86_FEATURE_FPU		0x00000001
 | 
			
		||||
#define X86_FEATURE_VME		0x00000002
 | 
			
		||||
#define X86_FEATURE_DE		0x00000004
 | 
			
		||||
#define X86_FEATURE_PSE		0x00000008
 | 
			
		||||
#define X86_FEATURE_TSC		0x00000010
 | 
			
		||||
#define X86_FEATURE_MSR		0x00000020
 | 
			
		||||
#define X86_FEATURE_PAE		0x00000040
 | 
			
		||||
#define X86_FEATURE_MCE		0x00000080
 | 
			
		||||
#define X86_FEATURE_CX8		0x00000100
 | 
			
		||||
#define X86_FEATURE_APIC	0x00000200
 | 
			
		||||
#define X86_FEATURE_10		0x00000400
 | 
			
		||||
#define X86_FEATURE_SEP		0x00000800
 | 
			
		||||
#define X86_FEATURE_MTRR	0x00001000
 | 
			
		||||
#define X86_FEATURE_PGE		0x00002000
 | 
			
		||||
#define X86_FEATURE_MCA		0x00004000
 | 
			
		||||
#define X86_FEATURE_CMOV	0x00008000
 | 
			
		||||
#define X86_FEATURE_PAT		0x00010000
 | 
			
		||||
#define X86_FEATURE_PSE36	0x00020000
 | 
			
		||||
#define X86_FEATURE_18		0x00040000
 | 
			
		||||
#define X86_FEATURE_19		0x00080000
 | 
			
		||||
#define X86_FEATURE_20		0x00100000
 | 
			
		||||
#define X86_FEATURE_21		0x00200000
 | 
			
		||||
#define X86_FEATURE_MMXEXT	0x00400000
 | 
			
		||||
#define X86_FEATURE_MMX		0x00800000
 | 
			
		||||
#define X86_FEATURE_FXSR	0x01000000
 | 
			
		||||
#define X86_FEATURE_XMM		0x02000000
 | 
			
		||||
#define X86_FEATURE_26		0x04000000
 | 
			
		||||
#define X86_FEATURE_27		0x08000000
 | 
			
		||||
#define X86_FEATURE_28		0x10000000
 | 
			
		||||
#define X86_FEATURE_29		0x20000000
 | 
			
		||||
#define X86_FEATURE_3DNOWEXT	0x40000000
 | 
			
		||||
#define X86_FEATURE_3DNOW	0x80000000
 | 
			
		||||
 | 
			
		||||
#define cpu_has_mmx		(gl_x86_cpu_features & X86_FEATURE_MMX)
 | 
			
		||||
#define cpu_has_xmm		(gl_x86_cpu_features & X86_FEATURE_XMM)
 | 
			
		||||
#define cpu_has_3dnow		(gl_x86_cpu_features & X86_FEATURE_3DNOW)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -5,9 +5,9 @@
 | 
			
		||||
#ifndef __WIN32__
 | 
			
		||||
 | 
			
		||||
#if defined(USE_MGL_NAMESPACE)
 | 
			
		||||
#define GL_PREFIX(n) GLNAME(mgl ## n)
 | 
			
		||||
#define GL_PREFIX(n) GLNAME(CONCAT(mgl,n))
 | 
			
		||||
#else
 | 
			
		||||
#define GL_PREFIX(n) GLNAME(gl ## n)
 | 
			
		||||
#define GL_PREFIX(n) GLNAME(CONCAT(gl,n))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,20 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
 
 | 
			
		||||
@@ -350,7 +350,3 @@ LLBL(GMBT_1):
 | 
			
		||||
    MOV_L     ( EBP, ESP )
 | 
			
		||||
    POP_L     ( EBP )
 | 
			
		||||
    RET
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,21 @@
 | 
			
		||||
/* $Id: x86.c,v 1.8 2000/06/27 22:10:01 brianp Exp $ */
 | 
			
		||||
/* $Id: x86.c,v 1.8.4.1 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
@@ -28,7 +28,6 @@
 | 
			
		||||
 * Intel x86 assembly code by Josh Vanderhoof
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "types.h"
 | 
			
		||||
@@ -36,89 +35,104 @@
 | 
			
		||||
#include "xform.h"
 | 
			
		||||
#include "x86.h"
 | 
			
		||||
 | 
			
		||||
#ifdef USE_X86_ASM
 | 
			
		||||
extern void _ASMAPI gl_v16_x86_cliptest_points4( GLfloat *first_vert,
 | 
			
		||||
					GLfloat *last_vert,
 | 
			
		||||
					GLubyte *or_mask,
 | 
			
		||||
					GLubyte *and_mask,
 | 
			
		||||
					GLubyte *clip_mask );
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
#include "debug_xform.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define XFORM_ARGS 	GLvector4f *to_vec, 				\
 | 
			
		||||
			const GLfloat m[16], 				\
 | 
			
		||||
			const GLvector4f *from_vec, 			\
 | 
			
		||||
			const GLubyte *mask, 				\
 | 
			
		||||
			const GLubyte flag
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define DECLARE_XFORM_GROUP( pfx, sz, masked ) \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_general_##masked( XFORM_ARGS );	    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_identity_##masked( XFORM_ARGS );	    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_3d_no_rot_##masked( XFORM_ARGS );    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_perspective_##masked( XFORM_ARGS );  \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_2d_##masked( XFORM_ARGS );	    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_2d_no_rot_##masked( XFORM_ARGS );    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##sz##_3d_##masked( XFORM_ARGS );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define ASSIGN_XFORM_GROUP( pfx, cma, sz, masked )			\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_GENERAL] =				\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_general_##masked;		\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_IDENTITY] =				\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_identity_##masked;		\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_3D_NO_ROT] =			\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_3d_no_rot_##masked;		\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_PERSPECTIVE] =			\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_perspective_##masked;		\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_2D] =				\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_2d_##masked;			\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_2D_NO_ROT] =			\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_2d_no_rot_##masked;		\
 | 
			
		||||
   gl_transform_tab[cma][sz][MATRIX_3D] =				\
 | 
			
		||||
      gl_##pfx##_transform_points##sz##_3d_##masked;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef USE_X86_ASM
 | 
			
		||||
DECLARE_XFORM_GROUP( x86, 2, raw )
 | 
			
		||||
DECLARE_XFORM_GROUP( x86, 3, raw )
 | 
			
		||||
DECLARE_XFORM_GROUP( x86, 4, raw )
 | 
			
		||||
DECLARE_XFORM_GROUP( x86, 2, masked )
 | 
			
		||||
DECLARE_XFORM_GROUP( x86, 3, masked )
 | 
			
		||||
DECLARE_XFORM_GROUP( x86, 4, masked )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern GLvector4f * _ASMAPI gl_x86_cliptest_points4( GLvector4f *clip_vec,
 | 
			
		||||
						     GLvector4f *proj_vec,
 | 
			
		||||
						     GLubyte clipMask[],
 | 
			
		||||
						     GLubyte *orMask,
 | 
			
		||||
						     GLubyte *andMask );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void _ASMAPI gl_v16_x86_cliptest_points4( GLfloat *first_vert,
 | 
			
		||||
						 GLfloat *last_vert,
 | 
			
		||||
						 GLubyte *or_mask,
 | 
			
		||||
						 GLubyte *and_mask,
 | 
			
		||||
						 GLubyte *clip_mask );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
extern void _ASMAPI gl_v16_x86_general_xform( GLfloat *dest,
 | 
			
		||||
				     const GLfloat *m,
 | 
			
		||||
				     const GLfloat *src,
 | 
			
		||||
				     GLuint src_stride,
 | 
			
		||||
					      const GLfloat *m,
 | 
			
		||||
					      const GLfloat *src,
 | 
			
		||||
					      GLuint src_stride,
 | 
			
		||||
					      GLuint count );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define XFORM_ARGS 	GLvector4f *to_vec, 		\
 | 
			
		||||
			const GLfloat m[16], 		\
 | 
			
		||||
			const GLvector4f *from_vec, 	\
 | 
			
		||||
			const GLubyte *mask, 		\
 | 
			
		||||
			const GLubyte flag
 | 
			
		||||
 | 
			
		||||
#define DECLARE_XFORM_GROUP(pfx, vsize, masked) \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##vsize##_general_##masked(XFORM_ARGS);     \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##vsize##_identity_##masked(XFORM_ARGS);    \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##vsize##_3d_no_rot_##masked(XFORM_ARGS);   \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##vsize##_perspective_##masked(XFORM_ARGS);     \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##vsize##_2d_##masked(XFORM_ARGS);      \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##vsize##_2d_no_rot_##masked(XFORM_ARGS);   \
 | 
			
		||||
 extern void _ASMAPI gl_##pfx##_transform_points##vsize##_3d_##masked(XFORM_ARGS);
 | 
			
		||||
 | 
			
		||||
#define ASSIGN_XFORM_GROUP( pfx, cma, vsize, masked ) 		\
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_GENERAL] 			\
 | 
			
		||||
  = gl_##pfx##_transform_points##vsize##_general_##masked; 	\
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_IDENTITY] 			\
 | 
			
		||||
  = gl_##pfx##_transform_points##vsize##_identity_##masked; 	\
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_3D_NO_ROT] 		\
 | 
			
		||||
  = gl_##pfx##_transform_points##vsize##_3d_no_rot_##masked; 	\
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_PERSPECTIVE] 		\
 | 
			
		||||
  = gl_##pfx##_transform_points##vsize##_perspective_##masked; 	\
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_2D] 			\
 | 
			
		||||
  = gl_##pfx##_transform_points##vsize##_2d_##masked; 		\
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_2D_NO_ROT] 		\
 | 
			
		||||
  = gl_##pfx##_transform_points##vsize##_2d_no_rot_##masked; 	\
 | 
			
		||||
 gl_transform_tab[cma][vsize][MATRIX_3D] 			\
 | 
			
		||||
  = gl_##pfx##_transform_points##vsize##_3d_##masked;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef USE_X86_ASM
 | 
			
		||||
   DECLARE_XFORM_GROUP( x86, 2, raw )
 | 
			
		||||
   DECLARE_XFORM_GROUP( x86, 3, raw )
 | 
			
		||||
   DECLARE_XFORM_GROUP( x86, 4, raw )
 | 
			
		||||
   DECLARE_XFORM_GROUP( x86, 2, masked )
 | 
			
		||||
   DECLARE_XFORM_GROUP( x86, 3, masked )
 | 
			
		||||
   DECLARE_XFORM_GROUP( x86, 4, masked )
 | 
			
		||||
 | 
			
		||||
   extern GLvector4f  * _ASMAPI gl_x86_cliptest_points4( GLvector4f *clip_vec, 
 | 
			
		||||
                                               GLvector4f *proj_vec, 
 | 
			
		||||
                                               GLubyte clipMask[],
 | 
			
		||||
                                               GLubyte *orMask, 
 | 
			
		||||
                                               GLubyte *andMask );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_init_x86_asm_transforms( void )
 | 
			
		||||
void gl_init_x86_transform_asm( void )
 | 
			
		||||
{
 | 
			
		||||
#ifdef USE_X86_ASM
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, 0, 2, raw )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, 0, 3, raw )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, 0, 4, raw )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, 0, 2, raw );
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, 0, 3, raw );
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, 0, 4, raw );
 | 
			
		||||
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 2, masked )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 3, masked )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 4, masked )
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 2, masked );
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 3, masked );
 | 
			
		||||
   ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 4, masked );
 | 
			
		||||
 | 
			
		||||
   /* XXX this function has been found to cause FP overflow exceptions */
 | 
			
		||||
   gl_clip_tab[4] = gl_x86_cliptest_points4;
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
   gl_test_all_transform_functions("x86");
 | 
			
		||||
   gl_test_all_transform_functions( "x86" );
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void gl_init_x86_vertex_asm( void )
 | 
			
		||||
{
 | 
			
		||||
#ifdef USE_X86_ASM
 | 
			
		||||
   gl_xform_points3_v16_general	= gl_v16_x86_general_xform;
 | 
			
		||||
   gl_cliptest_points4_v16	= gl_v16_x86_cliptest_points4;
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
   gl_test_all_vertex_functions( "x86" );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
   gl_cliptest_points4_v16 = gl_v16_x86_cliptest_points4;
 | 
			
		||||
   gl_xform_points3_v16_general = gl_v16_x86_general_xform;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,21 @@
 | 
			
		||||
/* $Id: x86.h,v 1.1 1999/08/19 00:55:42 jtg Exp $ */
 | 
			
		||||
/* $Id: x86.h,v 1.1.1.1.6.1 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
@@ -28,10 +28,10 @@
 | 
			
		||||
 * Intel x86 assembly code by Josh Vanderhoof
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __X86_H__
 | 
			
		||||
#define __X86_H__
 | 
			
		||||
 | 
			
		||||
#ifndef X86_H
 | 
			
		||||
#define X86_H
 | 
			
		||||
 | 
			
		||||
extern void gl_init_x86_asm_transforms(void);
 | 
			
		||||
extern void gl_init_x86_transform_asm( void );
 | 
			
		||||
extern void gl_init_x86_vertex_asm( void );
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										248
									
								
								src/mesa/x86/x86_cliptest.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										248
									
								
								src/mesa/x86/x86_cliptest.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,248 @@
 | 
			
		||||
/* $Id: x86_cliptest.S,v 1.1.2.1 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | 
			
		||||
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 | 
			
		||||
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "assyntax.h"
 | 
			
		||||
#include "clip_args.h"
 | 
			
		||||
 | 
			
		||||
#define FP_ONE		1065353216
 | 
			
		||||
#define FP_ZERO		0
 | 
			
		||||
 | 
			
		||||
#define SRC(i)		REGOFF(i * 4, ESI)
 | 
			
		||||
#define DST(i)		REGOFF(i * 4, EDI)
 | 
			
		||||
#define MAT(i)		REGOFF(i * 4, EDX)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Table for clip test.
 | 
			
		||||
 *
 | 
			
		||||
 * 	bit6 = SRC(3) < 0
 | 
			
		||||
 * 	bit5 = SRC(2) < 0
 | 
			
		||||
 * 	bit4 = abs(S(2)) > abs(S(3))
 | 
			
		||||
 * 	bit3 = SRC(1) < 0
 | 
			
		||||
 * 	bit2 = abs(S(1)) > abs(S(3))
 | 
			
		||||
 * 	bit1 = SRC(0) < 0
 | 
			
		||||
 * 	bit0 = abs(S(0)) > abs(S(3))
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
	SEG_DATA
 | 
			
		||||
 | 
			
		||||
clip_table:
 | 
			
		||||
	D_BYTE 0, 1, 0, 2, 4, 5, 4, 6
 | 
			
		||||
	D_BYTE 0, 1, 0, 2, 8, 9, 8, 10
 | 
			
		||||
	D_BYTE 32, 33, 32, 34, 36, 37, 36, 38
 | 
			
		||||
	D_BYTE 32, 33, 32, 34, 40, 41, 40, 42
 | 
			
		||||
	D_BYTE 0, 1, 0, 2, 4, 5, 4, 6
 | 
			
		||||
	D_BYTE 0, 1, 0, 2, 8, 9, 8, 10
 | 
			
		||||
	D_BYTE 16, 17, 16, 18, 20, 21, 20, 22
 | 
			
		||||
	D_BYTE 16, 17, 16, 18, 24, 25, 24, 26
 | 
			
		||||
	D_BYTE 63, 61, 63, 62, 55, 53, 55, 54
 | 
			
		||||
	D_BYTE 63, 61, 63, 62, 59, 57, 59, 58
 | 
			
		||||
	D_BYTE 47, 45, 47, 46, 39, 37, 39, 38
 | 
			
		||||
	D_BYTE 47, 45, 47, 46, 43, 41, 43, 42
 | 
			
		||||
	D_BYTE 63, 61, 63, 62, 55, 53, 55, 54
 | 
			
		||||
	D_BYTE 63, 61, 63, 62, 59, 57, 59, 58
 | 
			
		||||
	D_BYTE 31, 29, 31, 30, 23, 21, 23, 22
 | 
			
		||||
	D_BYTE 31, 29, 31, 30, 27, 25, 27, 26
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	SEG_TEXT
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * gl_x86_cliptest_points4
 | 
			
		||||
 *
 | 
			
		||||
 *   AL:  ormask
 | 
			
		||||
 *   AH:  andmask
 | 
			
		||||
 *   EBX: temp0
 | 
			
		||||
 *   ECX: temp1
 | 
			
		||||
 *   EDX: clipmask[]
 | 
			
		||||
 *   ESI: clip[]
 | 
			
		||||
 *   EDI: proj[]
 | 
			
		||||
 *   EBP: temp2
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined(__ELF__) && defined(__PIC__) && !defined(ELFPIC)
 | 
			
		||||
#define ELFPIC
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
ALIGNTEXT16
 | 
			
		||||
GLOBL GLNAME( gl_x86_cliptest_points4 )
 | 
			
		||||
GLNAME( gl_x86_cliptest_points4 ):
 | 
			
		||||
 | 
			
		||||
#ifdef ELFPIC
 | 
			
		||||
#define FRAME_OFFSET 20
 | 
			
		||||
#else
 | 
			
		||||
#define FRAME_OFFSET 16
 | 
			
		||||
#endif
 | 
			
		||||
	PUSH_L( ESI )
 | 
			
		||||
	PUSH_L( EDI )
 | 
			
		||||
	PUSH_L( EBP )
 | 
			
		||||
	PUSH_L( EBX )
 | 
			
		||||
 | 
			
		||||
#ifdef ELFPIC
 | 
			
		||||
	/* store pointer to clip_table on stack */
 | 
			
		||||
	CALL( LLBL( ctp4_get_eip ) )
 | 
			
		||||
	ADD_L( CONST(_GLOBAL_OFFSET_TABLE_), EBX )
 | 
			
		||||
	MOV_L( REGOFF(clip_table@GOT, EBX), EBX )
 | 
			
		||||
	PUSH_L( EBX )
 | 
			
		||||
	JMP( LLBL( ctp4_clip_table_ready ) )
 | 
			
		||||
 | 
			
		||||
LLBL( ctp4_get_eip ):
 | 
			
		||||
	/* store eip in ebx */
 | 
			
		||||
	MOV_L( REGIND(ESP), EBX )
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
LLBL( ctp4_clip_table_ready ):
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	MOV_L( ARG_SOURCE, ESI )
 | 
			
		||||
	MOV_L( ARG_DEST, EDI )
 | 
			
		||||
 | 
			
		||||
	MOV_L( ARG_CLIP, EDX )
 | 
			
		||||
	MOV_L( ARG_OR, EBX )
 | 
			
		||||
 | 
			
		||||
	MOV_L( ARG_AND, EBP )
 | 
			
		||||
	MOV_L( REGOFF(V4F_STRIDE, ESI), EAX )
 | 
			
		||||
 | 
			
		||||
	MOV_L( REGOFF(V4F_COUNT, ESI), ECX )
 | 
			
		||||
	MOV_L( REGOFF(V4F_START, ESI), ESI )
 | 
			
		||||
 | 
			
		||||
	OR_L( CONST(VEC_SIZE_4), REGOFF(V4F_FLAGS, EDI) )
 | 
			
		||||
	MOV_L( EAX, ARG_SOURCE )	/* put stride in ARG_SOURCE */
 | 
			
		||||
 | 
			
		||||
	MOV_L( CONST(3), REGOFF(V4F_SIZE, EDI) )
 | 
			
		||||
	MOV_L( ECX, REGOFF(V4F_COUNT, EDI) )
 | 
			
		||||
 | 
			
		||||
	MOV_L( REGOFF(V4F_START, EDI), EDI )
 | 
			
		||||
	ADD_L( EDX, ECX )
 | 
			
		||||
 | 
			
		||||
	MOV_L( ECX, ARG_CLIP )		/* put clipmask + count in ARG_CLIP */
 | 
			
		||||
	CMP_L( ECX, EDX )
 | 
			
		||||
 | 
			
		||||
	MOV_B( REGIND(EBX), AL )
 | 
			
		||||
	MOV_B( REGIND(EBP), AH )
 | 
			
		||||
 | 
			
		||||
	JZ( LLBL( ctp4_finish ) )
 | 
			
		||||
 | 
			
		||||
ALIGNTEXT16
 | 
			
		||||
LLBL( ctp4_top ):
 | 
			
		||||
 | 
			
		||||
	FLD1			/* F3 */
 | 
			
		||||
	FDIV_S( SRC(3) )
 | 
			
		||||
 | 
			
		||||
	MOV_L( SRC(3), EBP )
 | 
			
		||||
	MOV_L( SRC(2), EBX )
 | 
			
		||||
 | 
			
		||||
	XOR_L( ECX, ECX )
 | 
			
		||||
	ADD_L( EBP, EBP )	/* ebp = abs(S(3))*2 ; carry = sign of S(3) */
 | 
			
		||||
 | 
			
		||||
	ADC_L( ECX, ECX )
 | 
			
		||||
	ADD_L( EBX, EBX )	/* ebx = abs(S(2))*2 ; carry = sign of S(2) */
 | 
			
		||||
 | 
			
		||||
	ADC_L( ECX, ECX )
 | 
			
		||||
	CMP_L( EBX, EBP )	/* carry = abs(S(2))*2 > abs(S(3))*2 */
 | 
			
		||||
 | 
			
		||||
	ADC_L( ECX, ECX )
 | 
			
		||||
	MOV_L( SRC(1), EBX )
 | 
			
		||||
 | 
			
		||||
	ADD_L( EBX, EBX )	/* ebx = abs(S(1))*2 ; carry = sign of S(1) */
 | 
			
		||||
 | 
			
		||||
	ADC_L( ECX, ECX )
 | 
			
		||||
	CMP_L( EBX, EBP )	/* carry = abs(S(1))*2 > abs(S(3))*2 */
 | 
			
		||||
 | 
			
		||||
	ADC_L( ECX, ECX )
 | 
			
		||||
	MOV_L( SRC(0), EBX )
 | 
			
		||||
 | 
			
		||||
	ADD_L( EBX, EBX )	/* ebx = abs(S(0))*2 ; carry = sign of S(0) */
 | 
			
		||||
 | 
			
		||||
	ADC_L( ECX, ECX )
 | 
			
		||||
	CMP_L( EBX, EBP )	/* carry = abs(S(0))*2 > abs(S(3))*2 */
 | 
			
		||||
 | 
			
		||||
	ADC_L( ECX, ECX )
 | 
			
		||||
 | 
			
		||||
#ifdef ELFPIC
 | 
			
		||||
	MOV_L( REGIND(ESP), EBP )	/* clip_table */
 | 
			
		||||
 | 
			
		||||
	MOV_B( REGBI(EBP, ECX), CL )
 | 
			
		||||
#else
 | 
			
		||||
	MOV_B( REGOFF(clip_table,ECX), CL )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	OR_B( CL, AL )
 | 
			
		||||
	AND_B( CL, AH )
 | 
			
		||||
 | 
			
		||||
	TEST_B( CL, CL )
 | 
			
		||||
	MOV_B( CL, REGIND(EDX) )
 | 
			
		||||
 | 
			
		||||
	JZ( LLBL( ctp4_proj ) )
 | 
			
		||||
 | 
			
		||||
	FSTP( ST(0) )			/* */
 | 
			
		||||
	JMP( LLBL( ctp4_next ) )
 | 
			
		||||
 | 
			
		||||
LLBL( ctp4_proj ):
 | 
			
		||||
 | 
			
		||||
	FLD_S( SRC(0) )			/* F0 F3 */
 | 
			
		||||
	FMUL2( ST(1), ST(0) )
 | 
			
		||||
 | 
			
		||||
	FLD_S( SRC(1) )			/* F1 F0 F3 */
 | 
			
		||||
	FMUL2( ST(2), ST(0) )
 | 
			
		||||
 | 
			
		||||
	FLD_S( SRC(2) )			/* F2 F1 F0 F3 */
 | 
			
		||||
	FMUL2( ST(3), ST(0) )
 | 
			
		||||
 | 
			
		||||
	FXCH( ST(2) )			/* F0 F1 F2 F3 */
 | 
			
		||||
	FSTP_S( DST(0) )		/* F1 F2 F3 */
 | 
			
		||||
	FSTP_S( DST(1) )		/* F2 F3 */
 | 
			
		||||
	FSTP_S( DST(2) )		/* F3 */
 | 
			
		||||
	FSTP_S( DST(3) )		/* */
 | 
			
		||||
 | 
			
		||||
LLBL( ctp4_next ):
 | 
			
		||||
 | 
			
		||||
	INC_L( EDX )
 | 
			
		||||
	ADD_L( CONST(16), EDI )
 | 
			
		||||
 | 
			
		||||
	ADD_L( ARG_SOURCE, ESI )
 | 
			
		||||
	CMP_L( EDX, ARG_CLIP )
 | 
			
		||||
 | 
			
		||||
	JNZ( LLBL( ctp4_top ) )
 | 
			
		||||
 | 
			
		||||
	MOV_L( ARG_OR, ECX )
 | 
			
		||||
	MOV_L( ARG_AND, EDX )
 | 
			
		||||
 | 
			
		||||
	MOV_B( AL, REGIND(ECX) )
 | 
			
		||||
	MOV_B( AH, REGIND(EDX) )
 | 
			
		||||
 | 
			
		||||
LLBL( ctp4_finish ):
 | 
			
		||||
 | 
			
		||||
	MOV_L( ARG_DEST, EAX )
 | 
			
		||||
#ifdef ELFPIC
 | 
			
		||||
	POP_L( ESI )			/* discard ptr to clip_table */
 | 
			
		||||
#endif
 | 
			
		||||
	POP_L( EBX )
 | 
			
		||||
	POP_L( EBP )
 | 
			
		||||
	POP_L( EDI )
 | 
			
		||||
	POP_L( ESI )
 | 
			
		||||
 | 
			
		||||
	RET
 | 
			
		||||
							
								
								
									
										74
									
								
								src/mesa/x86/xform_args.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								src/mesa/x86/xform_args.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
/* $Id: xform_args.h,v 1.1.2.1 2000/10/22 23:10:51 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included
 | 
			
		||||
 * in all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
			
		||||
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | 
			
		||||
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 | 
			
		||||
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Transform function interface for assembly code.  Simply define
 | 
			
		||||
 * FRAME_OFFSET to the number of bytes pushed onto the stack before
 | 
			
		||||
 * using the ARG_* argument macros.
 | 
			
		||||
 *
 | 
			
		||||
 * Gareth Hughes <gareth@valinux.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __XFORM_ARGS_H__
 | 
			
		||||
#define __XFORM_ARGS_H__
 | 
			
		||||
 | 
			
		||||
/* Offsets into GLvector4f
 | 
			
		||||
 */
 | 
			
		||||
#define V4F_DATA	0
 | 
			
		||||
#define V4F_START	4
 | 
			
		||||
#define V4F_COUNT	8
 | 
			
		||||
#define V4F_STRIDE	12
 | 
			
		||||
#define V4F_SIZE	16
 | 
			
		||||
#define V4F_FLAGS	20
 | 
			
		||||
 | 
			
		||||
/* GLvector4f flags
 | 
			
		||||
 */
 | 
			
		||||
#define VEC_SIZE_1	1
 | 
			
		||||
#define VEC_SIZE_2	3
 | 
			
		||||
#define VEC_SIZE_3	7
 | 
			
		||||
#define VEC_SIZE_4	15
 | 
			
		||||
 | 
			
		||||
/* Offsets for transform_func arguments
 | 
			
		||||
 *
 | 
			
		||||
 * typedef void (*transform_func)( GLvector4f *to_vec,
 | 
			
		||||
 *				   const GLfloat m[16],
 | 
			
		||||
 *				   const GLvector4f *from_vec,
 | 
			
		||||
 *				   const GLubyte *clipmask,
 | 
			
		||||
 *				   const GLubyte flag );
 | 
			
		||||
 */
 | 
			
		||||
#define OFFSET_DEST	4
 | 
			
		||||
#define OFFSET_MATRIX	8
 | 
			
		||||
#define OFFSET_SOURCE	12
 | 
			
		||||
#define OFFSET_CLIP	16
 | 
			
		||||
#define OFFSET_FLAG	20
 | 
			
		||||
 | 
			
		||||
#define ARG_DEST	REGOFF(FRAME_OFFSET+OFFSET_DEST, ESP)
 | 
			
		||||
#define ARG_MATRIX 	REGOFF(FRAME_OFFSET+OFFSET_MATRIX, ESP)
 | 
			
		||||
#define ARG_SOURCE 	REGOFF(FRAME_OFFSET+OFFSET_SOURCE, ESP)
 | 
			
		||||
#define ARG_CLIP 	REGOFF(FRAME_OFFSET+OFFSET_CLIP, ESP)
 | 
			
		||||
#define ARG_FLAG 	REGOFF(FRAME_OFFSET+OFFSET_FLAG, ESP)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
		Reference in New Issue
	
	Block a user