Compare commits
	
		
			153 Commits
		
	
	
		
			mesa-7.0.2
			...
			mesa_7_0_3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 48616e71d2 | ||
|  | 70d227ac62 | ||
|  | 7f2c4f96f5 | ||
|  | 667f0f60fc | ||
|  | 7592b8cc10 | ||
|  | f55b831859 | ||
|  | 217f7f7e5d | ||
|  | 1e83d70b6d | ||
|  | 767dfa5b9c | ||
|  | 7ff5b38126 | ||
|  | e209f5300d | ||
|  | 3c4b50c352 | ||
|  | 4e7c2fcf18 | ||
|  | 22534f94f5 | ||
|  | 1a6928fdbe | ||
|  | 325dbbac47 | ||
|  | 39ac6b0481 | ||
|  | 46cc4854e9 | ||
|  | f93882512e | ||
|  | 0dee2a4f6f | ||
|  | 3cebc35669 | ||
|  | e75a204fb9 | ||
|  | ac06a5c16a | ||
|  | ed758fee0c | ||
|  | a21c61ee8b | ||
|  | 24697da20e | ||
|  | 7120c0089d | ||
|  | 88a436a8f7 | ||
|  | 2fdb5a245d | ||
|  | 8441b53538 | ||
|  | d336df8b73 | ||
|  | 8aaf805b8a | ||
|  | 8161fd2785 | ||
|  | 2f23025dfe | ||
|  | 1867eac230 | ||
|  | 096e35d05f | ||
|  | 8998f52b97 | ||
|  | 0fd38dcc83 | ||
|  | ff63cf8068 | ||
|  | 4716670de9 | ||
|  | 33c5b38034 | ||
|  | 5737d6c565 | ||
|  | 08a7f56c6a | ||
|  | 7916f2b4aa | ||
|  | 193d303ac7 | ||
|  | e70609b7b8 | ||
|  | da476ff02d | ||
|  | 77e3b5d28b | ||
|  | bf97ca448c | ||
|  | c5f8ff8b32 | ||
|  | 50465766d1 | ||
|  | 7d8df58a63 | ||
|  | 762c074012 | ||
|  | 51f2ee3bfb | ||
|  | b5cd34aa21 | ||
|  | ae5c6dcd42 | ||
|  | 97196d0c8c | ||
|  | f6de56b88a | ||
|  | d64ea43b76 | ||
|  | 2deaf93d24 | ||
|  | a107ec8300 | ||
|  | 120a1f9508 | ||
|  | bb84007a57 | ||
|  | 86234e55a6 | ||
|  | 61972077cd | ||
|  | 5a7feb8ea2 | ||
|  | 4b4c131cd0 | ||
|  | 0fd23f01c6 | ||
|  | 557b0d9df7 | ||
|  | 888f4380cf | ||
|  | 3266c5e95a | ||
|  | 834decdaae | ||
|  | 18b2d83173 | ||
|  | 30c65c3c62 | ||
|  | 04fcc4cf1e | ||
|  | 48ae5cf09d | ||
|  | 45cdb6eb45 | ||
|  | b9f3f732aa | ||
|  | 17006ddd6b | ||
|  | b77a354df3 | ||
|  | 71d46beebf | ||
|  | 454e296eb1 | ||
|  | f9b696be2b | ||
|  | c923edbc71 | ||
|  | e20c1d987f | ||
|  | cd354eb10f | ||
|  | e9ac27ee23 | ||
|  | 3f9dc9f5b6 | ||
|  | ba709875ae | ||
|  | 80f8397b35 | ||
|  | b45fa27fa1 | ||
|  | b59480645d | ||
|  | 148cb36979 | ||
|  | c1eb78f7ff | ||
|  | 8aa0fd6b20 | ||
|  | a1b3a908f5 | ||
|  | f9e70d951a | ||
|  | 41ed6be1da | ||
|  | 27de28fc3e | ||
|  | dd2f01c229 | ||
|  | deb5c56c77 | ||
|  | 0107acded0 | ||
|  | 2ac5e08d1d | ||
|  | 1837b8c214 | ||
|  | 03d2bc1774 | ||
|  | 385bddbde0 | ||
|  | c135426267 | ||
|  | 4be0c98120 | ||
|  | e760aebd5a | ||
|  | 1f6e7d9c29 | ||
|  | c6d421af05 | ||
|  | 952df5e493 | ||
|  | 45acb8b058 | ||
|  | e8997c0183 | ||
|  | 169e62f563 | ||
|  | 1b43babfb1 | ||
|  | 43e902f774 | ||
|  | b0a800e249 | ||
|  | 73d5f232ad | ||
|  | f7209541e4 | ||
|  | 397a32dca7 | ||
|  | e0719d7122 | ||
|  | 3f18c0a9f2 | ||
|  | b14be61938 | ||
|  | 440d620308 | ||
|  | 8dd9df0f3e | ||
|  | 6b9534eaf5 | ||
|  | c91d374ad7 | ||
|  | 1cab4160bc | ||
|  | 718d2dfbbd | ||
|  | 0967e1270d | ||
|  | a08c02f1a8 | ||
|  | bdfd9afead | ||
|  | 1c91a590d6 | ||
|  | 65bd7968bf | ||
|  | 6ccd23b87b | ||
|  | 823409b7d0 | ||
|  | c85d31f4a0 | ||
|  | 24af5c44da | ||
|  | 75efacf8eb | ||
|  | 825e810247 | ||
|  | e20723cfc1 | ||
|  | 9f39a67c1d | ||
|  | 2044f3f791 | ||
|  | 30d4e8c422 | ||
|  | 92d552f6a2 | ||
|  | 5adfcbbc4f | ||
|  | 69969b3819 | ||
|  | edfee04fcb | ||
|  | 28c9930888 | ||
|  | e3a35a123e | ||
|  | 412168f2e8 | ||
|  | fc0fa0d636 | 
							
								
								
									
										14
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								Makefile
									
									
									
									
									
								
							| @@ -71,9 +71,10 @@ bluegene-osmesa \ | ||||
| bluegene-xlc-osmesa \ | ||||
| catamount-osmesa-pgi \ | ||||
| darwin \ | ||||
| darwin-fat-32bit \ | ||||
| darwin-fat-all \ | ||||
| darwin-static \ | ||||
| darwin-static-x86ppc \ | ||||
| darwin-x86ppc \ | ||||
| freebsd \ | ||||
| freebsd-dri \ | ||||
| freebsd-dri-amd64 \ | ||||
| @@ -166,10 +167,10 @@ ultrix-gcc: | ||||
|  | ||||
| # Rules for making release tarballs | ||||
|  | ||||
| DIRECTORY = Mesa-7.0.2 | ||||
| LIB_NAME = MesaLib-7.0.2 | ||||
| DEMO_NAME = MesaDemos-7.0.2 | ||||
| GLUT_NAME = MesaGLUT-7.0.2 | ||||
| DIRECTORY = Mesa-7.0.3 | ||||
| LIB_NAME = MesaLib-7.0.3 | ||||
| DEMO_NAME = MesaDemos-7.0.3 | ||||
| GLUT_NAME = MesaGLUT-7.0.3 | ||||
|  | ||||
| MAIN_FILES = \ | ||||
| 	$(DIRECTORY)/Makefile*						\ | ||||
| @@ -355,6 +356,7 @@ GLW_FILES = \ | ||||
| 	$(DIRECTORY)/src/glw/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/glw/Makefile*			\ | ||||
| 	$(DIRECTORY)/src/glw/README			\ | ||||
| 	$(DIRECTORY)/src/glw/glw.pc.in			\ | ||||
| 	$(DIRECTORY)/src/glw/depend | ||||
|  | ||||
| DEMO_FILES = \ | ||||
| @@ -414,6 +416,7 @@ GLUT_FILES = \ | ||||
| 	$(DIRECTORY)/src/glut/fbdev/Makefile		\ | ||||
| 	$(DIRECTORY)/src/glut/fbdev/*[ch]		\ | ||||
| 	$(DIRECTORY)/src/glut/mini/*[ch]		\ | ||||
| 	$(DIRECTORY)/src/glut/mini/glut.pc.in		\ | ||||
| 	$(DIRECTORY)/src/glut/directfb/Makefile		\ | ||||
| 	$(DIRECTORY)/src/glut/directfb/NOTES		\ | ||||
| 	$(DIRECTORY)/src/glut/directfb/*[ch]		\ | ||||
| @@ -424,7 +427,6 @@ DEPEND_FILES = \ | ||||
| 	$(TOP)/src/mesa/depend		\ | ||||
| 	$(TOP)/src/glx/x11/depend	\ | ||||
| 	$(TOP)/src/glw/depend		\ | ||||
| 	$(TOP)/src/glw/glw.pc.in	\ | ||||
| 	$(TOP)/src/glut/glx/depend	\ | ||||
| 	$(TOP)/src/glu/sgi/depend | ||||
|  | ||||
|   | ||||
							
								
								
									
										100
									
								
								bin/mklib
									
									
									
									
									
								
							
							
						
						
									
										100
									
								
								bin/mklib
									
									
									
									
									
								
							| @@ -71,6 +71,7 @@ do | ||||
| 	    echo '  -install DIR  put resulting library file(s) in DIR' | ||||
| 	    echo '  -arch ARCH    override using `uname` to determine host system' | ||||
| 	    echo '  -archopt OPT  specify an extra achitecture-specific option OPT' | ||||
| 	    echo '  -altopts OPTS alternate options to override all others' | ||||
| 	    echo "  -noprefix     don't prefix library name with 'lib' nor add any suffix" | ||||
| 	    echo '  -exports FILE only export the symbols listed in FILE' | ||||
| 	    echo '  -h, --help    display this information and exit' | ||||
| @@ -111,7 +112,6 @@ do | ||||
| 	    DEPS="$DEPS $1" | ||||
| 	    ;; | ||||
| 	'-pthread') | ||||
| 	    # for FreeBSD | ||||
| 	    DEPS="$DEPS -pthread" | ||||
| 	    ;; | ||||
| 	'-cplusplus') | ||||
| @@ -135,6 +135,10 @@ do | ||||
| 	    shift 1; | ||||
| 	    ARCHOPT=$1 | ||||
| 	    ;; | ||||
| 	'-altopts') | ||||
|             shift 1; | ||||
|             ALTOPTS=$1 | ||||
|             ;; | ||||
| 	'-noprefix') | ||||
| 	    NOPREFIX=1 | ||||
| 	    ;; | ||||
| @@ -209,8 +213,13 @@ case $ARCH in | ||||
| 	if [ $NOPREFIX = 1 ] ; then | ||||
| 	    # No "lib" or ".so" part | ||||
| 	    echo "mklib: Making" $ARCH "shared library: " ${LIBNAME} | ||||
| 	    #OPTS="-shared -Wl,-soname,${LIBNAME}"  # soname??? | ||||
| 	    OPTS="-shared" | ||||
| 	    case $ARCH in 'Linux' | 'GNU' | GNU/*) | ||||
| 		OPTS="-Xlinker -Bsymbolic -shared" | ||||
| 	    ;; | ||||
| 	    *) | ||||
| 		OPTS="-shared" | ||||
| 	    ;; | ||||
| 	    esac | ||||
|  | ||||
| 	    # Check if objects are 32-bit and we're running in 64-bit | ||||
| 	    # environment.  If so, pass -m32 flag to linker. | ||||
| @@ -220,6 +229,10 @@ case $ARCH in | ||||
| 		OPTS="-m32 ${OPTS}" | ||||
| 	    fi | ||||
|  | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|  | ||||
|             rm -f ${LIBNAME} | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} | ||||
| @@ -230,6 +243,9 @@ case $ARCH in | ||||
|             echo "mklib: Making" $ARCH "static library: " ${LIBNAME} | ||||
|             LINK="ar" | ||||
|             OPTS="-ru" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             rm -f ${LIBNAME} | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LIBNAME} ${OBJECTS} | ||||
| @@ -265,6 +281,9 @@ case $ARCH in | ||||
| 	    if [ "${ABI32}" -a `uname -m` = "x86_64" ] ; then | ||||
| 		OPTS="-m32 ${OPTS}" | ||||
| 	    fi | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|  | ||||
| 	    if [ x${PATCH} = "x" ] ; then | ||||
| 		VERSION="${MAJOR}.${MINOR}" | ||||
| @@ -347,7 +366,9 @@ case $ARCH in | ||||
| 	    if [ "${SPARCV9}" ] ; then | ||||
| 		OPTS="${OPTS} -xarch=v9" | ||||
| 	    fi | ||||
|  | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
| 	    # for debug: | ||||
| 	    #echo "mklib: linker is" ${LINK} ${OPTS} | ||||
| 	    if [ $NOPREFIX = 1 ] ; then | ||||
| @@ -378,6 +399,9 @@ case $ARCH in | ||||
| 	    # No "lib" or ".so" part | ||||
| 	    echo "mklib: Making FreeBSD shared library: " ${LIBNAME} | ||||
| 	    OPTS="-shared" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| @@ -391,6 +415,9 @@ case $ARCH in | ||||
| 	else | ||||
| 	    SHLIB="lib${LIBNAME}.so.${MAJOR}" | ||||
| 	    OPTS="-shared -Wl,-soname,${SHLIB}" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
| 	    echo "mklib: Making FreeBSD shared library: " ${SHLIB} | ||||
| 	    rm -f ${SHLIB} | ||||
| 	    ${LINK} ${OPTS} ${LDFLAGS} -o ${SHLIB} ${OBJECTS} ${DEPS} | ||||
| @@ -444,6 +471,10 @@ case $ARCH in | ||||
| 		exit 1 | ||||
| 	    fi | ||||
|  | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|  | ||||
| 	    if [ $CPLUSPLUS = 1 ] ; then | ||||
| 		LINK="CC" | ||||
| 	    else | ||||
| @@ -524,6 +555,10 @@ case $ARCH in | ||||
| 		} | ||||
| 	    }' | sort -u >> ${EXPFILE} | ||||
|  | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|  | ||||
|             # On AIX a shared library is linked differently when | ||||
|             # you want to dlopen the file | ||||
| 	    if [ $DLOPEN = "1" ] ; then | ||||
| @@ -575,6 +610,9 @@ case $ARCH in | ||||
|             echo "mklib: Making Darwin static library: " ${LIBNAME} | ||||
|             LINK="ar" | ||||
|             OPTS="-ruvs" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             ${LINK} ${OPTS} ${LIBNAME} ${OBJECTS} | ||||
|             FINAL_LIBS=${LIBNAME} | ||||
|         else | ||||
| @@ -586,19 +624,37 @@ case $ARCH in | ||||
| 		LIBSUFFIX="dylib" | ||||
|                 OPTS="${ARCHOPT} -dynamiclib -multiply_defined suppress -current_version ${MAJOR}.${MINOR}.0 -compatibility_version ${MAJOR}.${MINOR}.0 -install_name lib${LIBNAME}.${MAJOR}.${LIBSUFFIX}" | ||||
|             fi | ||||
|             LINKNAME="lib${LIBNAME}.${LIBSUFFIX}" | ||||
|             LIBNAME="lib${LIBNAME}.${MAJOR}.${LIBSUFFIX}" | ||||
|  | ||||
|             if [ ${EXPORTS} ] ; then | ||||
|                 OPTS="${OPTS} -exported_symbols_list ${EXPORTS}" | ||||
|             fi  | ||||
|  | ||||
|             LINKNAME="lib${LIBNAME}.${MAJOR}.${LIBSUFFIX}" | ||||
|             LINKNAME2="lib${LIBNAME}.${LIBSUFFIX}" | ||||
|             LIBNAME="lib${LIBNAME}.${MAJOR}.${MINOR}.${LIBSUFFIX}" | ||||
|  | ||||
| 	    # examine first object to determine ABI | ||||
|     	    set ${OBJECTS} | ||||
| 	    ABI_PPC=`file $1 | grep 'object ppc'` | ||||
| 	    ABI_I386=`file $1 | grep 'object i386'` | ||||
| 	    if [ "${ABI_PPC}" ] ; then | ||||
| 		OPTS="${OPTS} -arch ppc" | ||||
| 	    fi | ||||
| 	    if [ "${ABI_I386}" ] ; then | ||||
| 		OPTS="${OPTS} -arch i386" | ||||
| 	    fi | ||||
|             ABI_PPC=`file $1 | grep ' ppc'` | ||||
|             ABI_I386=`file $1 | grep ' i386'` | ||||
|             ABI_PPC64=`file $1 | grep ' ppc64'` | ||||
|             ABI_X86_64=`file $1 | grep ' x86_64'` | ||||
|             if [ "${ABI_PPC}" ] ; then | ||||
|                 OPTS="${OPTS} -arch ppc" | ||||
|             fi | ||||
|             if [ "${ABI_I386}" ] ; then | ||||
|                 OPTS="${OPTS} -arch i386" | ||||
|             fi | ||||
|             if [ "${ABI_PPC64}" ] ; then | ||||
|                 OPTS="${OPTS} -arch ppc64" | ||||
|             fi | ||||
|             if [ "${ABI_X86_64}" ] ; then | ||||
|                 OPTS="${OPTS} -arch x86_64" | ||||
|             fi | ||||
|  | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|  | ||||
| 	    # XXX can we always add -isysroot /Developer/SDKs/MacOSX10.4u.sdk | ||||
| 	    # to OPTS here? | ||||
| @@ -611,9 +667,11 @@ case $ARCH in | ||||
| 	    fi | ||||
|  | ||||
|             echo "mklib: Making Darwin shared library: " ${LIBNAME} | ||||
|  | ||||
|             ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} | ||||
|             ln -s ${LIBNAME} ${LINKNAME} | ||||
|             FINAL_LIBS="${LIBNAME} ${LINKNAME}" | ||||
|             ln -s ${LIBNAME} ${LINKNAME2} | ||||
|             FINAL_LIBS="${LIBNAME} ${LINKNAME} ${LINKNAME2}" | ||||
|         fi | ||||
|         ;; | ||||
|  | ||||
| @@ -665,6 +723,9 @@ case $ARCH in | ||||
|             echo "mklib: Making Intel ICC static library: " ${LIBNAME}.a | ||||
|             LINK="ar" | ||||
|             OPTS="-ruv" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LIBNAME}.a ${OBJECTS} | ||||
|             # finish up | ||||
| @@ -675,6 +736,9 @@ case $ARCH in | ||||
|             else | ||||
|                  OPTS="-shared" | ||||
|             fi | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             VERSION="${MAJOR}.${MINOR}.${PATCH}" | ||||
|             echo "mklib: Making Intel ICC shared library: " ${LIBNAME}.so.${VERSION} | ||||
|  | ||||
| @@ -739,6 +803,9 @@ case $ARCH in | ||||
|             echo "mklib: Making" $ARCH "static library: " ${LIBNAME}.a | ||||
|             LINK="ar" | ||||
|             OPTS="-ru" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LIBNAME}.a ${OBJECTS} | ||||
| 	    ranlib ${LIBNAME}.a | ||||
| @@ -746,6 +813,9 @@ case $ARCH in | ||||
|             FINAL_LIBS=${LIBNAME}.a | ||||
|         else | ||||
| 	    OPTS="-shared -Wl,-export-all -Wl,--out-implib=${LIBNAME}-${MAJOR}.dll.a" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             echo "mklib: Making" $ARCH "shared library: " ${LIBNAME}-${MAJOR}.dll | ||||
|  | ||||
|             if [ $CPLUSPLUS = 1 ] ; then | ||||
|   | ||||
| @@ -4,11 +4,18 @@ include $(TOP)/configs/default | ||||
|  | ||||
| CONFIG_NAME = darwin | ||||
|  | ||||
| DEFINES = -D_DARWIN_C_SOURCE -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L \ | ||||
| 	  -D_SVID_SOURCE -D_BSD_SOURCE -D_GNU_SOURCE \ | ||||
| 	  -DPTHREADS -DGLX_ALIAS_UNSUPPORTED -DGLX_INDIRECT_RENDERING | ||||
|  | ||||
| # Compiler and flags | ||||
| CC = cc | ||||
| CXX = cc | ||||
| CFLAGS = -I/usr/X11R6/include -O3 -fPIC -fno-common -ffast-math -funroll-loops -fexpensive-optimizations -no-cpp-precomp -dynamic -Ddarwin | ||||
| CXXFLAGS = -I/usr/X11R6/include -O3 -fPIC -fno-common -ffast-math -funroll-loops -fexpensive-optimizations -no-cpp-precomp -dynamic -Ddarwin | ||||
| CC = gcc | ||||
| CXX = gcc | ||||
| CFLAGS = -I/usr/X11/include -O3 -fPIC -fno-common -ffast-math -funroll-loops -fexpensive-optimizations -no-cpp-precomp -dynamic -Ddarwin $(DEFINES) | ||||
| CXXFLAGS = -I/usr/X11/include -O3 -fPIC -fno-common -ffast-math -funroll-loops -fexpensive-optimizations -no-cpp-precomp -dynamic -Ddarwin $(DEFINES) | ||||
|  | ||||
| CFLAGS += $(RC_CFLAGS) | ||||
| CXXFLAGS += $(RC_CFLAGS) | ||||
|  | ||||
| # Work around aliasing bugs - developers should comment this out | ||||
| CFLAGS += -fno-strict-aliasing | ||||
| @@ -21,13 +28,13 @@ GLUT_LIB_NAME = libglut.dylib | ||||
| GLW_LIB_NAME = libGLw.dylib | ||||
| OSMESA_LIB_NAME = libOSMesa.dylib | ||||
|  | ||||
| GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread | ||||
| GL_LIB_DEPS = -L/usr/X11/lib -lX11 -lXext -lm -lpthread | ||||
| OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -lGL | ||||
| GLU_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -lGL | ||||
| GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -lGL -lGLU -L/usr/X11R6/lib -lX11 -lXmu -lXi -lXext | ||||
| GLW_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXt $(TOP)/lib/GL.dylib | ||||
| APP_LIB_DEPS = -L$(TOP)/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm | ||||
| APP_LIB_DEPS = -L$(TOP)/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11/lib -lX11 -lXmu -lXt -lXi -lm | ||||
|  | ||||
| # omit glw lib for now: | ||||
| SRC_DIRS = mesa glu glut/glx | ||||
|  | ||||
| SRC_DIRS = glx/x11 glu glut/glx mesa | ||||
| DRIVER_DIRS = osmesa | ||||
|   | ||||
							
								
								
									
										7
									
								
								configs/darwin-fat-32bit
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								configs/darwin-fat-32bit
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # Configuration for Darwin / MacOS X, making 32bit fat dynamic libs | ||||
|  | ||||
| RC_CFLAGS=-arch ppc -arch i386 | ||||
|  | ||||
| include $(TOP)/configs/darwin | ||||
|  | ||||
| CONFIG_NAME = darwin-fat-32bit | ||||
							
								
								
									
										7
									
								
								configs/darwin-fat-all
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								configs/darwin-fat-all
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # Configuration for Darwin / MacOS X, making 32bit and 64bit fat dynamic libs | ||||
|  | ||||
| RC_CFLAGS=-arch ppc -arch i386 -arch ppc64 -arch x86_64 | ||||
|  | ||||
| include $(TOP)/configs/darwin | ||||
|  | ||||
| CONFIG_NAME = darwin-fat-all | ||||
| @@ -1,37 +0,0 @@ | ||||
| # Configuration for Darwin / MacOS X, making dynamic libs | ||||
|  | ||||
| include $(TOP)/configs/default | ||||
|  | ||||
| CONFIG_NAME = darwin | ||||
|  | ||||
| # Compiler and flags | ||||
| CC = cc | ||||
| CXX = cc | ||||
| CFLAGS = -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk \ | ||||
|          -I/usr/X11R6/include -O3 -fPIC -fno-common -ffast-math -funroll-loops -fexpensive-optimizations -no-cpp-precomp -dynamic -Ddarwin | ||||
| CXXFLAGS = -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk \ | ||||
|          -I/usr/X11R6/include -O3 -fPIC -fno-common -ffast-math -funroll-loops -fexpensive-optimizations -no-cpp-precomp -dynamic -Ddarwin | ||||
|  | ||||
| MKLIB_OPTIONS = -archopt "-isysroot /Developer/SDKs/MacOSX10.4u.sdk" | ||||
|  | ||||
| # Work around aliasing bugs - developers should comment this out | ||||
| CFLAGS += -fno-strict-aliasing | ||||
| CXXFLAGS += -fno-strict-aliasing | ||||
|  | ||||
| # Library names (actual file names) | ||||
| GL_LIB_NAME = libGL.dylib | ||||
| GLU_LIB_NAME = libGLU.dylib | ||||
| GLUT_LIB_NAME = libglut.dylib | ||||
| GLW_LIB_NAME = libGLw.dylib | ||||
| OSMESA_LIB_NAME = libOSMesa.dylib | ||||
|  | ||||
| GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread | ||||
| OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -lGL | ||||
| GLU_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -lGL | ||||
| GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -lGL -lGLU -L/usr/X11R6/lib -lX11 -lXmu -lXi -lXext | ||||
| GLW_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXt $(TOP)/lib/GL.dylib | ||||
| APP_LIB_DEPS = -L$(TOP)/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm | ||||
|  | ||||
| # omit glw lib for now: | ||||
| SRC_DIRS = mesa glu glut/glx | ||||
|  | ||||
| @@ -10,7 +10,7 @@ CONFIG_NAME = default | ||||
| # Version info | ||||
| MESA_MAJOR=7 | ||||
| MESA_MINOR=0 | ||||
| MESA_TINY=2 | ||||
| MESA_TINY=3 | ||||
|  | ||||
| # external projects.  This should be useless now that we use libdrm. | ||||
| DRM_SOURCE_PATH=$(TOP)/../drm | ||||
| @@ -30,9 +30,11 @@ MKDEP_OPTIONS = -fdepend | ||||
| MAKE = make | ||||
| INSTALL = $(TOP)/bin/minstall | ||||
|  | ||||
| # Python and flags (generally only needed by the developers) | ||||
| # Tools for regenerating glapi (generally only needed by the developers) | ||||
| PYTHON2 = python | ||||
| PYTHON_FLAGS = -t -O -O | ||||
| INDENT = indent | ||||
| INDENT_FLAGS = -i4 -nut -br -brs -npcs -ce -T GLubyte -T GLbyte -T Bool | ||||
|  | ||||
| # Library names (base name) | ||||
| GL_LIB = GL | ||||
|   | ||||
| @@ -22,4 +22,5 @@ GLUT_LIB_DEPS = | ||||
| GLW_LIB_DEPS =  | ||||
|  | ||||
| # Need to specify all libraries we may need | ||||
| APP_LIB_DEPS = $(EXTRA_LIB_PATH) -lX11 -lXmu -lXt -lXi -lpthread -lstdc++ -lm | ||||
| APP_LIB_DEPS = $(EXTRA_LIB_PATH) -lX11 -lXext -lXmu -lXt -lXi -lpthread \ | ||||
| 	-lstdc++ -lm | ||||
|   | ||||
| @@ -20,4 +20,5 @@ OSMESA_LIB_DEPS = | ||||
| GLU_LIB_DEPS =  | ||||
| GLUT_LIB_DEPS =  | ||||
| GLW_LIB_DEPS =  | ||||
| APP_LIB_DEPS = $(EXTRA_LIB_PATH) -lX11 -lXmu -lXt -lXi -lpthread -lstdc++ -lm | ||||
| APP_LIB_DEPS = $(EXTRA_LIB_PATH) -lX11 -lXext -lXmu -lXt -lXi -lpthread \ | ||||
| 	-lstdc++ -lm | ||||
|   | ||||
| @@ -20,4 +20,5 @@ OSMESA_LIB_DEPS = | ||||
| GLU_LIB_DEPS =  | ||||
| GLUT_LIB_DEPS =  | ||||
| GLW_LIB_DEPS =  | ||||
| APP_LIB_DEPS = $(EXTRA_LIB_PATH) -lX11 -lXmu -lXt -lXi -lpthread -lstdc++ -lm | ||||
| APP_LIB_DEPS = $(EXTRA_LIB_PATH) -lX11 -lXext -lXmu -lXt -lXi -lpthread \ | ||||
| 	-lstdc++ -lm | ||||
|   | ||||
| @@ -342,7 +342,7 @@ will fix the problem. | ||||
|  | ||||
| <h2>4.1 How can I contribute?</a></h2> | ||||
| <p> | ||||
| First, join the <a href="http://www.mesa3d.org/lists.html>Mesa3d-dev | ||||
| First, join the <a href="http://www.mesa3d.org/lists.html">Mesa3d-dev | ||||
| mailing list</a>. | ||||
| That's where Mesa development is discussed. | ||||
| </a></p> | ||||
|   | ||||
| @@ -1,15 +1,15 @@ | ||||
| <html> | ||||
| <html><head><title>Mesa fbdev/DRI Environment</title> | ||||
|  | ||||
|  | ||||
| <TITLE>Mesa fbdev/DRI Environment</TITLE> | ||||
|  | ||||
| <link rel="stylesheet" type="text/css" href="mesa.css"></head> | ||||
|  | ||||
| <BODY> | ||||
| <body> | ||||
|  | ||||
| <center><H1>Mesa fbdev/DRI Drivers</H1></center> | ||||
| <center><h1>Mesa fbdev/DRI Drivers</h1></center> | ||||
| <br> | ||||
|  | ||||
|  | ||||
| <H1>1. Introduction</H1> | ||||
| <h1>1. Introduction</h1> | ||||
|  | ||||
| <p> | ||||
| The fbdev/DRI environment supports hardware-accelerated 3D rendering without | ||||
| @@ -22,54 +22,131 @@ Contributors to this project include Jon Smirl, Keith Whitwell and Dave Airlie. | ||||
|  | ||||
| <p> | ||||
| Applications in the fbdev/DRI environment use | ||||
| the <a href="MiniGXL.html"> MiniGLX</a> interface to choose pixel | ||||
| the <a href="http://www.nabble.com/file/p15480666/MiniGXL.html"> MiniGLX</a> interface to choose pixel | ||||
| formats, create rendering contexts, etc.  It's a subset of the GLX and | ||||
| Xlib interfaces allowing some degree of application portability between | ||||
| the X and X-less environments. | ||||
| </p> | ||||
|  | ||||
| <p> | ||||
| Some of the files needed for building this configuration are not included | ||||
| in the normal Mesa releases so you'll need to get the latest sources | ||||
| sources from the <a href="repository.html">git repository</a>. | ||||
| Note that this environment is not well-supported and these instructions | ||||
| may not be completely up to date. | ||||
| </p> | ||||
| <br> | ||||
|  | ||||
|  | ||||
|  | ||||
| <h1>2. Compilation</h1> | ||||
|  | ||||
| <p> | ||||
| You'll need the DRM and pciaccess libraries.  Check with: | ||||
|  | ||||
| <h2>2.1 glxproto</h2> | ||||
|  | ||||
| Get <a href="http://cvsweb.xfree86.org/cvsweb/*checkout*/xc/include/GL/glxproto.h?rev=1.9">glxproto.h</a>. Copy it to the /mesa/include/GL/ directory. | ||||
| </p> | ||||
| <pre> | ||||
|    pkg-config --modversion libdrm | ||||
|    pkg-config --modversion pciaccess | ||||
|  | ||||
| <h2>2.2 libpciaccess</h2> | ||||
| <p> | ||||
| Check if you have libpciaccess installed: | ||||
| </p> | ||||
|  | ||||
| <pre>pkg-config --modversion pciaccess | ||||
| </pre> | ||||
| <p> | ||||
| If not you can download the latest code from: | ||||
| </p> | ||||
| <pre>   git clone git://anongit.freedesktop.org/git/xorg/lib/libpciaccess | ||||
| </pre> | ||||
| <p> | ||||
| Run autogen.sh to generate a configure file. autogen.sh uses autoconf | ||||
| utility. This utility may not be installed with your linux distro, | ||||
| check if it is available. if not you can use your package manager or | ||||
| type: | ||||
| </p> | ||||
| <pre>sudo apt-get install autoconf | ||||
| </pre> | ||||
| The next step is to install the libpciaccess library.  | ||||
| <pre>make | ||||
| make install | ||||
| </pre> | ||||
| <p> Now your libpciaccess.a file is saved into /usr/local/lib | ||||
| directory. If you have a libpciaccess.a in /usr/lib you may simply copy | ||||
| and overwrite these files. Don't forget to copy libpciaccess.pc file to | ||||
| /usr/lib/pkgconfig, which is also located in /usr/local/lib/pkgconfig/. | ||||
| Or you may use the following system variables: | ||||
| </p> | ||||
| <pre>export LD_LIBRARY_PATH=/usr/local/lib | ||||
| export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig | ||||
| </pre> | ||||
|  | ||||
| <p> | ||||
| You can get them from the git repository with: | ||||
| <h2>2.3 drm</h2> | ||||
|  | ||||
| <p>The next step is to compile the drm. DRM consists of two seperate parts, | ||||
| the DRM client library(lindrm.so) and kernel device module(such as | ||||
| radeon.ko). We need to make a small change in kernel device module. So | ||||
| you need to download the kernel source. You may choose the nearest | ||||
| mirror from www.kernel.org, or you are using Fedora Core 5, for | ||||
| example, you may need to install RPMs such as: | ||||
| kernel-smp-devel-2.16.15-1.2054_FC5.i686.rpm | ||||
| kernel-devel-2.6.15-1.2054_FC5.i686.rpm | ||||
| etc. You can find a detailed information <a href="http://www.howtoforge.com/kernel_compilation_fedora">here.</a> | ||||
| </p> | ||||
|  | ||||
| <p>You will find drm_drv.c at /usr/src/LINUX-VERSION/drivers/char/drm/. Edit this code and comment out the following part: | ||||
| </p> | ||||
|  | ||||
| <pre> | ||||
|    git clone git://anongit.freedesktop.org/git/mesa/drm | ||||
|    git clone git://anongit.freedesktop.org/git/xorg/lib/libpciaccess | ||||
|    /* || | ||||
|    ((ioctl->flags & DRM_MASTER) && !priv->master)*/ | ||||
| </pre> | ||||
|  | ||||
| <p> | ||||
| See the README files in those projects for build/install instructions. | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <p> | ||||
| Now you are ready to compile your kernel. If your kernel version is | ||||
| identical to the version you have compiled, you can simply over write | ||||
| your new "ko" files over older ones. If you have compiled a different | ||||
| kernel, you must configure your grub or lilo to be able to boot your | ||||
| new kernel. <p> | ||||
| You'll need fbdev header files.  Check with: | ||||
| </p> | ||||
| <pre> | ||||
|    ls -l /usr/include/linux/fb.h | ||||
|    ls -l /usr/include/linux/fb. | ||||
| </pre> | ||||
| <p>This file may be missing if you have not installed linux header files. | ||||
|  | ||||
| <p> | ||||
| Compile Mesa with the 'linux-solo' configuration: | ||||
|  | ||||
| <h2>2.4 Mesa</h2> | ||||
|  | ||||
| </p><p>Get latest development Mesa sources from git repository | ||||
| (currently 7.1-prerelease) | ||||
| </p> | ||||
| <pre> | ||||
|    make linux-solo | ||||
|    git clone git://anongit.freedesktop.org/git/mesa/mesa | ||||
| </pre> | ||||
|  | ||||
| <p>You will need the makedepend utility which is a part of mesa project | ||||
| to build your linux-solo. You probably wont have this utility. You can | ||||
| download its source from following git repulsitory: | ||||
| </p> | ||||
| <pre> | ||||
|    git clone git://anongit.freedesktop.org/git/xorg/util/makedepend | ||||
| </pre> | ||||
|  | ||||
| <p>Get the latest stable mesa version from SourceForge (currently 7.0.3) | ||||
| <a href="http://sourceforge.net/project/showfiles.php?group_id=3">http://sourceforge.net/project/showfiles.php?group_id=3</a> | ||||
| </p> | ||||
|  | ||||
| <p>Copy the miniglx folder from 7.1-prerelease to 7.0.3. | ||||
| You may also extract GLUT to 7.0.3 version at this step.  | ||||
| </p> | ||||
|  | ||||
| <p>Edit linux-solo.conf at /conf directory, just only compile the | ||||
| graphics driver you need, delete the unwanted drivers names from the | ||||
| list(some drivers are causing problems...) | ||||
| </p> | ||||
| <pre> | ||||
|    while(build==0) | ||||
|    { | ||||
|      make linux-solo | ||||
|  | ||||
|      There will be some missing header files, copy them from 7.1-prerelease | ||||
|    } | ||||
| </pre> | ||||
|  | ||||
| <p> | ||||
| @@ -77,22 +154,40 @@ When complete you should have the following: | ||||
| </p> | ||||
| <ul> | ||||
| <li>lib/libGL.so - the GL library which applications link with | ||||
| <li>lib/*_dri_so - DRI drivers | ||||
| <li>lib/miniglx.conf - sample MiniGLX config file | ||||
| <li>progs/miniglx/* - several MiniGLX sample programs | ||||
| </ul> | ||||
| </li><li>lib/*_dri_so - DRI drivers | ||||
| </li><li>lib/miniglx.conf - sample MiniGLX config file | ||||
| </li><li>progs/miniglx/* - several MiniGLX sample programs | ||||
| </li></ul> | ||||
|  | ||||
| To install these files into appropriate locations in system: | ||||
| <pre> | ||||
|    make install | ||||
| </pre> | ||||
|  | ||||
| Now your openGL libraries are copied to /usr/local/lib and | ||||
| miniglx.conf is copied to /etc. You may copy them to /usr/lib and | ||||
| overwrite your old GL libraries. Or you may export following variable: | ||||
|  | ||||
| <pre> | ||||
|    export LIBGL_DRIVERS_PATH=/usr/local/lib | ||||
| </pre> | ||||
| <br> | ||||
|  | ||||
|  | ||||
| <h1>3. Using fbdev/DRI</h1> | ||||
|  | ||||
| <p> | ||||
| If an X server currently running, exit/stop it so you're working from | ||||
| the console. | ||||
| the console. Following command shuts down the x window and also the multi user support. | ||||
| </p> | ||||
| <pre> | ||||
|    init 1 | ||||
| </pre> | ||||
|  | ||||
|  | ||||
| <h2>3.1 Load Kernel Modules</h2> | ||||
| <p>Also you may define the runlevel as 1 in "/etc/inittab". Your system | ||||
| will always start in single user mode and without x-window with this | ||||
| option set. | ||||
| </p><h2>3.1 Load Kernel Modules</h2> | ||||
|  | ||||
| <p> | ||||
| You'll need to load the kernel modules specific to your graphics hardware. | ||||
| @@ -106,8 +201,7 @@ As root, the kernel modules can be loaded as follows: | ||||
| <p> | ||||
| If you have Intel i915/i945 hardware: | ||||
| </p> | ||||
| <pre> | ||||
|    modprobe agpgart            # the AGP GART module | ||||
| <pre>   modprobe agpgart            # the AGP GART module | ||||
|    modprobe intelfb            # the Intel fbdev driver | ||||
|    modprobe i915               # the i915/945 DRI kernel module | ||||
| </pre> | ||||
| @@ -115,8 +209,7 @@ If you have Intel i915/i945 hardware: | ||||
| <p> | ||||
| If you have ATI Radeon/R200 hardware: | ||||
| </p> | ||||
| <pre> | ||||
|    modprobe agpgart            # the AGP GART module | ||||
| <pre>   modprobe agpgart            # the AGP GART module | ||||
|    modprobe radeonfb           # the Radeon fbdev driver | ||||
|    modprobe radeon             # the Radeon DRI kernel module | ||||
| </pre> | ||||
| @@ -124,8 +217,7 @@ If you have ATI Radeon/R200 hardware: | ||||
| <p> | ||||
| If you have ATI Rage 128 hardware: | ||||
| </p> | ||||
| <pre> | ||||
|    modprobe agpgart            # the AGP GART module | ||||
| <pre>   modprobe agpgart            # the AGP GART module | ||||
|    modprobe aty128fb           # the Rage 128 fbdev driver | ||||
|    modprobe r128               # the Rage 128 DRI kernel module | ||||
| </pre> | ||||
| @@ -133,8 +225,7 @@ If you have ATI Rage 128 hardware: | ||||
| <p> | ||||
| If you have Matrox G200/G400 hardware: | ||||
| </p> | ||||
| <pre> | ||||
|    modprobe agpgart            # the AGP GART module | ||||
| <pre>   modprobe agpgart            # the AGP GART module | ||||
|    modprobe mgafb              # the Matrox fbdev driver | ||||
|    modprobe mga                # the Matrox DRI kernel module | ||||
| </pre> | ||||
| @@ -142,8 +233,7 @@ If you have Matrox G200/G400 hardware: | ||||
| <p> | ||||
| To verify that the agpgart, fbdev and drm modules are loaded: | ||||
| </p> | ||||
| <pre> | ||||
|    ls -l /dev/agpgart /dev/fb* /dev/dri | ||||
| <pre>   ls -l /dev/agpgart /dev/fb* /dev/dri | ||||
| </pre> | ||||
| <p> | ||||
| Alternately, use lsmod to inspect the currently installed modules. | ||||
| @@ -154,16 +244,15 @@ If you have problems, look at the output of dmesg. | ||||
| <h2>3.2 Configuration File</h2> | ||||
|  | ||||
| <p> | ||||
| Copy the sample miniglx.conf to /etc/miniglx.conf and review/edit its contents. | ||||
| review/edit /etc/miniglx.conf. | ||||
| Alternately, the MINIGLX_CONF environment variable can be used to | ||||
| indicate the location of miniglx.conf | ||||
| </p> | ||||
|  | ||||
| To determine the pciBusID value, run lspci and examine the output. | ||||
| For example: | ||||
| </p> | ||||
| <pre> | ||||
|    /sbin/lspci: | ||||
| <p></p> | ||||
| <pre>   /sbin/lspci: | ||||
|    00:02.0 VGA compatible controller: Intel Corporation 82915G/GV/910GL Express Chipset Family Graphics Controller (rev 04) | ||||
| </pre> | ||||
| <p> | ||||
| @@ -186,15 +275,13 @@ for example. | ||||
| Change to the <code>Mesa/progs/miniglx/</code> directory and | ||||
| start the sample_server program in the background: | ||||
| </p> | ||||
| <pre> | ||||
|    ./sample_server & | ||||
| <pre>   ./sample_server & | ||||
| </pre> | ||||
|  | ||||
| <p> | ||||
| Then try running the <code>miniglxtest</code> program: | ||||
| </p> | ||||
| <pre> | ||||
|    ./miniglxtest | ||||
| <pre>   ./miniglxtest | ||||
| </pre> | ||||
| <p> | ||||
| You should see a rotating quadrilateral which changes color as it rotates. | ||||
| @@ -205,7 +292,7 @@ It will exit automatically after a bit. | ||||
| If you run other tests in the miniglx/ directory, you may want to run | ||||
| them from a remote shell so that you can stop them with ctrl-C. | ||||
| </p> | ||||
|  | ||||
| <br> | ||||
|  | ||||
|  | ||||
| <h1>4.0 Troubleshooting</h1> | ||||
| @@ -214,8 +301,7 @@ them from a remote shell so that you can stop them with ctrl-C. | ||||
| <li> | ||||
| If you try to run miniglxtest and get the following: | ||||
| <br> | ||||
| <pre> | ||||
|    [miniglx] failed to probe chipset | ||||
| <pre>   [miniglx] failed to probe chipset | ||||
|    connect: Connection refused | ||||
|    server connection lost | ||||
| </pre> | ||||
| @@ -229,7 +315,7 @@ It means that the sample_server process is not running. | ||||
| <h1>5.0 Programming Information</h1> | ||||
|  | ||||
| <p> | ||||
| OpenGL/Mesa is interfaced to fbdev via the <a href="MiniGLX.html">MiniGLX</a> | ||||
| OpenGL/Mesa is interfaced to fbdev via the <a href="http://www.nabble.com/file/p15480666/MiniGLX.html">MiniGLX</a> | ||||
| interface. | ||||
| MiniGLX is a subset of Xlib and GLX API functions which provides just | ||||
| enough functionality to setup OpenGL rendering and respond to simple | ||||
| @@ -250,5 +336,6 @@ See the <code>GL/miniglx.h</code> header file for details. | ||||
| </p> | ||||
|  | ||||
|  | ||||
|  | ||||
| </body> | ||||
| </html> | ||||
|   | ||||
							
								
								
									
										21
									
								
								docs/memory.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								docs/memory.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| <HTML> | ||||
|  | ||||
| <TITLE>Mesa News</TITLE> | ||||
|  | ||||
| <head><link rel="stylesheet" type="text/css" href="mesa.css"></head> | ||||
|  | ||||
| <BODY> | ||||
|  | ||||
| <body bgcolor="#eeeeee"> | ||||
|  | ||||
| <H1>DRI Memory Management</H1> | ||||
|  | ||||
| <p> | ||||
| Thomas Hellström's  | ||||
| <a href="http://www.tungstengraphics.com/mm.pdf">Memory Management | ||||
| whitepaper</a> describes the goals, design and implementation of the | ||||
| new DRI memory management system. | ||||
| </p> | ||||
|  | ||||
| </body> | ||||
| </html> | ||||
| @@ -11,6 +11,30 @@ | ||||
| <H1>News</H1> | ||||
|  | ||||
|  | ||||
| <h2>April 4, 2008</h2> | ||||
| <p> | ||||
| <a href="relnotes-7.0.3.html">Mesa 7.0.3</a> is released. | ||||
| This is a bug-fix release. | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <h2>November 13, 2007</h2> | ||||
|  | ||||
| <p> | ||||
| Gallium3D is the codename for the new Mesa device driver architecture | ||||
| which is currently under development. | ||||
| A <a href="http://www.tungstengraphics.com/wiki/index.php/Gallium3D" | ||||
| target="_parent"> summary</a> of the architecture can be found on the | ||||
| Tungsten Graphics website. | ||||
| </p> | ||||
| <p> | ||||
| Gallium3D development is taking place on the <em>gallium-0.1</em> branch | ||||
| of the git repository. | ||||
| Currently, there's only a software-only driver and an Intel i915/945 driver | ||||
| but other drivers will be coming... | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <h2>November 10, 2007</h2> | ||||
| <p> | ||||
| <a href="relnotes-7.0.2.html">Mesa 7.0.2</a> is released. | ||||
|   | ||||
							
								
								
									
										75
									
								
								docs/relnotes-7.0.3.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								docs/relnotes-7.0.3.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | ||||
| <HTML> | ||||
|  | ||||
| <TITLE>Mesa Release Notes</TITLE> | ||||
|  | ||||
| <head><link rel="stylesheet" type="text/css" href="mesa.css"></head> | ||||
|  | ||||
| <BODY> | ||||
|  | ||||
| <body bgcolor="#eeeeee"> | ||||
|  | ||||
| <H1>Mesa 7.0.3 Release Notes / April 4, 2008</H1> | ||||
|  | ||||
| <p> | ||||
| Mesa 7.0.3 is a stable release with bug fixes since version 7.0.2. | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <h2>MD5 checksums</h2> | ||||
| <pre> | ||||
| </pre> | ||||
|  | ||||
|  | ||||
| <h2>Bug fixes</h2> | ||||
| <ul> | ||||
| <li>Added missing glw.pc.in file to release tarball | ||||
| <li>Fix GLUT/Fortran issues | ||||
| <li>GLSL gl_FrontLightModelProduct.sceneColor variable wasn't defined | ||||
| <li>Fix crash upon GLSL variable array indexes (not yet supported) | ||||
| <li>Two-sided stencil test didn't work in software rendering | ||||
| <li>Fix two-sided lighting bugs/crashes (bug 13368) | ||||
| <li>GLSL gl_FrontFacing didn't work properly | ||||
| <li>glGetActiveUniform returned incorrect sizes (bug 13751) | ||||
| <li>Fix several bugs relating to uniforms and attributes in GLSL API (Bruce Merry, bug 13753) | ||||
| <li>glTexImage3D(GL_PROXY_TEXTURE_3D) mis-set teximage depth field | ||||
| <li>Fixed GLX indirect vertex array rendering bug (14197) | ||||
| <li>Fixed crash when deleting framebuffer objects (bugs 13507, 14293) | ||||
| <li>User-defined clip planes enabled for R300 (bug 9871) | ||||
| <li>Fixed glBindTexture() crash upon bad target (bug 14514) | ||||
| <li>Fixed potential crash in glDrawPixels(GL_DEPTH_COMPONENT) (bug 13915) | ||||
| <li>Bad strings given to glProgramStringARB() didn't generate GL_INVALID_OPERATION | ||||
| <li>Fixed minor point rasterization regression (bug 11016) | ||||
| <li>state.texenv.color state var didn't work in GL_ARB_fragment_program (bug 14931) | ||||
| <li>glBitmap from a PBO didn't always work | ||||
| <li>glGetTexImage into a PBO didn't always work | ||||
| <li>Comments at the end of ARB vertex/fragment programs crashed the parser | ||||
| </ul> | ||||
|  | ||||
| <h2>Changes</h2> | ||||
| <ul> | ||||
| <li>Updated glext.h to version 40 | ||||
| </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
| <h2>Driver Status</h2> | ||||
|  | ||||
| <pre> | ||||
| Driver			Status | ||||
| ----------------------	---------------------- | ||||
| DRI drivers		varies with the driver | ||||
| XMesa/GLX (on Xlib)	implements OpenGL 2.1 | ||||
| OSMesa (off-screen)	implements OpenGL 2.1 | ||||
| Windows/Win32		implements OpenGL 2.1 | ||||
| Glide (3dfx Voodoo1/2)	implements OpenGL 1.3 | ||||
| SVGA			unsupported | ||||
| Wind River UGL		unsupported | ||||
| DJGPP			unsupported | ||||
| GGI			unsupported | ||||
| BeOS			unsupported | ||||
| Allegro			unsupported | ||||
| D3D			unsupported | ||||
| </pre> | ||||
|  | ||||
| </body> | ||||
| </html> | ||||
| @@ -20,6 +20,7 @@ The release notes summarize what's new or changed in each Mesa release. | ||||
| </p> | ||||
|  | ||||
| <UL> | ||||
| <LI><A HREF="relnotes-7.0.3.html">7.0.3 release notes</A> | ||||
| <LI><A HREF="relnotes-7.0.2.html">7.0.2 release notes</A> | ||||
| <LI><A HREF="relnotes-7.0.1.html">7.0.1 release notes</A> | ||||
| <LI><A HREF="relnotes-7.0.html">7.0 release notes</A> | ||||
|   | ||||
| @@ -48,6 +48,7 @@ in Mesa: | ||||
| <li>The inverse trig functions asin(), acos(), and atan() are not implemented | ||||
| <li>The gl_Color and gl_SecondaryColor varying vars are interpolated | ||||
|     without perspective correction | ||||
| <li>Floating point literal suffixes 'f' and 'F' aren't allowed. | ||||
| </ul> | ||||
|  | ||||
| <p> | ||||
|   | ||||
| @@ -46,9 +46,9 @@ extern "C" { | ||||
| /*************************************************************/ | ||||
|  | ||||
| /* Header file version number, required by OpenGL ABI for Linux */ | ||||
| /* glext.h last updated 2007/02/12 */ | ||||
| /* glext.h last updated 2008/03/24 */ | ||||
| /* Current version at http://www.opengl.org/registry/ */ | ||||
| #define GL_GLEXT_VERSION 39 | ||||
| #define GL_GLEXT_VERSION 40 | ||||
|  | ||||
| #ifndef GL_VERSION_1_2 | ||||
| #define GL_UNSIGNED_BYTE_3_3_2            0x8032 | ||||
| @@ -3091,8 +3091,8 @@ extern "C" { | ||||
| #ifndef GL_EXT_framebuffer_blit | ||||
| #define GL_READ_FRAMEBUFFER_EXT           0x8CA8 | ||||
| #define GL_DRAW_FRAMEBUFFER_EXT           0x8CA9 | ||||
| #define GL_READ_FRAMEBUFFER_BINDING_EXT   GL_FRAMEBUFFER_BINDING_EXT | ||||
| #define GL_DRAW_FRAMEBUFFER_BINDING_EXT   0x8CAA | ||||
| #define GL_DRAW_FRAMEBUFFER_BINDING_EXT   GL_FRAMEBUFFER_BINDING_EXT | ||||
| #define GL_READ_FRAMEBUFFER_BINDING_EXT   0x8CAA | ||||
| #endif | ||||
|  | ||||
| #ifndef GL_EXT_framebuffer_multisample | ||||
| @@ -3379,6 +3379,9 @@ extern "C" { | ||||
| #define GL_RGBA_INTEGER_MODE_EXT          0x8D9E | ||||
| #endif | ||||
|  | ||||
| #ifndef GL_GREMEDY_frame_terminator | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /*************************************************************/ | ||||
|  | ||||
| @@ -7252,6 +7255,14 @@ typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint | ||||
| typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); | ||||
| #endif | ||||
|  | ||||
| #ifndef GL_GREMEDY_frame_terminator | ||||
| #define GL_GREMEDY_frame_terminator 1 | ||||
| #ifdef GL_GLEXT_PROTOTYPES | ||||
| GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); | ||||
| #endif /* GL_GLEXT_PROTOTYPES */ | ||||
| typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
|   | ||||
| @@ -75,7 +75,7 @@ typedef void (GLUTCALLBACK *GLUTmenuStatusFCB) (int *, int *, int *); | ||||
| typedef void (GLUTCALLBACK *GLUTidleFCB) (void); | ||||
|  | ||||
| /* Functions that set and return Fortran callback functions. */ | ||||
| GLUTAPI void* APIENTRY __glutGetFCB(int which); | ||||
| GLUTAPI void APIENTRY __glutSetFCB(int which, void *func); | ||||
| GLUTAPI GLUTproc APIENTRY __glutGetFCB(int which); | ||||
| GLUTAPI void APIENTRY __glutSetFCB(int which, GLUTproc func); | ||||
|  | ||||
| #endif  /* __glutf90_h__ */ | ||||
|   | ||||
| @@ -16,6 +16,10 @@ | ||||
| #include "trackball.h" | ||||
|  | ||||
|  | ||||
| #ifndef M_PI | ||||
| #define M_PI 3.14159265358979323846 | ||||
| #endif | ||||
|  | ||||
| #define DEG_TO_RAD(DEG)  ((DEG) * M_PI / 180.0) | ||||
|  | ||||
| #define TEXTURE_FILE "../images/reflect.rgb" | ||||
|   | ||||
							
								
								
									
										1
									
								
								progs/tests/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								progs/tests/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -42,6 +42,7 @@ readtex.c | ||||
| readtex.h | ||||
| seccolor | ||||
| sharedtex | ||||
| shader_api | ||||
| stencil_wrap | ||||
| stencilwrap | ||||
| tex1d | ||||
|   | ||||
| @@ -56,6 +56,7 @@ SOURCES = \ | ||||
| 	projtex.c \ | ||||
| 	readrate.c \ | ||||
| 	seccolor.c \ | ||||
| 	shader_api.c \ | ||||
| 	sharedtex.c \ | ||||
| 	stencilwrap.c \ | ||||
| 	stencil_wrap.c \ | ||||
|   | ||||
							
								
								
									
										337
									
								
								progs/tests/shader_api.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										337
									
								
								progs/tests/shader_api.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,337 @@ | ||||
| /* Tests to validate fixes to various bugs in src/mesa/shader/shader_api.c | ||||
|  * | ||||
|  * Written by Bruce Merry | ||||
|  */ | ||||
| #include <string.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #define GL_GLEXT_PROTOTYPES | ||||
| #include <GL/glut.h> | ||||
|  | ||||
| static void assert_test(const char *file, int line, int cond, const char *msg) | ||||
| { | ||||
|    if (!cond) | ||||
|       fprintf(stderr, "%s:%d assertion \"%s\" failed\n", file, line, msg); | ||||
| } | ||||
|  | ||||
| #undef assert | ||||
| #define assert(x) assert_test(__FILE__, __LINE__, (x), #x) | ||||
|  | ||||
| static void assert_no_error_test(const char *file, int line) | ||||
| { | ||||
|    GLenum err; | ||||
|  | ||||
|    err = glGetError(); | ||||
|    if (err != GL_NO_ERROR) | ||||
|       fprintf(stderr, "%s:%d received error %s\n", | ||||
|               file, line, gluErrorString(err)); | ||||
| } | ||||
|  | ||||
| #define assert_no_error() assert_no_error_test(__FILE__, __LINE__) | ||||
|  | ||||
| static void assert_error_test(const char *file, int line, GLenum expect) | ||||
| { | ||||
|    GLenum err; | ||||
|  | ||||
|    err = glGetError(); | ||||
|    if (err != expect) | ||||
|       fprintf(stderr, "%s:%d expected %s but received %s\n", | ||||
|               file, line, gluErrorString(expect), gluErrorString(err)); | ||||
|    while (glGetError()); /* consume any following errors */ | ||||
| } | ||||
|  | ||||
| #define assert_error(err) assert_error_test(__FILE__, __LINE__, (err)) | ||||
|  | ||||
| static void check_status(GLuint id, GLenum pname, void (*query)(GLuint, GLenum, GLint *)) | ||||
| { | ||||
|     GLint status; | ||||
|  | ||||
|     query(id, pname, &status); | ||||
|     if (!status) | ||||
|     { | ||||
|         char info[65536]; | ||||
|  | ||||
|         fprintf(stderr, "Compilation/link failure:\n"); | ||||
|         glGetInfoLogARB(id, sizeof(info), NULL, info); | ||||
|         fprintf(stderr, "%s\n", info); | ||||
|         exit(1); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void check_compile_status(GLuint id) | ||||
| { | ||||
|    check_status(id, GL_COMPILE_STATUS, glGetShaderiv); | ||||
| } | ||||
|  | ||||
| static void check_link_status(GLuint id) | ||||
| { | ||||
|    check_status(id, GL_LINK_STATUS, glGetProgramiv); | ||||
| } | ||||
|  | ||||
| static GLuint make_shader(GLenum type, const char *src) | ||||
| { | ||||
|    GLuint id; | ||||
|  | ||||
|    assert_no_error(); | ||||
|    id = glCreateShader(type); | ||||
|    glShaderSource(id, 1, &src, NULL); | ||||
|    glCompileShader(id); | ||||
|    check_compile_status(id); | ||||
|    assert_no_error(); | ||||
|    return id; | ||||
| } | ||||
|  | ||||
| static GLuint make_program(const char *vs_src, const char *fs_src) | ||||
| { | ||||
|    GLuint id, vs, fs; | ||||
|  | ||||
|    assert_no_error(); | ||||
|    id = glCreateProgram(); | ||||
|    if (vs_src) { | ||||
|       vs = make_shader(GL_VERTEX_SHADER, vs_src); | ||||
|       glAttachShader(id, vs); | ||||
|       glDeleteShader(vs); | ||||
|    } | ||||
|    if (fs_src) { | ||||
|       fs = make_shader(GL_FRAGMENT_SHADER, fs_src); | ||||
|       glAttachShader(id, fs); | ||||
|       glDeleteShader(fs); | ||||
|    } | ||||
|    glLinkProgram(id); | ||||
|    check_link_status(id); | ||||
|    glUseProgram(id); | ||||
|    glDeleteProgram(id); | ||||
|    assert_no_error(); | ||||
|    return id; | ||||
| } | ||||
|  | ||||
| static void test_uniform_size_type1(const char *glslType, GLenum glType, const char *el) | ||||
| { | ||||
|    char buffer[1024]; | ||||
|    GLuint program; | ||||
|    GLint active, i; | ||||
|    GLenum type; | ||||
|    GLint size; | ||||
|  | ||||
|    printf("  Running subtest %s\n", glslType); fflush(stdout); | ||||
|    sprintf(buffer, "#version 120\nuniform %s m[60];\nvoid main() { gl_Position[0] = m[59]%s; }\n", | ||||
|            glslType, el); | ||||
|  | ||||
|    program = make_program(buffer, NULL); | ||||
|    glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &active); | ||||
|    assert_no_error(); | ||||
|    for (i = 0; i < active; i++) { | ||||
|       size = -1; | ||||
|       type = 0; | ||||
|       glGetActiveUniform(program, i, sizeof(buffer), NULL, &size, &type, buffer); | ||||
|       assert_no_error(); | ||||
|       if (strncmp(buffer, "m", 1) == 0) | ||||
|          break; | ||||
|    } | ||||
|    assert(i < active); /* Otherwise the compiler optimised it out */ | ||||
|    assert(type == glType); | ||||
|    assert(size == 60); | ||||
| } | ||||
|  | ||||
| static void test_uniform_size_type(void) | ||||
| { | ||||
|    test_uniform_size_type1("float", GL_FLOAT, ""); | ||||
|    test_uniform_size_type1("vec2", GL_FLOAT_VEC2, "[0]"); | ||||
|    test_uniform_size_type1("vec3", GL_FLOAT_VEC3, "[0]"); | ||||
|    test_uniform_size_type1("vec4", GL_FLOAT_VEC4, "[0]"); | ||||
|  | ||||
|    test_uniform_size_type1("bool", GL_BOOL, " ? 1.0 : 0.0"); | ||||
|    test_uniform_size_type1("bvec2", GL_BOOL_VEC2, "[0] ? 1.0 : 0.0"); | ||||
|    test_uniform_size_type1("bvec3", GL_BOOL_VEC3, "[0] ? 1.0 : 0.0"); | ||||
|    test_uniform_size_type1("bvec4", GL_BOOL_VEC4, "[0] ? 1.0 : 0.0"); | ||||
|  | ||||
|    test_uniform_size_type1("int", GL_INT, ""); | ||||
|    test_uniform_size_type1("ivec2", GL_INT_VEC2, "[0]"); | ||||
|    test_uniform_size_type1("ivec3", GL_INT_VEC3, "[0]"); | ||||
|    test_uniform_size_type1("ivec4", GL_INT_VEC4, "[0]"); | ||||
|  | ||||
|    test_uniform_size_type1("mat2", GL_FLOAT_MAT2, "[0][0]"); | ||||
|    test_uniform_size_type1("mat3", GL_FLOAT_MAT3, "[0][0]"); | ||||
|    test_uniform_size_type1("mat4", GL_FLOAT_MAT4, "[0][0]"); | ||||
|    test_uniform_size_type1("mat2x3", GL_FLOAT_MAT2x3, "[0][0]"); | ||||
|    test_uniform_size_type1("mat2x4", GL_FLOAT_MAT2x4, "[0][0]"); | ||||
|    test_uniform_size_type1("mat3x2", GL_FLOAT_MAT3x2, "[0][0]"); | ||||
|    test_uniform_size_type1("mat3x4", GL_FLOAT_MAT3x4, "[0][0]"); | ||||
|    test_uniform_size_type1("mat4x2", GL_FLOAT_MAT4x2, "[0][0]"); | ||||
|    test_uniform_size_type1("mat4x3", GL_FLOAT_MAT4x3, "[0][0]"); | ||||
| } | ||||
|  | ||||
| static void test_attrib_size_type1(const char *glslType, GLenum glType, const char *el) | ||||
| { | ||||
|    char buffer[1024]; | ||||
|    GLuint program; | ||||
|    GLint active, i; | ||||
|    GLenum type; | ||||
|    GLint size; | ||||
|  | ||||
|    printf("  Running subtest %s\n", glslType); fflush(stdout); | ||||
|    sprintf(buffer, "#version 120\nattribute %s m;\nvoid main() { gl_Position[0] = m%s; }\n", | ||||
|            glslType, el); | ||||
|  | ||||
|    program = make_program(buffer, NULL); | ||||
|    glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &active); | ||||
|    assert_no_error(); | ||||
|    for (i = 0; i < active; i++) { | ||||
|       size = -1; | ||||
|       type = -1; | ||||
|       glGetActiveAttrib(program, i, sizeof(buffer), NULL, &size, &type, buffer); | ||||
|       assert_no_error(); | ||||
|       if (strncmp(buffer, "m", 1) == 0) | ||||
|          break; | ||||
|    } | ||||
|    assert(i < active); /* Otherwise the compiler optimised it out */ | ||||
|    assert(type == glType); | ||||
|    assert(size == 1); | ||||
| } | ||||
|  | ||||
| static void test_attrib_size_type(void) | ||||
| { | ||||
|    test_attrib_size_type1("float", GL_FLOAT, ""); | ||||
|    test_attrib_size_type1("vec2", GL_FLOAT_VEC2, "[0]"); | ||||
|    test_attrib_size_type1("vec3", GL_FLOAT_VEC3, "[0]"); | ||||
|    test_attrib_size_type1("vec4", GL_FLOAT_VEC4, "[0]"); | ||||
|  | ||||
|    test_attrib_size_type1("mat2", GL_FLOAT_MAT2, "[0][0]"); | ||||
|    test_attrib_size_type1("mat3", GL_FLOAT_MAT3, "[0][0]"); | ||||
|    test_attrib_size_type1("mat4", GL_FLOAT_MAT4, "[0][0]"); | ||||
|    test_attrib_size_type1("mat2x3", GL_FLOAT_MAT2x3, "[0][0]"); | ||||
|    test_attrib_size_type1("mat2x4", GL_FLOAT_MAT2x4, "[0][0]"); | ||||
|    test_attrib_size_type1("mat3x2", GL_FLOAT_MAT3x2, "[0][0]"); | ||||
|    test_attrib_size_type1("mat3x4", GL_FLOAT_MAT3x4, "[0][0]"); | ||||
|    test_attrib_size_type1("mat4x2", GL_FLOAT_MAT4x2, "[0][0]"); | ||||
|    test_attrib_size_type1("mat4x3", GL_FLOAT_MAT4x3, "[0][0]"); | ||||
| } | ||||
|  | ||||
| static void test_uniform_array_overflow(void) | ||||
| { | ||||
|    GLuint program; | ||||
|    GLint location; | ||||
|    GLfloat data[128]; | ||||
|  | ||||
|    program = make_program("#version 120\nuniform vec2 x[10];\nvoid main() { gl_Position.xy = x[9]; }\n", NULL); | ||||
|    location = glGetUniformLocation(program, "x"); | ||||
|    assert_no_error(); | ||||
|    glUniform2fv(location, 64, data); | ||||
|    assert_no_error(); | ||||
| } | ||||
|  | ||||
| static void test_uniform_scalar_count(void) | ||||
| { | ||||
|    GLuint program; | ||||
|    GLint location; | ||||
|    GLfloat data[128]; | ||||
|  | ||||
|    program = make_program("#version 110\nuniform vec2 x;\nvoid main() { gl_Position.xy = x; }\n", NULL); | ||||
|    location = glGetUniformLocation(program, "x"); | ||||
|    assert_no_error(); | ||||
|    glUniform2fv(location, 64, data); | ||||
|    assert_error(GL_INVALID_OPERATION); | ||||
| } | ||||
|  | ||||
| static void test_uniform_query_matrix(void) | ||||
| { | ||||
|    GLuint program; | ||||
|    GLfloat data[18]; | ||||
|    GLint i, r, c; | ||||
|    GLint location; | ||||
|  | ||||
|    program = make_program("#version 110\nuniform mat3 m[2];\nvoid main() { gl_Position.xyz = m[1][2]; }\n", NULL); | ||||
|    location = glGetUniformLocation(program, "m"); | ||||
|    for (i = 0; i < 9; i++) | ||||
|       data[i] = i; | ||||
|    for (i = 9; i < 18; i++) | ||||
|       data[i] = 321.0; | ||||
|    glUniformMatrix3fv(location, 1, GL_TRUE, data); | ||||
|  | ||||
|    for (i = 0; i < 18; i++) | ||||
|       data[i] = 123.0; | ||||
|    glGetUniformfv(program, location, data); | ||||
|    for (c = 0; c < 3; c++) | ||||
|       for (r = 0; r < 3; r++) | ||||
|          assert(data[c * 3 + r] == r * 3 + c); | ||||
|    for (i = 9; i < 18; i++) | ||||
|       assert(data[i] == 123.0); | ||||
| } | ||||
|  | ||||
| static void test_uniform_neg_location(void) | ||||
| { | ||||
|    GLuint program; | ||||
|    GLfloat data[4]; | ||||
|  | ||||
|    program = make_program("#version 110\nvoid main() { gl_Position = vec4(1.0, 1.0, 1.0, 1.0); }\n", NULL); | ||||
|    assert_no_error(); | ||||
|    glUniform1i(-1, 1); | ||||
|    assert_no_error(); | ||||
|    glUniform1i(-200, 1); | ||||
|    assert_error(GL_INVALID_OPERATION); | ||||
|    glUniformMatrix2fv(-1, 1, GL_FALSE, data); | ||||
|    assert_no_error(); | ||||
|    glUniformMatrix2fv(-200, 1, GL_FALSE, data); | ||||
|    assert_error(GL_INVALID_OPERATION); | ||||
| } | ||||
|  | ||||
| static void test_uniform_bool_conversion(void) | ||||
| { | ||||
|     GLuint program; | ||||
|     GLint location; | ||||
|     GLint value[16];  /* in case glGetUniformiv goes nuts on the stack */ | ||||
|  | ||||
|     assert_no_error(); | ||||
|     program = make_program("uniform bool b;\nvoid main() { gl_Position.x = b ? 1.5 : 0.5; }\n", NULL); | ||||
|     location = glGetUniformLocation(program, "b"); | ||||
|     assert(location != -1); | ||||
|     assert_no_error(); | ||||
|     glUniform1i(location, 5); | ||||
|     assert_no_error(); | ||||
|     glGetUniformiv(program, location, &value[0]); | ||||
|     assert_no_error(); | ||||
|     assert(value[0] == 1); | ||||
| } | ||||
|  | ||||
| static void test_uniform_multiple_samplers(void) | ||||
| { | ||||
|    GLuint program; | ||||
|    GLint location; | ||||
|    GLint values[2] = {0, 1}; | ||||
|  | ||||
|    assert_no_error(); | ||||
|    program = make_program(NULL, "uniform sampler2D s[2];\nvoid main() { gl_FragColor = texture2D(s[1], vec2(0.0, 0.0)); }\n"); | ||||
|    location = glGetUniformLocation(program, "s[0]"); | ||||
|    if (location == -1)  /* Mesa doesn't currently support indexing */ | ||||
|       location = glGetUniformLocation(program, "s"); | ||||
|    assert(location != -1); | ||||
|    assert_no_error(); | ||||
|    glUniform1iv(location, 2, values); | ||||
|    assert_no_error(); | ||||
| } | ||||
|  | ||||
| static void run_test(const char *name, void (*callback)(void)) | ||||
| { | ||||
|    printf("Running %s\n", name); | ||||
|    fflush(stdout); | ||||
|    callback(); | ||||
| } | ||||
|  | ||||
| #define RUN_TEST(name) run_test(#name, (name)) | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
|    glutInit(&argc, argv); | ||||
|    glutCreateWindow("Mesa bug demo"); | ||||
|  | ||||
|    RUN_TEST(test_uniform_size_type); | ||||
|    RUN_TEST(test_attrib_size_type); | ||||
|    RUN_TEST(test_uniform_array_overflow); | ||||
|    RUN_TEST(test_uniform_scalar_count); | ||||
|    RUN_TEST(test_uniform_query_matrix); | ||||
|    RUN_TEST(test_uniform_neg_location); | ||||
|    RUN_TEST(test_uniform_bool_conversion); | ||||
|    /* Leave this one at the end, since it crashes Mesa's shader compiler */ | ||||
|    RUN_TEST(test_uniform_multiple_samplers); | ||||
|    return 0; | ||||
| } | ||||
| @@ -33,6 +33,7 @@ | ||||
|  | ||||
|  | ||||
| GLenum doubleBuffer; | ||||
| float Z = -6; | ||||
|  | ||||
| static void Init(void) | ||||
| { | ||||
| @@ -40,30 +41,36 @@ static void Init(void) | ||||
|    fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); | ||||
|    fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); | ||||
|  | ||||
|     glClearColor(0.0, 0.0, 1.0, 0.0); | ||||
|    fprintf(stderr, "Press z/Z to translate quad\n"); | ||||
|  | ||||
|    glClearColor(0.0, 0.0, 1.0, 0.0); | ||||
| } | ||||
|  | ||||
| static void Reshape(int width, int height) | ||||
| { | ||||
|  | ||||
|     glViewport(0, 0, (GLint)width, (GLint)height); | ||||
|  | ||||
|     glMatrixMode(GL_PROJECTION); | ||||
|     glLoadIdentity(); | ||||
|     glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); | ||||
|     glFrustum(-1.0, 1.0, -1.0, 1.0, 5, 100.0); | ||||
|     glMatrixMode(GL_MODELVIEW); | ||||
| } | ||||
|  | ||||
| static void Key(unsigned char key, int x, int y) | ||||
| { | ||||
|  | ||||
|     switch (key) { | ||||
|       case 27: | ||||
| 	exit(1); | ||||
|       default: | ||||
| 	return; | ||||
|     case 'z': | ||||
|        Z += 0.5; | ||||
|        break; | ||||
|     case 'Z': | ||||
|        Z -= 0.5; | ||||
|        break; | ||||
|     case 27: | ||||
|        exit(1); | ||||
|     default: | ||||
|        return; | ||||
|     } | ||||
|  | ||||
|     printf("Z = %f\n", Z); | ||||
|     glutPostRedisplay(); | ||||
| } | ||||
|  | ||||
| @@ -71,17 +78,22 @@ static void Draw(void) | ||||
| { | ||||
|    glClear(GL_COLOR_BUFFER_BIT);  | ||||
|  | ||||
|    glPushMatrix(); | ||||
|    glTranslatef(0, -0.5, Z); | ||||
|  | ||||
|    glBegin(GL_QUADS); | ||||
|    glColor3f(1,0,0);  | ||||
|    glVertex3f( 0.9, -0.9, 30.0); | ||||
|    glVertex3f( -0.8, 0, -4.0); | ||||
|    glColor3f(1,1,0);  | ||||
|    glVertex3f( 0.9,  0.9, 30.0); | ||||
|    glVertex3f(  0.8, 0, -4.0); | ||||
|    glColor3f(1,0,1);  | ||||
|    glVertex3f(-1.9,  0.9, 30.0); | ||||
|    glVertex3f(  0.8, 0,  4.0); | ||||
|    glColor3f(0,1,1);  | ||||
|    glVertex3f(-1.9,  -0.9, -30.0); | ||||
|    glVertex3f( -0.8, 0,  4.0); | ||||
|    glEnd(); | ||||
|  | ||||
|    glPopMatrix(); | ||||
|  | ||||
|    glFlush(); | ||||
|  | ||||
|    if (doubleBuffer) { | ||||
| @@ -118,7 +130,8 @@ int main(int argc, char **argv) | ||||
| 	exit(1); | ||||
|     } | ||||
|  | ||||
|     glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); | ||||
|     glutInitWindowPosition(0, 0); | ||||
|     glutInitWindowSize( 250, 250); | ||||
|  | ||||
|     type = GLUT_RGB; | ||||
|     type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; | ||||
| @@ -134,5 +147,5 @@ int main(int argc, char **argv) | ||||
|     glutKeyboardFunc(Key); | ||||
|     glutDisplayFunc(Draw); | ||||
|     glutMainLoop(); | ||||
| 	return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -6,11 +6,12 @@ include $(TOP)/configs/current | ||||
|  | ||||
| INCDIR = $(TOP)/include | ||||
|  | ||||
| LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) $(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME) | ||||
| LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) | ||||
|  | ||||
| LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS) | ||||
| LIBS = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) $(APP_LIB_DEPS) | ||||
|  | ||||
| PROGS = glthreads \ | ||||
| PROGS = \ | ||||
| 	glthreads \ | ||||
| 	glxdemo \ | ||||
| 	glxgears \ | ||||
| 	glxgears_fbconfig \ | ||||
| @@ -27,10 +28,14 @@ PROGS = glthreads \ | ||||
| 	pbdemo \ | ||||
| 	wincopy \ | ||||
| 	xfont \ | ||||
| 	xrotfontdemo \ | ||||
| 	yuvrect_client | ||||
| 	xrotfontdemo | ||||
|  | ||||
| # Don't build these by default because of extra library dependencies | ||||
| EXTRA_PROGS = \ | ||||
| 	shape \ | ||||
| 	yuvrect_client \ | ||||
| 	xdemo | ||||
|  | ||||
| # omit this XMesa API demo:	xdemo | ||||
|  | ||||
|  | ||||
| ##### RULES ##### | ||||
| @@ -47,8 +52,11 @@ PROGS = glthreads \ | ||||
| default: $(PROGS) | ||||
|  | ||||
|  | ||||
| extra: $(EXTRA_PROGS) | ||||
|  | ||||
|  | ||||
| clean: | ||||
| 	-rm -f $(PROGS) | ||||
| 	-rm -f $(PROGS) $(EXTRA_PROGS) | ||||
| 	-rm -f *.o *~ | ||||
|  | ||||
|  | ||||
| @@ -83,3 +91,6 @@ xuserotfont.o: xuserotfont.c xuserotfont.h | ||||
| xrotfontdemo.o: xrotfontdemo.c xuserotfont.h | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(X11_INCLUDES) $(CFLAGS) xrotfontdemo.c | ||||
|  | ||||
| yuvrect_client: yuvrect_client.c | ||||
| 	$(CC) -I$(INCDIR) $(X11_INCLUDES) $(CFLAGS) $< $(LDFLAGS) $(LIBS) -l$(GLU_LIB) -o $@ | ||||
|  | ||||
|   | ||||
| @@ -505,7 +505,7 @@ main(int argc, char *argv[]) | ||||
|    for (i = 0; i < numThreads; i++) { | ||||
|       pthread_create(&WinThreads[i].Thread, NULL, thread_function, | ||||
|                      (void*) &WinThreads[i]); | ||||
|       printf("glthreads: Created thread %u\n", (unsigned int) WinThreads[i].Thread); | ||||
|       printf("glthreads: Created thread %p\n", WinThreads[i].Thread); | ||||
|    } | ||||
|  | ||||
|    if (MultiDisplays) | ||||
|   | ||||
| @@ -596,7 +596,7 @@ get_visual_attribs(Display *dpy, XVisualInfo *vInfo, | ||||
|  | ||||
|    /* multisample attribs */ | ||||
| #ifdef GLX_ARB_multisample | ||||
|    if (ext && strstr(ext, "GLX_ARB_multisample") == 0) { | ||||
|    if (ext && strstr(ext, "GLX_ARB_multisample")) { | ||||
|       glXGetConfig(dpy, vInfo, GLX_SAMPLE_BUFFERS_ARB, &attribs->numMultisample); | ||||
|       glXGetConfig(dpy, vInfo, GLX_SAMPLES_ARB, &attribs->numSamples); | ||||
|    } | ||||
|   | ||||
| @@ -47,7 +47,6 @@ PERFORMANCE OF THIS SOFTWARE. | ||||
|  | ||||
|  | ||||
| #include <GL/glx.h> | ||||
| #include <GL/glu.h> | ||||
| #include <X11/keysym.h> | ||||
| #include <stdlib.h> | ||||
| #include <stdio.h> | ||||
| @@ -134,7 +133,7 @@ int main(int argc, char** argv) { | ||||
|  | ||||
|     /* set up viewing parameters */ | ||||
|     glMatrixMode(GL_PROJECTION); | ||||
|     gluPerspective(20, 1, 0.1, 20); | ||||
|     glFrustum(-1, 1, -1, 1, 6, 20); | ||||
|     glMatrixMode(GL_MODELVIEW); | ||||
|     glTranslatef(0, 0, -15); | ||||
|  | ||||
|   | ||||
| @@ -34,7 +34,6 @@ | ||||
| static int Width=500, Height=500; | ||||
|  | ||||
| static float Xangle = 0.0, Yangle = 0.0; | ||||
| static int Redraw = 0; | ||||
| static int Sides = 5; | ||||
| static int MinSides = 3; | ||||
| static int MaxSides = 20; | ||||
|   | ||||
| @@ -36,6 +36,7 @@ SOURCES = \ | ||||
| 	glut_dstr.c \ | ||||
| 	glut_event.c \ | ||||
| 	glut_ext.c \ | ||||
| 	glut_fcb.c \ | ||||
| 	glut_fullscrn.c \ | ||||
| 	glut_gamemode.c \ | ||||
| 	glut_get.c \ | ||||
|   | ||||
| @@ -172,10 +172,14 @@ handleTimeouts(void) | ||||
|   GETTIMEOFDAY(&now); | ||||
|   while (IS_AT_OR_AFTER(__glutTimerList->timeout, now)) { | ||||
|     timer = __glutTimerList; | ||||
|     __glutTimerList = timer->next; | ||||
|     /* call the timer function */ | ||||
|     timer->func(timer->value); | ||||
|     /* remove from the linked list */ | ||||
|     __glutTimerList = timer->next; | ||||
|     /* put this timer on the "free" list */ | ||||
|     timer->next = freeTimerList; | ||||
|     freeTimerList = timer; | ||||
|  | ||||
|     if (!__glutTimerList) | ||||
|       break; | ||||
|   } | ||||
|   | ||||
| @@ -19,7 +19,7 @@ | ||||
| /* Set a Fortran callback function. */ | ||||
| 
 | ||||
| void APIENTRY | ||||
| __glutSetFCB(int which, void *func) | ||||
| __glutSetFCB(int which, GLUTproc func) | ||||
| { | ||||
| #ifdef SUPPORT_FORTRAN | ||||
|   switch (which) { | ||||
| @@ -100,61 +100,61 @@ __glutSetFCB(int which, void *func) | ||||
| 
 | ||||
| /* Get a Fortran callback function. */ | ||||
| 
 | ||||
| void* APIENTRY | ||||
| GLUTproc APIENTRY | ||||
| __glutGetFCB(int which) | ||||
| { | ||||
| #ifdef SUPPORT_FORTRAN | ||||
|   switch (which) { | ||||
|   case GLUT_FCB_DISPLAY: | ||||
|     return (void *) __glutCurrentWindow->fdisplay; | ||||
|     return __glutCurrentWindow->fdisplay; | ||||
|   case GLUT_FCB_RESHAPE: | ||||
|     return (void *) __glutCurrentWindow->freshape; | ||||
|     return __glutCurrentWindow->freshape; | ||||
|   case GLUT_FCB_MOUSE: | ||||
|     return (void *) __glutCurrentWindow->fmouse; | ||||
|     return __glutCurrentWindow->fmouse; | ||||
|   case GLUT_FCB_MOTION: | ||||
|     return (void *) __glutCurrentWindow->fmotion; | ||||
|     return __glutCurrentWindow->fmotion; | ||||
|   case GLUT_FCB_PASSIVE: | ||||
|     return (void *) __glutCurrentWindow->fpassive; | ||||
|     return __glutCurrentWindow->fpassive; | ||||
|   case GLUT_FCB_ENTRY: | ||||
|     return (void *) __glutCurrentWindow->fentry; | ||||
|     return __glutCurrentWindow->fentry; | ||||
|   case GLUT_FCB_KEYBOARD: | ||||
|     return (void *) __glutCurrentWindow->fkeyboard; | ||||
|     return __glutCurrentWindow->fkeyboard; | ||||
|   case GLUT_FCB_KEYBOARD_UP: | ||||
|     return (void *) __glutCurrentWindow->fkeyboardUp; | ||||
|     return __glutCurrentWindow->fkeyboardUp; | ||||
|   case GLUT_FCB_WINDOW_STATUS: | ||||
|     return (void *) __glutCurrentWindow->fwindowStatus; | ||||
|     return __glutCurrentWindow->fwindowStatus; | ||||
|   case GLUT_FCB_VISIBILITY: | ||||
|     return (void *) __glutCurrentWindow->fvisibility; | ||||
|     return __glutCurrentWindow->fvisibility; | ||||
|   case GLUT_FCB_SPECIAL: | ||||
|     return (void *) __glutCurrentWindow->fspecial; | ||||
|     return __glutCurrentWindow->fspecial; | ||||
|   case GLUT_FCB_SPECIAL_UP: | ||||
|     return (void *) __glutCurrentWindow->fspecialUp; | ||||
|     return __glutCurrentWindow->fspecialUp; | ||||
|   case GLUT_FCB_BUTTON_BOX: | ||||
|     return (void *) __glutCurrentWindow->fbuttonBox; | ||||
|     return __glutCurrentWindow->fbuttonBox; | ||||
|   case GLUT_FCB_DIALS: | ||||
|     return (void *) __glutCurrentWindow->fdials; | ||||
|     return __glutCurrentWindow->fdials; | ||||
|   case GLUT_FCB_SPACE_MOTION: | ||||
|     return (void *) __glutCurrentWindow->fspaceMotion; | ||||
|     return __glutCurrentWindow->fspaceMotion; | ||||
|   case GLUT_FCB_SPACE_ROTATE: | ||||
|     return (void *) __glutCurrentWindow->fspaceRotate; | ||||
|     return __glutCurrentWindow->fspaceRotate; | ||||
|   case GLUT_FCB_SPACE_BUTTON: | ||||
|     return (void *) __glutCurrentWindow->fspaceButton; | ||||
|     return __glutCurrentWindow->fspaceButton; | ||||
|   case GLUT_FCB_TABLET_MOTION: | ||||
|     return (void *) __glutCurrentWindow->ftabletMotion; | ||||
|     return __glutCurrentWindow->ftabletMotion; | ||||
|   case GLUT_FCB_TABLET_BUTTON: | ||||
|     return (void *) __glutCurrentWindow->ftabletButton; | ||||
|     return __glutCurrentWindow->ftabletButton; | ||||
|   case GLUT_FCB_JOYSTICK: | ||||
| #ifdef _WIN32 | ||||
|     return (void *) __glutCurrentWindow->fjoystick; | ||||
|     return __glutCurrentWindow->fjoystick; | ||||
| #else | ||||
|     return NULL; | ||||
| #endif | ||||
|   case GLUT_FCB_OVERLAY_DISPLAY: | ||||
|     return (void *) __glutCurrentWindow->overlay->fdisplay; | ||||
|     return __glutCurrentWindow->overlay->fdisplay; | ||||
|   case GLUT_FCB_SELECT: | ||||
|     return (void *) __glutCurrentMenu->fselect; | ||||
|     return __glutCurrentMenu->fselect; | ||||
|   case GLUT_FCB_TIMER: | ||||
|     return (void *) __glutTimerList->ffunc; | ||||
|      return __glutTimerList ? __glutTimerList->ffunc : NULL; | ||||
|   default: | ||||
|     return NULL; | ||||
|   } | ||||
| @@ -72,6 +72,23 @@ tags: | ||||
| 	etags `find . -name \*.[ch]` `find ../include` | ||||
|  | ||||
|  | ||||
| # glut pkgconfig file | ||||
| pcedit = sed \ | ||||
| 	-e 's,@INSTALL_DIR@,$(INSTALL_DIR),' \ | ||||
| 	-e 's,@LIB_DIR@,$(LIB_DIR),' \ | ||||
| 	-e 's,@VERSION@,$(GLUT_MAJOR).$(GLUT_MINOR).$(GLUT_TINY),' | ||||
| glut.pc: glut.pc.in | ||||
| 	$(pcedit) $< > $@ | ||||
|  | ||||
| install: glut.pc | ||||
| 	$(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/include/GL | ||||
| 	$(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR) | ||||
| 	$(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig | ||||
| 	$(INSTALL) -m 644 $(TOP)/include/GL/glut.h $(DESTDIR)$(INSTALL_DIR)/include/GL | ||||
| 	$(INSTALL) $(TOP)/$(LIB_DIR)/libglut* $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR) | ||||
| 	$(INSTALL) -m 644 glut.pc $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig | ||||
|  | ||||
|  | ||||
| # Remove .o and backup files | ||||
| clean: depend | ||||
| 	-rm -f depend | ||||
|   | ||||
							
								
								
									
										11
									
								
								src/glut/mini/glut.pc.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/glut/mini/glut.pc.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| prefix=@INSTALL_DIR@ | ||||
| exec_prefix=${prefix} | ||||
| libdir=${exec_prefix}/@LIB_DIR@ | ||||
| includedir=${prefix}/include | ||||
|  | ||||
| Name: glut | ||||
| Description: Mesa OpenGL Utility Toolkit library | ||||
| Requires: gl glu | ||||
| Version: @VERSION@ | ||||
| Libs: -L${libdir} -lglut | ||||
| Cflags: -I${includedir} | ||||
| @@ -7,5 +7,5 @@ Name: glw | ||||
| Description: Mesa OpenGL widget library | ||||
| Requires: gl | ||||
| Version: @VERSION@ | ||||
| Libs: -L${libdir} -lGLU | ||||
| Libs: -L${libdir} -lGLw | ||||
| Cflags: -I${includedir} | ||||
|   | ||||
| @@ -75,6 +75,10 @@ tags: | ||||
| 	etags `find . -name \*.[ch]` `find ../include` | ||||
|  | ||||
|  | ||||
| # Dummy install target | ||||
| install: | ||||
|  | ||||
|  | ||||
| # Remove .o and backup files | ||||
| clean: | ||||
| 	-rm -f drmtest $(TOP)/$(LIB_DIR)/libGL.so* | ||||
|   | ||||
							
								
								
									
										5914
									
								
								src/glx/x11/indirect_dispatch.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5914
									
								
								src/glx/x11/indirect_dispatch.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1043
									
								
								src/glx/x11/indirect_dispatch.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1043
									
								
								src/glx/x11/indirect_dispatch.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6076
									
								
								src/glx/x11/indirect_dispatch_swap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6076
									
								
								src/glx/x11/indirect_dispatch_swap.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										832
									
								
								src/glx/x11/indirect_reqsize.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										832
									
								
								src/glx/x11/indirect_reqsize.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,832 @@ | ||||
| /* DO NOT EDIT - This file generated automatically by glX_proto_size.py (from Mesa) script */ | ||||
|  | ||||
| /* | ||||
|  * (C) Copyright IBM Corporation 2005 | ||||
|  * All Rights Reserved. | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sub license, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  *  | ||||
|  * The above copyright notice and this permission notice (including the next | ||||
|  * paragraph) shall be included in all copies or substantial portions of the | ||||
|  * Software. | ||||
|  *  | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * IBM, | ||||
|  * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | ||||
|  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF | ||||
|  * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
|  * SOFTWARE. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #include <GL/gl.h> | ||||
| #include "glxserver.h" | ||||
| #include "glxbyteorder.h" | ||||
| #include "indirect_size.h" | ||||
| #include "indirect_reqsize.h" | ||||
|  | ||||
| #define __GLX_PAD(x)  (((x) + 3) & ~3) | ||||
|  | ||||
| #if defined(__CYGWIN__) || defined(__MINGW32__) | ||||
| #  undef HAVE_ALIAS | ||||
| #endif | ||||
| #ifdef HAVE_ALIAS | ||||
| #  define ALIAS2(from,to) \ | ||||
|     GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap ) \ | ||||
|         __attribute__ ((alias( # to ))); | ||||
| #  define ALIAS(from,to) ALIAS2( from, __glX ## to ## ReqSize ) | ||||
| #else | ||||
| #  define ALIAS(from,to) \ | ||||
|     GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap ) \ | ||||
|     { return __glX ## to ## ReqSize( pc, swap ); } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| int | ||||
| __glXCallListsReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei n = *(GLsizei *) (pc + 0); | ||||
|     GLenum type = *(GLenum *) (pc + 4); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         n = bswap_32(n); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     compsize = __glCallLists_size(type); | ||||
|     return __GLX_PAD((compsize * n)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXBitmapReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|     GLsizei width = *(GLsizei *) (pc + 20); | ||||
|     GLsizei height = *(GLsizei *) (pc + 24); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|         width = bswap_32(width); | ||||
|         height = bswap_32(height); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(GL_COLOR_INDEX, GL_BITMAP, 0, width, height, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXFogfvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 0); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glFogfv_size(pname); | ||||
|     return __GLX_PAD((compsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXLightfvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 4); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glLightfv_size(pname); | ||||
|     return __GLX_PAD((compsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXLightModelfvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 0); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glLightModelfv_size(pname); | ||||
|     return __GLX_PAD((compsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXMaterialfvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 4); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glMaterialfv_size(pname); | ||||
|     return __GLX_PAD((compsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXPolygonStippleReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(GL_COLOR_INDEX, GL_BITMAP, 0, 32, 32, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXTexParameterfvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 4); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glTexParameterfv_size(pname); | ||||
|     return __GLX_PAD((compsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXTexImage1DReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|     GLenum target = *(GLenum *) (pc + 20); | ||||
|     GLsizei width = *(GLsizei *) (pc + 32); | ||||
|     GLenum format = *(GLenum *) (pc + 44); | ||||
|     GLenum type = *(GLenum *) (pc + 48); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|         target = bswap_32(target); | ||||
|         width = bswap_32(width); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, target, width, 1, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXTexImage2DReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|     GLenum target = *(GLenum *) (pc + 20); | ||||
|     GLsizei width = *(GLsizei *) (pc + 32); | ||||
|     GLsizei height = *(GLsizei *) (pc + 36); | ||||
|     GLenum format = *(GLenum *) (pc + 44); | ||||
|     GLenum type = *(GLenum *) (pc + 48); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|         target = bswap_32(target); | ||||
|         width = bswap_32(width); | ||||
|         height = bswap_32(height); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, target, width, height, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXTexEnvfvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 4); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glTexEnvfv_size(pname); | ||||
|     return __GLX_PAD((compsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXTexGendvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 4); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glTexGendv_size(pname); | ||||
|     return __GLX_PAD((compsize * 8)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXTexGenfvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 4); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glTexGenfv_size(pname); | ||||
|     return __GLX_PAD((compsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXPixelMapfvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei mapsize = *(GLsizei *) (pc + 4); | ||||
|  | ||||
|     if (swap) { | ||||
|         mapsize = bswap_32(mapsize); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((mapsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXPixelMapusvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei mapsize = *(GLsizei *) (pc + 4); | ||||
|  | ||||
|     if (swap) { | ||||
|         mapsize = bswap_32(mapsize); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((mapsize * 2)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXDrawPixelsReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|     GLsizei width = *(GLsizei *) (pc + 20); | ||||
|     GLsizei height = *(GLsizei *) (pc + 24); | ||||
|     GLenum format = *(GLenum *) (pc + 28); | ||||
|     GLenum type = *(GLenum *) (pc + 32); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|         width = bswap_32(width); | ||||
|         height = bswap_32(height); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, 0, width, height, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXPrioritizeTexturesReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei n = *(GLsizei *) (pc + 0); | ||||
|  | ||||
|     if (swap) { | ||||
|         n = bswap_32(n); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((n * 4) + (n * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXTexSubImage1DReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|     GLenum target = *(GLenum *) (pc + 20); | ||||
|     GLsizei width = *(GLsizei *) (pc + 36); | ||||
|     GLenum format = *(GLenum *) (pc + 44); | ||||
|     GLenum type = *(GLenum *) (pc + 48); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|         target = bswap_32(target); | ||||
|         width = bswap_32(width); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, target, width, 1, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXTexSubImage2DReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|     GLenum target = *(GLenum *) (pc + 20); | ||||
|     GLsizei width = *(GLsizei *) (pc + 36); | ||||
|     GLsizei height = *(GLsizei *) (pc + 40); | ||||
|     GLenum format = *(GLenum *) (pc + 44); | ||||
|     GLenum type = *(GLenum *) (pc + 48); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|         target = bswap_32(target); | ||||
|         width = bswap_32(width); | ||||
|         height = bswap_32(height); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, target, width, height, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXColorTableReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|     GLenum target = *(GLenum *) (pc + 20); | ||||
|     GLsizei width = *(GLsizei *) (pc + 28); | ||||
|     GLenum format = *(GLenum *) (pc + 32); | ||||
|     GLenum type = *(GLenum *) (pc + 36); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|         target = bswap_32(target); | ||||
|         width = bswap_32(width); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, target, width, 1, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXColorTableParameterfvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 4); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glColorTableParameterfv_size(pname); | ||||
|     return __GLX_PAD((compsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXColorSubTableReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|     GLenum target = *(GLenum *) (pc + 20); | ||||
|     GLsizei count = *(GLsizei *) (pc + 28); | ||||
|     GLenum format = *(GLenum *) (pc + 32); | ||||
|     GLenum type = *(GLenum *) (pc + 36); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|         target = bswap_32(target); | ||||
|         count = bswap_32(count); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, target, count, 1, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXConvolutionFilter1DReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|     GLenum target = *(GLenum *) (pc + 20); | ||||
|     GLsizei width = *(GLsizei *) (pc + 28); | ||||
|     GLenum format = *(GLenum *) (pc + 36); | ||||
|     GLenum type = *(GLenum *) (pc + 40); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|         target = bswap_32(target); | ||||
|         width = bswap_32(width); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, target, width, 1, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXConvolutionFilter2DReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = 0; | ||||
|     GLint skip_images = 0; | ||||
|     GLint skip_rows = *(GLint *) (pc + 8); | ||||
|     GLint alignment = *(GLint *) (pc + 16); | ||||
|     GLenum target = *(GLenum *) (pc + 20); | ||||
|     GLsizei width = *(GLsizei *) (pc + 28); | ||||
|     GLsizei height = *(GLsizei *) (pc + 32); | ||||
|     GLenum format = *(GLenum *) (pc + 36); | ||||
|     GLenum type = *(GLenum *) (pc + 40); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         alignment = bswap_32(alignment); | ||||
|         target = bswap_32(target); | ||||
|         width = bswap_32(width); | ||||
|         height = bswap_32(height); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, target, width, height, 1, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXConvolutionParameterfvReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 4); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glConvolutionParameterfv_size(pname); | ||||
|     return __GLX_PAD((compsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXTexImage3DReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = *(GLint *) (pc + 8); | ||||
|     GLint skip_rows = *(GLint *) (pc + 16); | ||||
|     GLint skip_images = *(GLint *) (pc + 20); | ||||
|     GLint alignment = *(GLint *) (pc + 32); | ||||
|     GLenum target = *(GLenum *) (pc + 36); | ||||
|     GLsizei width = *(GLsizei *) (pc + 48); | ||||
|     GLsizei height = *(GLsizei *) (pc + 52); | ||||
|     GLsizei depth = *(GLsizei *) (pc + 56); | ||||
|     GLenum format = *(GLenum *) (pc + 68); | ||||
|     GLenum type = *(GLenum *) (pc + 72); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         image_height = bswap_32(image_height); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         skip_images = bswap_32(skip_images); | ||||
|         alignment = bswap_32(alignment); | ||||
|         target = bswap_32(target); | ||||
|         width = bswap_32(width); | ||||
|         height = bswap_32(height); | ||||
|         depth = bswap_32(depth); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, target, width, height, depth, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXTexSubImage3DReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLint row_length = *(GLint *) (pc + 4); | ||||
|     GLint image_height = *(GLint *) (pc + 8); | ||||
|     GLint skip_rows = *(GLint *) (pc + 16); | ||||
|     GLint skip_images = *(GLint *) (pc + 20); | ||||
|     GLint alignment = *(GLint *) (pc + 32); | ||||
|     GLenum target = *(GLenum *) (pc + 36); | ||||
|     GLsizei width = *(GLsizei *) (pc + 60); | ||||
|     GLsizei height = *(GLsizei *) (pc + 64); | ||||
|     GLsizei depth = *(GLsizei *) (pc + 68); | ||||
|     GLenum format = *(GLenum *) (pc + 76); | ||||
|     GLenum type = *(GLenum *) (pc + 80); | ||||
|  | ||||
|     if (swap) { | ||||
|         row_length = bswap_32(row_length); | ||||
|         image_height = bswap_32(image_height); | ||||
|         skip_rows = bswap_32(skip_rows); | ||||
|         skip_images = bswap_32(skip_images); | ||||
|         alignment = bswap_32(alignment); | ||||
|         target = bswap_32(target); | ||||
|         width = bswap_32(width); | ||||
|         height = bswap_32(height); | ||||
|         depth = bswap_32(depth); | ||||
|         format = bswap_32(format); | ||||
|         type = bswap_32(type); | ||||
|     } | ||||
|  | ||||
|     return __glXImageSize(format, type, target, width, height, depth, | ||||
|                           image_height, row_length, skip_images, | ||||
|                           skip_rows, alignment); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXCompressedTexImage1DARBReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei imageSize = *(GLsizei *) (pc + 20); | ||||
|  | ||||
|     if (swap) { | ||||
|         imageSize = bswap_32(imageSize); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD(imageSize); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXCompressedTexImage2DARBReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei imageSize = *(GLsizei *) (pc + 24); | ||||
|  | ||||
|     if (swap) { | ||||
|         imageSize = bswap_32(imageSize); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD(imageSize); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXCompressedTexImage3DARBReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei imageSize = *(GLsizei *) (pc + 28); | ||||
|  | ||||
|     if (swap) { | ||||
|         imageSize = bswap_32(imageSize); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD(imageSize); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXCompressedTexSubImage3DARBReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei imageSize = *(GLsizei *) (pc + 36); | ||||
|  | ||||
|     if (swap) { | ||||
|         imageSize = bswap_32(imageSize); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD(imageSize); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXProgramStringARBReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei len = *(GLsizei *) (pc + 8); | ||||
|  | ||||
|     if (swap) { | ||||
|         len = bswap_32(len); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD(len); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXDrawBuffersARBReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei n = *(GLsizei *) (pc + 0); | ||||
|  | ||||
|     if (swap) { | ||||
|         n = bswap_32(n); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((n * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXPointParameterfvEXTReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLenum pname = *(GLenum *) (pc + 0); | ||||
|     GLsizei compsize; | ||||
|  | ||||
|     if (swap) { | ||||
|         pname = bswap_32(pname); | ||||
|     } | ||||
|  | ||||
|     compsize = __glPointParameterfvEXT_size(pname); | ||||
|     return __GLX_PAD((compsize * 4)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXProgramParameters4dvNVReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLuint num = *(GLuint *) (pc + 8); | ||||
|  | ||||
|     if (swap) { | ||||
|         num = bswap_32(num); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((num * 32)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXProgramParameters4fvNVReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLuint num = *(GLuint *) (pc + 8); | ||||
|  | ||||
|     if (swap) { | ||||
|         num = bswap_32(num); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((num * 16)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXVertexAttribs1dvNVReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei n = *(GLsizei *) (pc + 4); | ||||
|  | ||||
|     if (swap) { | ||||
|         n = bswap_32(n); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((n * 8)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXVertexAttribs2dvNVReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei n = *(GLsizei *) (pc + 4); | ||||
|  | ||||
|     if (swap) { | ||||
|         n = bswap_32(n); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((n * 16)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXVertexAttribs3dvNVReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei n = *(GLsizei *) (pc + 4); | ||||
|  | ||||
|     if (swap) { | ||||
|         n = bswap_32(n); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((n * 24)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXVertexAttribs3fvNVReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei n = *(GLsizei *) (pc + 4); | ||||
|  | ||||
|     if (swap) { | ||||
|         n = bswap_32(n); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((n * 12)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXVertexAttribs3svNVReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei n = *(GLsizei *) (pc + 4); | ||||
|  | ||||
|     if (swap) { | ||||
|         n = bswap_32(n); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((n * 6)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXVertexAttribs4dvNVReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei n = *(GLsizei *) (pc + 4); | ||||
|  | ||||
|     if (swap) { | ||||
|         n = bswap_32(n); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD((n * 32)); | ||||
| } | ||||
|  | ||||
| int | ||||
| __glXProgramNamedParameter4fvNVReqSize(const GLbyte *pc, Bool swap) | ||||
| { | ||||
|     GLsizei len = *(GLsizei *) (pc + 4); | ||||
|  | ||||
|     if (swap) { | ||||
|         len = bswap_32(len); | ||||
|     } | ||||
|  | ||||
|     return __GLX_PAD(len); | ||||
| } | ||||
|  | ||||
| ALIAS(Fogiv, Fogfv) | ||||
|     ALIAS(Lightiv, Lightfv) | ||||
|     ALIAS(LightModeliv, LightModelfv) | ||||
|     ALIAS(Materialiv, Materialfv) | ||||
|     ALIAS(TexParameteriv, TexParameterfv) | ||||
|     ALIAS(TexEnviv, TexEnvfv) | ||||
|     ALIAS(TexGeniv, TexGenfv) | ||||
|     ALIAS(PixelMapuiv, PixelMapfv) | ||||
|     ALIAS(ColorTableParameteriv, ColorTableParameterfv) | ||||
|     ALIAS(ConvolutionParameteriv, ConvolutionParameterfv) | ||||
|     ALIAS(CompressedTexSubImage1DARB, CompressedTexImage1DARB) | ||||
|     ALIAS(CompressedTexSubImage2DARB, CompressedTexImage3DARB) | ||||
|     ALIAS(LoadProgramNV, ProgramStringARB) | ||||
|     ALIAS(RequestResidentProgramsNV, DrawBuffersARB) | ||||
|     ALIAS(VertexAttribs1fvNV, PixelMapfv) | ||||
|     ALIAS(VertexAttribs1svNV, PixelMapusv) | ||||
|     ALIAS(VertexAttribs2fvNV, VertexAttribs1dvNV) | ||||
|     ALIAS(VertexAttribs2svNV, PixelMapfv) | ||||
|     ALIAS(VertexAttribs4fvNV, VertexAttribs2dvNV) | ||||
|     ALIAS(VertexAttribs4svNV, VertexAttribs1dvNV) | ||||
|     ALIAS(VertexAttribs4ubvNV, PixelMapfv) | ||||
|     ALIAS(PointParameterivNV, PointParameterfvEXT) | ||||
|     ALIAS(ProgramNamedParameter4dvNV, CompressedTexSubImage3DARB) | ||||
|     ALIAS(DeleteFramebuffersEXT, DrawBuffersARB) | ||||
|     ALIAS(DeleteRenderbuffersEXT, DrawBuffersARB) | ||||
							
								
								
									
										121
									
								
								src/glx/x11/indirect_reqsize.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								src/glx/x11/indirect_reqsize.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| /* DO NOT EDIT - This file generated automatically by glX_proto_size.py (from Mesa) script */ | ||||
|  | ||||
| /* | ||||
|  * (C) Copyright IBM Corporation 2005 | ||||
|  * All Rights Reserved. | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sub license, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  *  | ||||
|  * The above copyright notice and this permission notice (including the next | ||||
|  * paragraph) shall be included in all copies or substantial portions of the | ||||
|  * Software. | ||||
|  *  | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * IBM, | ||||
|  * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | ||||
|  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF | ||||
|  * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
|  * SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #if !defined( _INDIRECT_REQSIZE_H_ ) | ||||
| #  define _INDIRECT_REQSIZE_H_ | ||||
|  | ||||
| #  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) | ||||
| #    define HIDDEN  __attribute__((visibility("hidden"))) | ||||
| #  else | ||||
| #    define HIDDEN | ||||
| #  endif | ||||
|  | ||||
| #  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) | ||||
| #    define PURE __attribute__((pure)) | ||||
| #  else | ||||
| #    define PURE | ||||
| #  endif | ||||
|  | ||||
| extern PURE HIDDEN int __glXCallListsReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXBitmapReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXFogfvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXFogivReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXLightfvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXLightivReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXLightModelfvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXLightModelivReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXMaterialfvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXMaterialivReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXPolygonStippleReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexParameterfvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexParameterivReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexImage1DReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexImage2DReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexEnvfvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexEnvivReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexGendvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexGenfvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexGenivReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXMap1dReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXMap1fReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXMap2dReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXMap2fReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXPixelMapfvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXPixelMapuivReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXPixelMapusvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXDrawPixelsReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXDrawArraysReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXPrioritizeTexturesReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexSubImage1DReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexSubImage2DReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXColorTableReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXColorTableParameterfvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXColorTableParameterivReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXColorSubTableReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXConvolutionFilter1DReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXConvolutionFilter2DReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXConvolutionParameterfvReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXConvolutionParameterivReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXSeparableFilter2DReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexImage3DReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXTexSubImage3DReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXCompressedTexImage1DARBReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXCompressedTexImage2DARBReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXCompressedTexImage3DARBReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXCompressedTexSubImage1DARBReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXCompressedTexSubImage2DARBReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXCompressedTexSubImage3DARBReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXProgramStringARBReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXDrawBuffersARBReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXPointParameterfvEXTReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXLoadProgramNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXProgramParameters4dvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXProgramParameters4fvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXRequestResidentProgramsNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs1dvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs1fvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs1svNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs2dvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs2fvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs2svNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs3dvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs3fvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs3svNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs4dvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs4fvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs4svNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXVertexAttribs4ubvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXPointParameterivNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXProgramNamedParameter4dvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXProgramNamedParameter4fvNVReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXDeleteFramebuffersEXTReqSize(const GLbyte *pc, Bool swap); | ||||
| extern PURE HIDDEN int __glXDeleteRenderbuffersEXTReqSize(const GLbyte *pc, Bool swap); | ||||
|  | ||||
| #  undef HIDDEN | ||||
| #  undef PURE | ||||
|  | ||||
| #endif /* !defined( _INDIRECT_REQSIZE_H_ ) */ | ||||
							
								
								
									
										1206
									
								
								src/glx/x11/indirect_size_get.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1206
									
								
								src/glx/x11/indirect_size_get.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										102
									
								
								src/glx/x11/indirect_size_get.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								src/glx/x11/indirect_size_get.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| /* DO NOT EDIT - This file generated automatically by glX_proto_size.py (from Mesa) script */ | ||||
|  | ||||
| /* | ||||
|  * (C) Copyright IBM Corporation 2004 | ||||
|  * All Rights Reserved. | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sub license, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  *  | ||||
|  * The above copyright notice and this permission notice (including the next | ||||
|  * paragraph) shall be included in all copies or substantial portions of the | ||||
|  * Software. | ||||
|  *  | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * IBM, | ||||
|  * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | ||||
|  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF | ||||
|  * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
|  * SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #if !defined( _INDIRECT_SIZE_GET_H_ ) | ||||
| #  define _INDIRECT_SIZE_GET_H_ | ||||
|  | ||||
| /** | ||||
|  * \file | ||||
|  * Prototypes for functions used to determine the number of data elements in | ||||
|  * various GLX protocol messages. | ||||
|  * | ||||
|  * \author Ian Romanick <idr@us.ibm.com> | ||||
|  */ | ||||
|  | ||||
| #  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) | ||||
| #    define PURE __attribute__((pure)) | ||||
| #  else | ||||
| #    define PURE | ||||
| #  endif | ||||
|  | ||||
| #  if defined(__i386__) && defined(__GNUC__) && !defined(__CYGWIN__) && !defined(__MINGW32__) | ||||
| #    define FASTCALL __attribute__((fastcall)) | ||||
| #  else | ||||
| #    define FASTCALL | ||||
| #  endif | ||||
|  | ||||
| #  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) | ||||
| #    define INTERNAL  __attribute__((visibility("internal"))) | ||||
| #  else | ||||
| #    define INTERNAL | ||||
| #  endif | ||||
|  | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetBooleanv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetDoublev_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetFloatv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetIntegerv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetLightfv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetLightiv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetMaterialfv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetMaterialiv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetTexEnvfv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetTexEnviv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetTexGendv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetTexGenfv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetTexGeniv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetTexParameterfv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetTexParameteriv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetTexLevelParameterfv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetTexLevelParameteriv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetColorTableParameterfv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetColorTableParameteriv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint | ||||
| __glGetConvolutionParameterfv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint | ||||
| __glGetConvolutionParameteriv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetHistogramParameterfv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetHistogramParameteriv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetMinmaxParameterfv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetMinmaxParameteriv_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetProgramivARB_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetVertexAttribdvARB_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetVertexAttribfvARB_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetVertexAttribivARB_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetQueryObjectivARB_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetQueryObjectuivARB_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetQueryivARB_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetProgramivNV_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetVertexAttribdvNV_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetVertexAttribfvNV_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint __glGetVertexAttribivNV_size(GLenum); | ||||
| extern INTERNAL PURE FASTCALL GLint | ||||
| __glGetFramebufferAttachmentParameterivEXT_size(GLenum); | ||||
|  | ||||
| #  undef PURE | ||||
| #  undef FASTCALL | ||||
| #  undef INTERNAL | ||||
|  | ||||
| #endif /* !defined( _INDIRECT_SIZE_GET_H_ ) */ | ||||
							
								
								
									
										1593
									
								
								src/glx/x11/indirect_table.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1593
									
								
								src/glx/x11/indirect_table.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -485,14 +485,14 @@ emit_DrawArrays_none( GLenum mode, GLint first, GLsizei count ) | ||||
|  | ||||
|     for ( i = 0 ; i < count ; i++ ) { | ||||
| 	if ( (pc + single_vertex_size) >= gc->bufEnd ) { | ||||
| 	    pc = __glXFlushRenderBuffer(gc, gc->pc); | ||||
| 	    pc = __glXFlushRenderBuffer(gc, pc); | ||||
| 	} | ||||
|  | ||||
| 	pc = emit_element_none( pc, arrays, first + i ); | ||||
|     } | ||||
|  | ||||
|     if ( (pc + 4) >= gc->bufEnd ) { | ||||
| 	pc = __glXFlushRenderBuffer(gc, gc->pc); | ||||
| 	pc = __glXFlushRenderBuffer(gc, pc); | ||||
|     } | ||||
|  | ||||
|     (void) memcpy( pc, end_cmd, 4 ); | ||||
| @@ -726,7 +726,7 @@ emit_DrawElements_none( GLenum mode, GLsizei count, GLenum type, | ||||
| 	unsigned  index = 0; | ||||
|  | ||||
| 	if ( (pc + single_vertex_size) >= gc->bufEnd ) { | ||||
| 	    pc = __glXFlushRenderBuffer(gc, gc->pc); | ||||
| 	    pc = __glXFlushRenderBuffer(gc, pc); | ||||
| 	} | ||||
|  | ||||
| 	switch( type ) { | ||||
| @@ -744,7 +744,7 @@ emit_DrawElements_none( GLenum mode, GLsizei count, GLenum type, | ||||
|     } | ||||
|  | ||||
|     if ( (pc + 4) >= gc->bufEnd ) { | ||||
| 	pc = __glXFlushRenderBuffer(gc, gc->pc); | ||||
| 	pc = __glXFlushRenderBuffer(gc, pc); | ||||
|     } | ||||
|  | ||||
|     (void) memcpy( pc, end_cmd, 4 ); | ||||
|   | ||||
| @@ -65,7 +65,7 @@ linux-solo: depend subdirs libmesa.a | ||||
| # Stand-alone Mesa libGL, no built-in drivers (DirectFB) | ||||
|  | ||||
| libgl-core: $(CORE_OBJECTS) | ||||
| 	@ $(TOP)/bin/mklib -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS) \ | ||||
| 	@ $(TOP)/bin/mklib -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \ | ||||
| 		-major $(MESA_MAJOR) -minor $(MESA_MINOR) -patch $(MESA_TINY) \ | ||||
| 		-install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) $(CORE_OBJECTS) \ | ||||
| 		$(GL_LIB_DEPS) | ||||
|   | ||||
| @@ -112,6 +112,8 @@ _mesa_init_driver_functions(struct dd_function_table *driver) | ||||
|    driver->DeleteTexture = _mesa_delete_texture_object; | ||||
|    driver->NewTextureImage = _mesa_new_texture_image; | ||||
|    driver->FreeTexImageData = _mesa_free_texture_image_data;  | ||||
|    driver->MapTexture = NULL; | ||||
|    driver->UnmapTexture = NULL; | ||||
|    driver->TextureMemCpy = _mesa_memcpy;  | ||||
|    driver->IsTextureResident = NULL; | ||||
|    driver->PrioritizeTexture = NULL; | ||||
|   | ||||
| @@ -50,7 +50,6 @@ SHARED_INCLUDES = \ | ||||
| 	-I$(TOP)/src/mesa/main \ | ||||
| 	-I$(TOP)/src/mesa/glapi \ | ||||
| 	-I$(TOP)/src/mesa/math \ | ||||
| 	-I$(TOP)/src/mesa/transform \ | ||||
| 	-I$(TOP)/src/mesa/shader \ | ||||
| 	-I$(TOP)/src/mesa/swrast \ | ||||
| 	-I$(TOP)/src/mesa/swrast_setup \ | ||||
|   | ||||
| @@ -486,6 +486,9 @@ static void driSwapBuffers( __DRInativeDisplay *dpy, void *drawablePrivate ) | ||||
|     __DRIdrawablePrivate *dPriv = (__DRIdrawablePrivate *) drawablePrivate; | ||||
|     drm_clip_rect_t rect; | ||||
|  | ||||
|     if (!dPriv->numClipRects) | ||||
|         return; | ||||
|  | ||||
|     dPriv->swapBuffers(dPriv); | ||||
|  | ||||
|     /* Check that we actually have the new damage report method */ | ||||
|   | ||||
| @@ -193,7 +193,7 @@ static GLboolean gamma_run_render( GLcontext *ctx, | ||||
|  | ||||
|    for (i = 0 ; i < VB->PrimitiveCount ; i++) | ||||
|    { | ||||
|       GLuint prim = VB->Primitive[i].mode; | ||||
|       GLuint prim = _tnl_translate_prim(&VB->Primitive[i]); | ||||
|       GLuint start = VB->Primitive[i].start; | ||||
|       GLuint length = VB->Primitive[i].count; | ||||
|  | ||||
|   | ||||
| @@ -144,7 +144,7 @@ static GLboolean i810_run_render( GLcontext *ctx, | ||||
|  | ||||
|    for (i = 0 ; i < VB->PrimitiveCount ; i++) | ||||
|    { | ||||
|       GLuint prim = VB->Primitive[i].mode; | ||||
|       GLuint prim = _tnl_translate_prim(&VB->Primitive[i]); | ||||
|       GLuint start = VB->Primitive[i].start; | ||||
|       GLuint length = VB->Primitive[i].count; | ||||
|  | ||||
|   | ||||
| @@ -213,7 +213,7 @@ static GLboolean intel_run_render( GLcontext *ctx, | ||||
|     | ||||
|    for (i = 0 ; i < VB->PrimitiveCount ; i++) | ||||
|    { | ||||
|       GLuint prim = VB->Primitive[i].mode; | ||||
|       GLuint prim = _tnl_translate_prim(&VB->Primitive[i]); | ||||
|       GLuint start = VB->Primitive[i].start; | ||||
|       GLuint length = VB->Primitive[i].count; | ||||
|  | ||||
|   | ||||
| @@ -377,10 +377,16 @@ do {							\ | ||||
|    ADVANCE_BATCH();					\ | ||||
| } while (0) | ||||
|  | ||||
| static GLuint | ||||
| get_dirty(struct i830_hw_state *state) | ||||
| { | ||||
|    return state->active & ~state->emitted; | ||||
| } | ||||
|  | ||||
| static GLuint | ||||
| get_state_size(struct i830_hw_state *state) | ||||
| { | ||||
|    GLuint dirty = state->active & ~state->emitted; | ||||
|    GLuint dirty = get_dirty(state); | ||||
|    GLuint sz = 0; | ||||
|    GLuint i; | ||||
|  | ||||
| @@ -411,7 +417,7 @@ get_state_size(struct i830_hw_state *state) | ||||
| /* Push the state into the sarea and/or texture memory. | ||||
|  */ | ||||
| static void | ||||
| i830_emit_state(struct intel_context *intel) | ||||
| i830_do_emit_state(struct intel_context *intel) | ||||
| { | ||||
|    struct i830_context *i830 = i830_context(&intel->ctx); | ||||
|    struct i830_hw_state *state = i830->current; | ||||
| @@ -428,10 +434,32 @@ i830_emit_state(struct intel_context *intel) | ||||
|     */ | ||||
|    intel_batchbuffer_require_space(intel->batch, get_state_size(state), 0); | ||||
|  | ||||
|    /* Workaround.  There are cases I haven't been able to track down | ||||
|     * where we aren't emitting a full state at the start of a new | ||||
|     * batchbuffer.  This code spots that we are on a new batchbuffer | ||||
|     * and forces a full state emit no matter what.   | ||||
|     * | ||||
|     * In the normal case state->emitted is already zero, this code is | ||||
|     * another set of checks to make sure it really is. | ||||
|     */ | ||||
|    if (intel->batch->id != intel->last_state_batch_id || | ||||
|        intel->batch->map == intel->batch->ptr)  | ||||
|    { | ||||
|       state->emitted = 0; | ||||
|       intel_batchbuffer_require_space(intel->batch, get_state_size(state), 0); | ||||
|    } | ||||
|  | ||||
|    /* Do this here as we may have flushed the batchbuffer above, | ||||
|     * causing more state to be dirty! | ||||
|     */ | ||||
|    dirty = state->active & ~state->emitted; | ||||
|    dirty = get_dirty(state); | ||||
|    state->emitted |= dirty; | ||||
|    assert(get_dirty(state) == 0); | ||||
|  | ||||
|    if (intel->batch->id != intel->last_state_batch_id) { | ||||
|       assert(dirty & I830_UPLOAD_CTX); | ||||
|       intel->last_state_batch_id = intel->batch->id; | ||||
|    } | ||||
|  | ||||
|    if (dirty & I830_UPLOAD_INVARIENT) { | ||||
|       DBG("I830_UPLOAD_INVARIENT:\n"); | ||||
| @@ -513,7 +541,30 @@ i830_emit_state(struct intel_context *intel) | ||||
|       } | ||||
|    } | ||||
|  | ||||
|    state->emitted |= dirty; | ||||
|    intel->batch->dirty_state &= ~dirty; | ||||
|    assert(get_dirty(state) == 0); | ||||
| } | ||||
|  | ||||
| static void | ||||
| i830_emit_state(struct intel_context *intel) | ||||
| { | ||||
|    struct i830_context *i830 = i830_context(&intel->ctx); | ||||
|  | ||||
|    i830_do_emit_state( intel ); | ||||
|  | ||||
|    /* Second chance - catch batchbuffer wrap in the middle of state | ||||
|     * emit.  This shouldn't happen but it has been observed in | ||||
|     * testing. | ||||
|     */ | ||||
|    if (get_dirty( i830->current )) { | ||||
|       /* Force a full re-emit if this happens. | ||||
|        */ | ||||
|       i830->current->emitted = 0; | ||||
|       i830_do_emit_state( intel ); | ||||
|    } | ||||
|  | ||||
|    assert(get_dirty(i830->current) == 0); | ||||
|    assert((intel->batch->dirty_state & (1<<1)) == 0); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -650,8 +701,7 @@ i830_assert_not_dirty( struct intel_context *intel ) | ||||
| { | ||||
|    struct i830_context *i830 = i830_context(&intel->ctx); | ||||
|    struct i830_hw_state *state = i830->current; | ||||
|    GLuint dirty = state->active & ~state->emitted; | ||||
|    assert(!dirty); | ||||
|    assert(!get_dirty(state)); | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -54,7 +54,7 @@ static GLint step_offsets[6][2] = { {0, 2}, | ||||
| }; | ||||
|  | ||||
| GLboolean | ||||
| i915_miptree_layout(struct intel_mipmap_tree * mt) | ||||
| i915_miptree_layout(struct intel_context *intel, struct intel_mipmap_tree * mt) | ||||
| { | ||||
|    GLint level; | ||||
|  | ||||
| @@ -67,7 +67,7 @@ i915_miptree_layout(struct intel_mipmap_tree * mt) | ||||
|          assert(lvlWidth == lvlHeight); /* cubemap images are square */ | ||||
|  | ||||
|          /* double pitch for cube layouts */ | ||||
|          mt->pitch = ((dim * mt->cpp * 2 + 3) & ~3) / mt->cpp; | ||||
|          mt->pitch = intel_miptree_pitch_align (intel, mt, dim * 2); | ||||
|          mt->total_height = dim * 4; | ||||
|  | ||||
|          for (level = mt->first_level; level <= mt->last_level; level++) { | ||||
| @@ -107,7 +107,7 @@ i915_miptree_layout(struct intel_mipmap_tree * mt) | ||||
|  | ||||
|          /* Calculate the size of a single slice.  | ||||
|           */ | ||||
|          mt->pitch = ((mt->width0 * mt->cpp + 3) & ~3) / mt->cpp; | ||||
|          mt->pitch = intel_miptree_pitch_align (intel, mt, mt->width0); | ||||
|  | ||||
|          /* XXX: hardware expects/requires 9 levels at minimum. | ||||
|           */ | ||||
| @@ -150,7 +150,7 @@ i915_miptree_layout(struct intel_mipmap_tree * mt) | ||||
|          GLuint height = mt->height0; | ||||
| 	 GLuint img_height; | ||||
|  | ||||
|          mt->pitch = ((mt->width0 * mt->cpp + 3) & ~3) / mt->cpp; | ||||
|          mt->pitch = intel_miptree_pitch_align (intel, mt, mt->width0); | ||||
|          mt->total_height = 0; | ||||
|  | ||||
|          for (level = mt->first_level; level <= mt->last_level; level++) { | ||||
| @@ -180,7 +180,7 @@ i915_miptree_layout(struct intel_mipmap_tree * mt) | ||||
|  | ||||
|  | ||||
| GLboolean | ||||
| i945_miptree_layout(struct intel_mipmap_tree * mt) | ||||
| i945_miptree_layout(struct intel_context *intel, struct intel_mipmap_tree * mt) | ||||
| { | ||||
|    GLint level; | ||||
|  | ||||
| @@ -197,7 +197,7 @@ i945_miptree_layout(struct intel_mipmap_tree * mt) | ||||
|           * or the final row of 4x4, 2x2 and 1x1 faces below this.  | ||||
|           */ | ||||
|          if (dim > 32) | ||||
|             mt->pitch = ((dim * mt->cpp * 2 + 3) & ~3) / mt->cpp; | ||||
|             mt->pitch = intel_miptree_pitch_align (intel, mt, dim); | ||||
|          else | ||||
|             mt->pitch = 14 * 8; | ||||
|  | ||||
| @@ -279,7 +279,7 @@ i945_miptree_layout(struct intel_mipmap_tree * mt) | ||||
|          GLuint pack_y_pitch; | ||||
|          GLuint level; | ||||
|  | ||||
|          mt->pitch = ((mt->width0 * mt->cpp + 3) & ~3) / mt->cpp; | ||||
|          mt->pitch = intel_miptree_pitch_align (intel, mt, mt->width0); | ||||
|          mt->total_height = 0; | ||||
|  | ||||
|          pack_y_pitch = MAX2(mt->height0, 2); | ||||
| @@ -329,7 +329,7 @@ i945_miptree_layout(struct intel_mipmap_tree * mt) | ||||
|    case GL_TEXTURE_1D: | ||||
|    case GL_TEXTURE_2D: | ||||
|    case GL_TEXTURE_RECTANGLE_ARB: | ||||
|          i945_miptree_layout_2d(mt); | ||||
|          i945_miptree_layout_2d(intel, mt); | ||||
|          break; | ||||
|    default: | ||||
|       _mesa_problem(NULL, "Unexpected tex target in i945_miptree_layout()"); | ||||
|   | ||||
| @@ -198,7 +198,7 @@ i915_emit_invarient_state(struct intel_context *intel) | ||||
|  | ||||
|    /* Need to initialize this to zero. | ||||
|     */ | ||||
|    OUT_BATCH(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(3) | (1)); | ||||
|    OUT_BATCH(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(3) | (0)); | ||||
|    OUT_BATCH(0); | ||||
|  | ||||
|    /* XXX: Use this */ | ||||
| @@ -216,6 +216,7 @@ i915_emit_invarient_state(struct intel_context *intel) | ||||
|  | ||||
|    /* Don't support twosided stencil yet */ | ||||
|    OUT_BATCH(_3DSTATE_BACKFACE_STENCIL_OPS | BFO_ENABLE_STENCIL_TWO_SIDE | 0); | ||||
|    OUT_BATCH(0); | ||||
|  | ||||
|    ADVANCE_BATCH(); | ||||
| } | ||||
| @@ -247,6 +248,9 @@ get_state_size(struct i915_hw_state *state) | ||||
|    GLuint i; | ||||
|    GLuint sz = 0; | ||||
|  | ||||
|    if (dirty & I915_UPLOAD_INVARIENT) | ||||
|       sz += 30 * 4; | ||||
|  | ||||
|    if (dirty & I915_UPLOAD_CTX) | ||||
|       sz += sizeof(state->Ctx); | ||||
|  | ||||
| @@ -281,7 +285,7 @@ get_state_size(struct i915_hw_state *state) | ||||
| /* Push the state into the sarea and/or texture memory. | ||||
|  */ | ||||
| static void | ||||
| i915_emit_state(struct intel_context *intel) | ||||
| i915_do_emit_state(struct intel_context *intel) | ||||
| { | ||||
|    struct i915_context *i915 = i915_context(&intel->ctx); | ||||
|    struct i915_hw_state *state = i915->current; | ||||
| @@ -298,10 +302,33 @@ i915_emit_state(struct intel_context *intel) | ||||
|     */ | ||||
|    intel_batchbuffer_require_space(intel->batch, get_state_size(state), 0); | ||||
|  | ||||
|  | ||||
|    /* Workaround.  There are cases I haven't been able to track down | ||||
|     * where we aren't emitting a full state at the start of a new | ||||
|     * batchbuffer.  This code spots that we are on a new batchbuffer | ||||
|     * and forces a full state emit no matter what.   | ||||
|     * | ||||
|     * In the normal case state->emitted is already zero, this code is | ||||
|     * another set of checks to make sure it really is. | ||||
|     */ | ||||
|    if (intel->batch->id != intel->last_state_batch_id || | ||||
|        intel->batch->map == intel->batch->ptr)  | ||||
|    { | ||||
|       state->emitted = 0; | ||||
|       intel_batchbuffer_require_space(intel->batch, get_state_size(state), 0); | ||||
|    } | ||||
|  | ||||
|    /* Do this here as we may have flushed the batchbuffer above, | ||||
|     * causing more state to be dirty! | ||||
|     */ | ||||
|    dirty = get_dirty(state); | ||||
|    state->emitted |= dirty; | ||||
|    assert(get_dirty(state) == 0); | ||||
|  | ||||
|    if (intel->batch->id != intel->last_state_batch_id) { | ||||
|       assert(dirty & I915_UPLOAD_CTX); | ||||
|       intel->last_state_batch_id = intel->batch->id; | ||||
|    } | ||||
|  | ||||
|    if (INTEL_DEBUG & DEBUG_STATE) | ||||
|       fprintf(stderr, "%s dirty: %x\n", __FUNCTION__, dirty); | ||||
| @@ -424,7 +451,29 @@ i915_emit_state(struct intel_context *intel) | ||||
|          i915_disassemble_program(state->Program, state->ProgramSize); | ||||
|    } | ||||
|  | ||||
|    state->emitted |= dirty; | ||||
|    intel->batch->dirty_state &= ~dirty; | ||||
| } | ||||
|  | ||||
| static void | ||||
| i915_emit_state(struct intel_context *intel) | ||||
| { | ||||
|    struct i915_context *i915 = i915_context(&intel->ctx); | ||||
|  | ||||
|    i915_do_emit_state( intel ); | ||||
|  | ||||
|    /* Second chance - catch batchbuffer wrap in the middle of state | ||||
|     * emit.  This shouldn't happen but it has been observed in | ||||
|     * testing. | ||||
|     */ | ||||
|    if (get_dirty( i915->current )) { | ||||
|       /* Force a full re-emit if this happens. | ||||
|        */ | ||||
|       i915->current->emitted = 0; | ||||
|       i915_do_emit_state( intel ); | ||||
|    } | ||||
|  | ||||
|    assert(get_dirty(i915->current) == 0); | ||||
|    assert((intel->batch->dirty_state & (1<<1)) == 0); | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
| @@ -118,6 +118,8 @@ intel_batchbuffer_reset(struct intel_batchbuffer *batch) | ||||
|  | ||||
|    batch->map = driBOMap(batch->buffer, DRM_BO_FLAG_WRITE, 0); | ||||
|    batch->ptr = batch->map; | ||||
|    batch->dirty_state = ~0; | ||||
|    batch->id = batch->intel->intelScreen->batch_id++; | ||||
| } | ||||
|  | ||||
| /*====================================================================== | ||||
|   | ||||
| @@ -38,6 +38,9 @@ struct intel_batchbuffer | ||||
|    struct buffer_reloc reloc[MAX_RELOCS]; | ||||
|    GLuint nr_relocs; | ||||
|    GLuint size; | ||||
|  | ||||
|    GLuint dirty_state; | ||||
|    GLuint id; | ||||
| }; | ||||
|  | ||||
| struct intel_batchbuffer *intel_batchbuffer_alloc(struct intel_context | ||||
|   | ||||
| @@ -112,8 +112,8 @@ intelCopyBuffer(const __DRIdrawablePrivate * dPriv, | ||||
|       for (i = 0; i < nbox; i++, pbox++) { | ||||
| 	 drm_clip_rect_t box; | ||||
|  | ||||
| 	 if (pbox->x1 > pbox->x2 || | ||||
| 	     pbox->y1 > pbox->y2 || | ||||
| 	 if (pbox->x1 >= pbox->x2 || | ||||
| 	     pbox->y1 >= pbox->y2 || | ||||
| 	     pbox->x2 > intelScreen->width || pbox->y2 > intelScreen->height) | ||||
| 	    continue; | ||||
|  | ||||
| @@ -129,19 +129,22 @@ intelCopyBuffer(const __DRIdrawablePrivate * dPriv, | ||||
| 	    if (rect->y2 < box.y2) | ||||
| 	       box.y2 = rect->y2; | ||||
|  | ||||
| 	    if (box.x1 > box.x2 || box.y1 > box.y2) | ||||
| 	    if (box.x1 >= box.x2 || box.y1 >= box.y2) | ||||
| 	       continue; | ||||
| 	 } | ||||
|  | ||||
| 	 assert(box.x1 < box.x2); | ||||
| 	 assert(box.y1 < box.y2); | ||||
|  | ||||
| 	 BEGIN_BATCH(8, INTEL_BATCH_NO_CLIPRECTS); | ||||
| 	 OUT_BATCH(CMD); | ||||
| 	 OUT_BATCH(BR13); | ||||
| 	 OUT_BATCH((pbox->y1 << 16) | pbox->x1); | ||||
| 	 OUT_BATCH((pbox->y2 << 16) | pbox->x2); | ||||
| 	 OUT_BATCH((box.y1 << 16) | box.x1); | ||||
| 	 OUT_BATCH((box.y2 << 16) | box.x2); | ||||
|  | ||||
| 	 OUT_RELOC(frontRegion->buffer, DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_WRITE, | ||||
| 		   DRM_BO_MASK_MEM | DRM_BO_FLAG_WRITE, 0); | ||||
| 	 OUT_BATCH((pbox->y1 << 16) | pbox->x1); | ||||
| 	 OUT_BATCH((box.y1 << 16) | box.x1); | ||||
| 	 OUT_BATCH(BR13 & 0xffff); | ||||
| 	 OUT_RELOC(backRegion->buffer, DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_READ, | ||||
| 		   DRM_BO_MASK_MEM | DRM_BO_FLAG_READ, 0); | ||||
| @@ -152,7 +155,8 @@ intelCopyBuffer(const __DRIdrawablePrivate * dPriv, | ||||
|       if (intel->first_swap_fence) | ||||
| 	 driFenceUnReference(intel->first_swap_fence); | ||||
|       intel->first_swap_fence = intel_batchbuffer_flush(intel->batch); | ||||
|       driFenceReference(intel->first_swap_fence); | ||||
|       if (intel->first_swap_fence) | ||||
| 	 driFenceReference(intel->first_swap_fence); | ||||
|    } | ||||
|  | ||||
|    UNLOCK_HARDWARE(intel); | ||||
| @@ -193,6 +197,8 @@ intelEmitFillBlit(struct intel_context *intel, | ||||
|    DBG("%s dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n", | ||||
|        __FUNCTION__, dst_buffer, dst_pitch, dst_offset, x, y, w, h); | ||||
|  | ||||
|    assert(w > 0); | ||||
|    assert(h > 0); | ||||
|  | ||||
|    BEGIN_BATCH(6, INTEL_BATCH_NO_CLIPRECTS); | ||||
|    OUT_BATCH(CMD); | ||||
| @@ -280,10 +286,11 @@ intelEmitCopyBlit(struct intel_context *intel, | ||||
|       return; | ||||
|    } | ||||
|  | ||||
|    if (dst_y2 < dst_y || dst_x2 < dst_x) { | ||||
|    if (dst_y2 <= dst_y || dst_x2 <= dst_x) { | ||||
|       return; | ||||
|    } | ||||
|  | ||||
|  | ||||
|    /* Initial y values don't seem to work with negative pitches.  If | ||||
|     * we adjust the offsets manually (below), it seems to work fine. | ||||
|     * | ||||
| @@ -292,6 +299,9 @@ intelEmitCopyBlit(struct intel_context *intel, | ||||
|     * the wrong result. | ||||
|     */ | ||||
|    if (dst_pitch > 0 && src_pitch > 0) { | ||||
|       assert(dst_x < dst_x2); | ||||
|       assert(dst_y < dst_y2); | ||||
|  | ||||
|       BEGIN_BATCH(8, INTEL_BATCH_NO_CLIPRECTS); | ||||
|       OUT_BATCH(CMD); | ||||
|       OUT_BATCH(BR13); | ||||
| @@ -306,6 +316,9 @@ intelEmitCopyBlit(struct intel_context *intel, | ||||
|       ADVANCE_BATCH(); | ||||
|    } | ||||
|    else { | ||||
|       assert(dst_x < dst_x2); | ||||
|       assert(h > 0); | ||||
|  | ||||
|       BEGIN_BATCH(8, INTEL_BATCH_NO_CLIPRECTS); | ||||
|       OUT_BATCH(CMD); | ||||
|       OUT_BATCH(BR13); | ||||
| @@ -480,6 +493,9 @@ intelClearWithBlit(GLcontext * ctx, GLbitfield mask) | ||||
|                 */ | ||||
| 	       intel_wait_flips(intel, INTEL_BATCH_NO_CLIPRECTS); | ||||
|  | ||||
|                assert(b.x1 < b.x2); | ||||
|                assert(b.y1 < b.y2); | ||||
|  | ||||
|                BEGIN_BATCH(6, INTEL_BATCH_NO_CLIPRECTS); | ||||
|                OUT_BATCH(CMD); | ||||
|                OUT_BATCH(BR13); | ||||
|   | ||||
| @@ -714,7 +714,8 @@ intel_wait_flips(struct intel_context *intel, GLuint batch_flags) | ||||
| 			     BUFFER_BIT_FRONT_LEFT ? BUFFER_FRONT_LEFT : | ||||
| 			     BUFFER_BACK_LEFT); | ||||
|  | ||||
|    if (intel_fb->Base.Name == 0 && intel_rb->pf_pending == intel_fb->pf_seq) { | ||||
|    if (intel_fb->Base.Name == 0 && intel_rb && | ||||
|        intel_rb->pf_pending == intel_fb->pf_seq) { | ||||
|       GLint pf_pipes = intel_fb->pf_pipes; | ||||
|       BATCH_LOCALS; | ||||
|  | ||||
| @@ -1019,16 +1020,11 @@ intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb) | ||||
|    /* | ||||
|     * How many color buffers are we drawing into? | ||||
|     */ | ||||
|    if (fb->_NumColorDrawBuffers[0] != 1 | ||||
| #if 0 | ||||
|        /* XXX FBO temporary - always use software rendering */ | ||||
|        || 1 | ||||
| #endif | ||||
|       ) { | ||||
|    if (fb->_NumColorDrawBuffers[0] != 1) { | ||||
|       /* writing to 0 or 2 or 4 color buffers */ | ||||
|       /*_mesa_debug(ctx, "Software rendering\n");*/ | ||||
|       FALLBACK(intel, INTEL_FALLBACK_DRAW_BUFFER, GL_TRUE); | ||||
|       front = 1;                /* might not have back color buffer */ | ||||
|       colorRegion = NULL; | ||||
|    } | ||||
|    else { | ||||
|       /* draw to exactly one color buffer */ | ||||
| @@ -1037,30 +1033,30 @@ intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb) | ||||
|       if (fb->_ColorDrawBufferMask[0] == BUFFER_BIT_FRONT_LEFT) { | ||||
|          front = 1; | ||||
|       } | ||||
|    } | ||||
|  | ||||
|    /* | ||||
|     * Get the intel_renderbuffer for the colorbuffer we're drawing into. | ||||
|     * And set up cliprects. | ||||
|     */ | ||||
|    if (fb->Name == 0) { | ||||
|       /* drawing to window system buffer */ | ||||
|       if (front) { | ||||
|          intelSetFrontClipRects(intel); | ||||
|          colorRegion = intel_get_rb_region(fb, BUFFER_FRONT_LEFT); | ||||
|       /* | ||||
|        * Get the intel_renderbuffer for the colorbuffer we're drawing into. | ||||
|        * And set up cliprects. | ||||
|        */ | ||||
|       if (fb->Name == 0) { | ||||
| 	 /* drawing to window system buffer */ | ||||
| 	 if (front) { | ||||
| 	    intelSetFrontClipRects(intel); | ||||
| 	    colorRegion = intel_get_rb_region(fb, BUFFER_FRONT_LEFT); | ||||
| 	 } | ||||
| 	 else { | ||||
| 	    intelSetBackClipRects(intel); | ||||
| 	    colorRegion = intel_get_rb_region(fb, BUFFER_BACK_LEFT); | ||||
| 	 } | ||||
|       } | ||||
|       else { | ||||
|          intelSetBackClipRects(intel); | ||||
|          colorRegion = intel_get_rb_region(fb, BUFFER_BACK_LEFT); | ||||
| 	 /* drawing to user-created FBO */ | ||||
| 	 struct intel_renderbuffer *irb; | ||||
| 	 intelSetRenderbufferClipRects(intel); | ||||
| 	 irb = intel_renderbuffer(fb->_ColorDrawBuffers[0][0]); | ||||
| 	 colorRegion = (irb && irb->region) ? irb->region : NULL; | ||||
|       } | ||||
|    } | ||||
|    else { | ||||
|       /* drawing to user-created FBO */ | ||||
|       struct intel_renderbuffer *irb; | ||||
|       intelSetRenderbufferClipRects(intel); | ||||
|       irb = intel_renderbuffer(fb->_ColorDrawBuffers[0][0]); | ||||
|       colorRegion = (irb && irb->region) ? irb->region : NULL; | ||||
|    } | ||||
|  | ||||
|    /* Update culling direction which changes depending on the | ||||
|     * orientation of the buffer: | ||||
|   | ||||
| @@ -315,7 +315,7 @@ intelFinish(GLcontext * ctx) | ||||
|    intelFlush(ctx); | ||||
|    if (intel->batch->last_fence) { | ||||
|       driFenceFinish(intel->batch->last_fence, | ||||
|                      0, GL_FALSE); | ||||
|                      DRM_FENCE_TYPE_EXE | DRM_I915_FENCE_TYPE_RW, GL_FALSE); | ||||
|       driFenceUnReference(intel->batch->last_fence); | ||||
|       intel->batch->last_fence = NULL; | ||||
|    } | ||||
|   | ||||
| @@ -189,6 +189,7 @@ struct intel_context | ||||
|    struct _DriFenceObject *first_swap_fence; | ||||
|  | ||||
|    struct intel_batchbuffer *batch; | ||||
|    GLuint last_state_batch_id; | ||||
|  | ||||
|    struct | ||||
|    { | ||||
|   | ||||
| @@ -75,6 +75,7 @@ intel_miptree_create(struct intel_context *intel, | ||||
|    mt->cpp = compress_byte ? compress_byte : cpp; | ||||
|    mt->compressed = compress_byte ? 1 : 0; | ||||
|    mt->refcount = 1;  | ||||
|    mt->pitch = 0; | ||||
|  | ||||
|    switch (intel->intelScreen->deviceID) { | ||||
|    case PCI_CHIP_I945_G: | ||||
| @@ -83,7 +84,7 @@ intel_miptree_create(struct intel_context *intel, | ||||
|    case PCI_CHIP_G33_G: | ||||
|    case PCI_CHIP_Q33_G: | ||||
|    case PCI_CHIP_Q35_G: | ||||
|       ok = i945_miptree_layout(mt); | ||||
|       ok = i945_miptree_layout(intel, mt); | ||||
|       break; | ||||
|    case PCI_CHIP_I915_G: | ||||
|    case PCI_CHIP_I915_GM: | ||||
| @@ -93,28 +94,12 @@ intel_miptree_create(struct intel_context *intel, | ||||
|    default: | ||||
|       /* All the i830 chips and the i915 use this layout: | ||||
|        */ | ||||
|       ok = i915_miptree_layout(mt); | ||||
|       ok = i915_miptree_layout(intel, mt); | ||||
|       break; | ||||
|    } | ||||
|  | ||||
|    if (ok) { | ||||
|       if (!mt->compressed) { | ||||
| 	 /* XXX: Align pitch to multiple of 64 bytes for now to allow | ||||
| 	  * render-to-texture to work in all cases. This should probably be | ||||
| 	  * replaced at some point by some scheme to only do this when really | ||||
| 	  * necessary. | ||||
| 	  */ | ||||
| 	 mt->pitch = (mt->pitch * cpp + 63) & ~63; | ||||
|  | ||||
| 	 /* XXX: At least the i915 seems very upset when the pitch is a multiple | ||||
| 	  * of 1024 and sometimes 512 bytes - performance can drop by several | ||||
| 	  * times. Go to the next multiple of 64 for now. | ||||
| 	  */ | ||||
| 	 if (!(mt->pitch & 511)) | ||||
| 	    mt->pitch += 64; | ||||
|  | ||||
| 	 mt->pitch /= cpp; | ||||
|       } | ||||
|       assert (mt->pitch); | ||||
|  | ||||
|       mt->region = intel_region_alloc(intel->intelScreen, | ||||
|                                       mt->cpp, mt->pitch, mt->total_height); | ||||
| @@ -128,6 +113,42 @@ intel_miptree_create(struct intel_context *intel, | ||||
|    return mt; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * intel_miptree_pitch_align: | ||||
|  * | ||||
|  * @intel: intel context pointer | ||||
|  * | ||||
|  * @mt: the miptree to compute pitch alignment for | ||||
|  * | ||||
|  * @pitch: the natural pitch value | ||||
|  * | ||||
|  * Given @pitch, compute a larger value which accounts for | ||||
|  * any necessary alignment required by the device | ||||
|  */ | ||||
|  | ||||
| int intel_miptree_pitch_align (struct intel_context *intel, | ||||
| 			       struct intel_mipmap_tree *mt, | ||||
| 			       int pitch) | ||||
| { | ||||
|    if (!mt->compressed) { | ||||
|       /* XXX: Align pitch to multiple of 64 bytes for now to allow | ||||
|        * render-to-texture to work in all cases. This should probably be | ||||
|        * replaced at some point by some scheme to only do this when really | ||||
|        * necessary. | ||||
|        */ | ||||
|       pitch = (pitch * mt->cpp + 63) & ~63; | ||||
|  | ||||
|       /* XXX: At least the i915 seems very upset when the pitch is a multiple | ||||
|        * of 1024 and sometimes 512 bytes - performance can drop by several | ||||
|        * times. Go to the next multiple of the required alignment for now. | ||||
|        */ | ||||
|       if (!(pitch & 511)) | ||||
| 	 pitch += 64; | ||||
|  | ||||
|       pitch /= mt->cpp; | ||||
|    } | ||||
|    return pitch; | ||||
| } | ||||
|  | ||||
| void | ||||
| intel_miptree_reference(struct intel_mipmap_tree **dst, | ||||
|   | ||||
| @@ -123,6 +123,10 @@ struct intel_mipmap_tree *intel_miptree_create(struct intel_context *intel, | ||||
|                                                GLuint cpp, | ||||
|                                                GLuint compress_byte); | ||||
|  | ||||
| int intel_miptree_pitch_align (struct intel_context *intel, | ||||
| 			       struct intel_mipmap_tree *mt, | ||||
| 			       int pitch); | ||||
|  | ||||
| void intel_miptree_reference(struct intel_mipmap_tree **dst, | ||||
|                              struct intel_mipmap_tree *src); | ||||
|  | ||||
| @@ -190,8 +194,10 @@ void intel_miptree_image_copy(struct intel_context *intel, | ||||
|  | ||||
| /* i915_mipmap_tree.c: | ||||
|  */ | ||||
| GLboolean i915_miptree_layout(struct intel_mipmap_tree *mt); | ||||
| GLboolean i945_miptree_layout(struct intel_mipmap_tree *mt); | ||||
| GLboolean i915_miptree_layout(struct intel_context *intel, | ||||
| 			      struct intel_mipmap_tree *mt); | ||||
| GLboolean i945_miptree_layout(struct intel_context *intel, | ||||
| 			      struct intel_mipmap_tree *mt); | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -214,7 +214,7 @@ intel_run_render(GLcontext * ctx, struct tnl_pipeline_stage *stage) | ||||
|    tnl->Driver.Render.Start(ctx); | ||||
|  | ||||
|    for (i = 0; i < VB->PrimitiveCount; i++) { | ||||
|       GLuint prim = VB->Primitive[i].mode; | ||||
|       GLuint prim = _tnl_translate_prim(&VB->Primitive[i]); | ||||
|       GLuint start = VB->Primitive[i].start; | ||||
|       GLuint length = VB->Primitive[i].count; | ||||
|  | ||||
|   | ||||
| @@ -95,6 +95,7 @@ typedef struct | ||||
|    struct _DriBufferPool *regionPool; | ||||
|    struct _DriBufferPool *staticPool; | ||||
|    unsigned int maxBatchSize; | ||||
|    unsigned batch_id; | ||||
|    GLboolean havePools; | ||||
| } intelScreenPrivate; | ||||
|  | ||||
|   | ||||
| @@ -111,6 +111,9 @@ intelStartInlinePrimitive(struct intel_context *intel, | ||||
|    BEGIN_BATCH(2, batch_flags); | ||||
|    OUT_BATCH(0); | ||||
|  | ||||
|    assert(intel->batch->id == intel->last_state_batch_id); | ||||
|    assert((intel->batch->dirty_state & (1<<1)) == 0); | ||||
|  | ||||
|    intel->prim.start_ptr = intel->batch->ptr; | ||||
|    intel->prim.primitive = prim; | ||||
|    intel->prim.flush = intel_flush_inline_primitive; | ||||
|   | ||||
| @@ -143,13 +143,15 @@ static struct { | ||||
|    { CMD_CONST_BUFFER, "CONST_BUFFER",  1 }, | ||||
|    { CMD_STATE_BASE_ADDRESS, "STATE_BASE_ADDRESS",  1 }, | ||||
|    { CMD_STATE_INSN_POINTER, "STATE_INSN_POINTER",  1 }, | ||||
|    { CMD_PIPELINE_SELECT, "PIPELINE_SELECT", 0, }, | ||||
|    { CMD_PIPELINE_SELECT_965, "PIPELINE_SELECT", 0, }, | ||||
|    { CMD_PIPELINE_SELECT_IGD, "PIPELINE_SELECT", 0,}, | ||||
|    { CMD_PIPELINED_STATE_POINTERS, "PIPELINED_STATE_POINTERS", 1 }, | ||||
|    { CMD_BINDING_TABLE_PTRS, "BINDING_TABLE_PTRS", 1 }, | ||||
|    { CMD_VERTEX_BUFFER, "VERTEX_BUFFER", 1 }, | ||||
|    { CMD_VERTEX_ELEMENT, "VERTEX_ELEMENT", 1 }, | ||||
|    { CMD_INDEX_BUFFER, "INDEX_BUFFER", 1 }, | ||||
|    { CMD_VF_STATISTICS, "VF_STATISTICS", 0 }, | ||||
|    { CMD_VF_STATISTICS_965, "VF_STATISTICS", 0 }, | ||||
|    { CMD_VF_STATISTICS_IGD, "VF_STATISTICS", 0 }, | ||||
|    { CMD_DRAW_RECT, "DRAW_RECT", 1 }, | ||||
|    { CMD_BLEND_CONSTANT_COLOR, "BLEND_CONSTANT_COLOR", 1 }, | ||||
|    { CMD_CHROMA_KEY, "CHROMA_KEY", 1 }, | ||||
| @@ -157,6 +159,7 @@ static struct { | ||||
|    { CMD_POLY_STIPPLE_OFFSET, "POLY_STIPPLE_OFFSET", 1 }, | ||||
|    { CMD_POLY_STIPPLE_PATTERN, "POLY_STIPPLE_PATTERN", 1 }, | ||||
|    { CMD_LINE_STIPPLE_PATTERN, "LINE_STIPPLE_PATTERN", 1 }, | ||||
|    { CMD_AA_LINE_PARAMETERS, "AA_LINE_PARAMETERS", 1}, | ||||
|    { CMD_GLOBAL_DEPTH_OFFSET_CLAMP, "GLOBAL_DEPTH_OFFSET_CLAMP", 1 }, | ||||
|    { CMD_PIPE_CONTROL, "PIPE_CONTROL", 1 }, | ||||
|    { CMD_MI_FLUSH, "MI_FLUSH", 0 }, | ||||
|   | ||||
| @@ -60,7 +60,7 @@ static void compile_clip_prog( struct brw_context *brw, | ||||
|     | ||||
|    /* Begin the compilation: | ||||
|     */ | ||||
|    brw_init_compile(&c.func); | ||||
|    brw_init_compile(brw, &c.func); | ||||
|  | ||||
|    c.func.single_program_flow = 1; | ||||
|  | ||||
|   | ||||
| @@ -72,6 +72,10 @@ static void upload_clip_unit( struct brw_context *brw ) | ||||
|    clip.clip5.viewport_xy_clip_enable = 1; | ||||
|    clip.clip5.vertex_position_space = BRW_CLIP_NDCSPACE; | ||||
|    clip.clip5.api_mode = BRW_CLIP_API_OGL;    | ||||
|  | ||||
|    if (BRW_IS_IGD(brw)) | ||||
|       clip.clip5.negative_w_clip_test = 1; | ||||
|  | ||||
|    clip.clip6.clipper_viewport_state_ptr = 0; | ||||
|    clip.viewport_xmin = -1; | ||||
|    clip.viewport_xmax = 1; | ||||
|   | ||||
| @@ -78,7 +78,7 @@ void brw_clip_tri_alloc_regs( struct brw_clip_compile *c, | ||||
|    } | ||||
|  | ||||
|    c->reg.t          = brw_vec1_grf(i, 0); | ||||
|    c->reg.loopcount  = retype(brw_vec1_grf(i, 1), BRW_REGISTER_TYPE_UD); | ||||
|    c->reg.loopcount  = retype(brw_vec1_grf(i, 1), BRW_REGISTER_TYPE_D); | ||||
|    c->reg.nr_verts   = retype(brw_vec1_grf(i, 2), BRW_REGISTER_TYPE_UD); | ||||
|    c->reg.planemask  = retype(brw_vec1_grf(i, 3), BRW_REGISTER_TYPE_UD); | ||||
|    c->reg.plane_equation = brw_vec4_grf(i, 4); | ||||
|   | ||||
| @@ -262,7 +262,7 @@ void brw_clip_kill_thread(struct brw_clip_compile *c) | ||||
| 		 c->reg.R0, | ||||
| 		 0,		/* allocate */ | ||||
| 		 0,		/* used */ | ||||
| 		 0, 		/* msg len */ | ||||
| 		 1, 		/* msg len */ | ||||
| 		 0, 		/* response len */ | ||||
| 		 1, 		/* eot */ | ||||
| 		 1,		/* writes complete */ | ||||
| @@ -343,12 +343,14 @@ void brw_clip_init_clipmask( struct brw_clip_compile *c ) | ||||
|       release_tmp(c, tmp); | ||||
|    } | ||||
|  | ||||
|    /* Test for -ve rhw workaround  | ||||
|     */ | ||||
|    brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ); | ||||
|    brw_AND(p, vec1(brw_null_reg()), incoming, brw_imm_ud(1<<20)); | ||||
|    brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud(0x3f)); | ||||
|    brw_set_predicate_control(p, BRW_PREDICATE_NONE); | ||||
|    if (!BRW_IS_IGD(p->brw)) { | ||||
|        /* Test for -ve rhw workaround  | ||||
|         */ | ||||
|        brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ); | ||||
|        brw_AND(p, vec1(brw_null_reg()), incoming, brw_imm_ud(1<<20)); | ||||
|        brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud(0x3f)); | ||||
|    } | ||||
|  | ||||
|    brw_set_predicate_control(p, BRW_PREDICATE_NONE); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -815,14 +815,16 @@ | ||||
|  | ||||
| #define CMD_STATE_BASE_ADDRESS        0x6101 | ||||
| #define CMD_STATE_INSN_POINTER        0x6102 | ||||
| #define CMD_PIPELINE_SELECT           0x6104 | ||||
| #define CMD_PIPELINE_SELECT_965       0x6104 | ||||
| #define CMD_PIPELINE_SELECT_IGD       0x6904 | ||||
|  | ||||
| #define CMD_PIPELINED_STATE_POINTERS  0x7800 | ||||
| #define CMD_BINDING_TABLE_PTRS        0x7801 | ||||
| #define CMD_VERTEX_BUFFER             0x7808 | ||||
| #define CMD_VERTEX_ELEMENT            0x7809 | ||||
| #define CMD_INDEX_BUFFER              0x780a | ||||
| #define CMD_VF_STATISTICS             0x780b | ||||
| #define CMD_VF_STATISTICS_965         0x780b | ||||
| #define CMD_VF_STATISTICS_IGD         0x680b | ||||
|  | ||||
| #define CMD_DRAW_RECT                 0x7900 | ||||
| #define CMD_BLEND_CONSTANT_COLOR      0x7901 | ||||
| @@ -832,6 +834,7 @@ | ||||
| #define CMD_POLY_STIPPLE_PATTERN      0x7907 | ||||
| #define CMD_LINE_STIPPLE_PATTERN      0x7908 | ||||
| #define CMD_GLOBAL_DEPTH_OFFSET_CLAMP 0x7909 | ||||
| #define CMD_AA_LINE_PARAMETERS        0x790a | ||||
|  | ||||
| #define CMD_PIPE_CONTROL              0x7a00 | ||||
|  | ||||
| @@ -845,6 +848,9 @@ | ||||
| #define R02_PRIM_END    0x1 | ||||
| #define R02_PRIM_START  0x2 | ||||
|  | ||||
|  | ||||
| #define BRW_IS_IGD(brw)     ((brw)->intel.intelScreen->deviceID == PCI_CHIP_IGD_GM) | ||||
| #define CMD_PIPELINE_SELECT(brw)       ((BRW_IS_IGD(brw)) ? CMD_PIPELINE_SELECT_IGD : CMD_PIPELINE_SELECT_965) | ||||
| #define CMD_VF_STATISTICS(brw)         ((BRW_IS_IGD(brw)) ? CMD_VF_STATISTICS_IGD : CMD_VF_STATISTICS_965) | ||||
| #define URB_SIZES(brw)                 ((BRW_IS_IGD(brw)) ? 384 : 256)  /* 512 bit unit */ | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -101,8 +101,9 @@ void brw_pop_insn_state( struct brw_compile *p ) | ||||
|  | ||||
| /*********************************************************************** | ||||
|  */ | ||||
| void brw_init_compile( struct brw_compile *p ) | ||||
| void brw_init_compile( struct brw_context *brw, struct brw_compile *p ) | ||||
| { | ||||
|    p->brw = brw; | ||||
|    p->nr_insn = 0; | ||||
|    p->current = p->stack; | ||||
|    memset(p->current, 0, sizeof(p->current[0])); | ||||
|   | ||||
| @@ -105,6 +105,7 @@ struct brw_compile { | ||||
|  | ||||
|    GLuint flag_value; | ||||
|    GLboolean single_program_flow; | ||||
|    struct brw_context *brw; | ||||
| }; | ||||
|  | ||||
|  | ||||
| @@ -680,7 +681,7 @@ void brw_set_predicate_control_flag_value( struct brw_compile *p, GLuint value ) | ||||
| void brw_set_predicate_control( struct brw_compile *p, GLuint pc ); | ||||
| void brw_set_conditionalmod( struct brw_compile *p, GLuint conditional ); | ||||
|  | ||||
| void brw_init_compile( struct brw_compile *p ); | ||||
| void brw_init_compile( struct brw_context *, struct brw_compile *p ); | ||||
| const GLuint *brw_get_program( struct brw_compile *p, GLuint *sz ); | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -318,7 +318,8 @@ static void brw_set_dp_read_message( struct brw_instruction *insn, | ||||
|    insn->bits3.dp_read.end_of_thread = end_of_thread; | ||||
| } | ||||
|  | ||||
| static void brw_set_sampler_message( struct brw_instruction *insn, | ||||
| static void brw_set_sampler_message(struct brw_context *brw, | ||||
| 				     struct brw_instruction *insn, | ||||
| 				     GLuint binding_table_index, | ||||
| 				     GLuint sampler, | ||||
| 				     GLuint msg_type, | ||||
| @@ -328,14 +329,24 @@ static void brw_set_sampler_message( struct brw_instruction *insn, | ||||
| { | ||||
|    brw_set_src1(insn, brw_imm_d(0)); | ||||
|  | ||||
|    insn->bits3.sampler.binding_table_index = binding_table_index; | ||||
|    insn->bits3.sampler.sampler = sampler; | ||||
|    insn->bits3.sampler.msg_type = msg_type; | ||||
|    insn->bits3.sampler.return_format = BRW_SAMPLER_RETURN_FORMAT_FLOAT32; | ||||
|    insn->bits3.sampler.response_length = response_length; | ||||
|    insn->bits3.sampler.msg_length = msg_length; | ||||
|    insn->bits3.sampler.end_of_thread = eot; | ||||
|    insn->bits3.sampler.msg_target = BRW_MESSAGE_TARGET_SAMPLER; | ||||
|    if (BRW_IS_IGD(brw)) { | ||||
|       insn->bits3.sampler_igd.binding_table_index = binding_table_index; | ||||
|       insn->bits3.sampler_igd.sampler = sampler; | ||||
|       insn->bits3.sampler_igd.msg_type = msg_type; | ||||
|       insn->bits3.sampler_igd.response_length = response_length; | ||||
|       insn->bits3.sampler_igd.msg_length = msg_length; | ||||
|       insn->bits3.sampler_igd.end_of_thread = eot; | ||||
|       insn->bits3.sampler_igd.msg_target = BRW_MESSAGE_TARGET_SAMPLER; | ||||
|    } else { | ||||
|       insn->bits3.sampler.binding_table_index = binding_table_index; | ||||
|       insn->bits3.sampler.sampler = sampler; | ||||
|       insn->bits3.sampler.msg_type = msg_type; | ||||
|       insn->bits3.sampler.return_format = BRW_SAMPLER_RETURN_FORMAT_FLOAT32; | ||||
|       insn->bits3.sampler.response_length = response_length; | ||||
|       insn->bits3.sampler.msg_length = msg_length; | ||||
|       insn->bits3.sampler.end_of_thread = eot; | ||||
|       insn->bits3.sampler.msg_target = BRW_MESSAGE_TARGET_SAMPLER; | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -985,7 +996,7 @@ void brw_SAMPLE(struct brw_compile *p, | ||||
|  | ||||
|       brw_set_dest(insn, dest); | ||||
|       brw_set_src0(insn, src0); | ||||
|       brw_set_sampler_message(insn, | ||||
|       brw_set_sampler_message(p->brw, insn, | ||||
| 			      binding_table_index, | ||||
| 			      sampler, | ||||
| 			      msg_type, | ||||
|   | ||||
| @@ -65,7 +65,7 @@ static void compile_gs_prog( struct brw_context *brw, | ||||
|     | ||||
|    /* Begin the compilation: | ||||
|     */ | ||||
|    brw_init_compile(&c.func); | ||||
|    brw_init_compile(brw, &c.func); | ||||
|  | ||||
|    c.func.single_program_flow = 1; | ||||
|  | ||||
|   | ||||
| @@ -249,7 +249,7 @@ static void upload_depthbuffer(struct brw_context *brw) | ||||
|    memset(&bd, 0, sizeof(bd)); | ||||
|  | ||||
|    bd.header.bits.opcode = CMD_DEPTH_BUFFER; | ||||
|    bd.header.bits.length = sizeof(bd)/4-2; | ||||
|    bd.header.bits.length = BRW_IS_IGD(brw) ? (sizeof(bd)/4-2) : (sizeof(bd)/4-3); | ||||
|    bd.dword1.bits.pitch = (region->pitch * region->cpp) - 1; | ||||
|     | ||||
|    switch (region->cpp) { | ||||
| @@ -359,6 +359,33 @@ const struct brw_tracked_state brw_polygon_stipple_offset = { | ||||
|    .update = upload_polygon_stipple_offset | ||||
| }; | ||||
|  | ||||
| /********************************************************************** | ||||
|  * AA Line parameters | ||||
|  */ | ||||
| static void upload_aa_line_parameters(struct brw_context *brw) | ||||
| { | ||||
|    struct brw_aa_line_parameters balp; | ||||
|     | ||||
|    if (!BRW_IS_IGD(brw)) | ||||
|       return; | ||||
|  | ||||
|    /* use legacy aa line coverage computation */ | ||||
|    memset(&balp, 0, sizeof(balp)); | ||||
|    balp.header.opcode = CMD_AA_LINE_PARAMETERS; | ||||
|    balp.header.length = sizeof(balp) / 4 - 2; | ||||
|     | ||||
|    BRW_CACHED_BATCH_STRUCT(brw, &balp); | ||||
| } | ||||
|  | ||||
| const struct brw_tracked_state brw_aa_line_parameters = { | ||||
|    .dirty = { | ||||
|       .mesa = 0, | ||||
|       .brw = BRW_NEW_CONTEXT, | ||||
|       .cache = 0 | ||||
|    }, | ||||
|    .update = upload_aa_line_parameters | ||||
| }; | ||||
|  | ||||
| /*********************************************************************** | ||||
|  * Line stipple packet | ||||
|  */ | ||||
| @@ -441,7 +468,7 @@ static void upload_invarient_state( struct brw_context *brw ) | ||||
|       struct brw_pipeline_select ps; | ||||
|  | ||||
|       memset(&ps, 0, sizeof(ps)); | ||||
|       ps.header.opcode = CMD_PIPELINE_SELECT; | ||||
|       ps.header.opcode = CMD_PIPELINE_SELECT(brw); | ||||
|       ps.header.pipeline_select = 0; | ||||
|       BRW_BATCH_STRUCT(brw, &ps); | ||||
|    } | ||||
| @@ -477,7 +504,7 @@ static void upload_invarient_state( struct brw_context *brw ) | ||||
|       struct brw_vf_statistics vfs; | ||||
|       memset(&vfs, 0, sizeof(vfs)); | ||||
|  | ||||
|       vfs.opcode = CMD_VF_STATISTICS; | ||||
|       vfs.opcode = CMD_VF_STATISTICS(brw); | ||||
|       if (INTEL_DEBUG & DEBUG_STATS) | ||||
| 	 vfs.statistics_enable = 1;  | ||||
|  | ||||
|   | ||||
| @@ -57,7 +57,7 @@ static void compile_sf_prog( struct brw_context *brw, | ||||
|  | ||||
|    /* Begin the compilation: | ||||
|     */ | ||||
|    brw_init_compile(&c.func); | ||||
|    brw_init_compile(brw, &c.func); | ||||
|  | ||||
|    c.key = *key; | ||||
|    c.nr_attrs = brw_count_bits(c.key.attrs); | ||||
| @@ -82,15 +82,15 @@ static void compile_sf_prog( struct brw_context *brw, | ||||
|    switch (key->primitive) { | ||||
|    case SF_TRIANGLES: | ||||
|       c.nr_verts = 3; | ||||
|       brw_emit_tri_setup( &c ); | ||||
|       brw_emit_tri_setup( &c, GL_TRUE ); | ||||
|       break; | ||||
|    case SF_LINES: | ||||
|       c.nr_verts = 2; | ||||
|       brw_emit_line_setup( &c ); | ||||
|       brw_emit_line_setup( &c, GL_TRUE ); | ||||
|       break; | ||||
|    case SF_POINTS: | ||||
|       c.nr_verts = 1; | ||||
|       brw_emit_point_setup( &c ); | ||||
|       brw_emit_point_setup( &c, GL_TRUE ); | ||||
|       break; | ||||
|    case SF_UNFILLED_TRIS: | ||||
|       c.nr_verts = 3; | ||||
|   | ||||
| @@ -97,9 +97,9 @@ struct brw_sf_compile { | ||||
| }; | ||||
|  | ||||
|   | ||||
| void brw_emit_tri_setup( struct brw_sf_compile *c ); | ||||
| void brw_emit_line_setup( struct brw_sf_compile *c ); | ||||
| void brw_emit_point_setup( struct brw_sf_compile *c ); | ||||
| void brw_emit_tri_setup( struct brw_sf_compile *c, GLboolean allocate ); | ||||
| void brw_emit_line_setup( struct brw_sf_compile *c, GLboolean allocate ); | ||||
| void brw_emit_point_setup( struct brw_sf_compile *c, GLboolean allocate ); | ||||
| void brw_emit_anyprim_setup( struct brw_sf_compile *c ); | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -343,13 +343,16 @@ static GLboolean calculate_masks( struct brw_sf_compile *c, | ||||
|  | ||||
|  | ||||
|  | ||||
| void brw_emit_tri_setup( struct brw_sf_compile *c ) | ||||
| void brw_emit_tri_setup( struct brw_sf_compile *c, GLboolean allocate) | ||||
| { | ||||
|    struct brw_compile *p = &c->func; | ||||
|    GLuint i; | ||||
|  | ||||
|    c->nr_verts = 3; | ||||
|    alloc_regs(c); | ||||
|  | ||||
|    if (allocate) | ||||
|       alloc_regs(c); | ||||
|  | ||||
|    invert_det(c); | ||||
|    copy_z_inv_w(c); | ||||
|  | ||||
| @@ -428,14 +431,17 @@ void brw_emit_tri_setup( struct brw_sf_compile *c ) | ||||
|  | ||||
|  | ||||
|  | ||||
| void brw_emit_line_setup( struct brw_sf_compile *c ) | ||||
| void brw_emit_line_setup( struct brw_sf_compile *c, GLboolean allocate) | ||||
| { | ||||
|    struct brw_compile *p = &c->func; | ||||
|    GLuint i; | ||||
|  | ||||
|  | ||||
|    c->nr_verts = 2; | ||||
|    alloc_regs(c); | ||||
|  | ||||
|    if (allocate) | ||||
|       alloc_regs(c); | ||||
|  | ||||
|    invert_det(c); | ||||
|    copy_z_inv_w(c); | ||||
|  | ||||
| @@ -497,17 +503,19 @@ void brw_emit_line_setup( struct brw_sf_compile *c ) | ||||
|    }  | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Points setup - several simplifications as all attributes are | ||||
|  * constant across the face of the point (point sprites excluded!) | ||||
|  */ | ||||
| void brw_emit_point_setup( struct brw_sf_compile *c ) | ||||
| void brw_emit_point_setup( struct brw_sf_compile *c, GLboolean allocate) | ||||
| { | ||||
|    struct brw_compile *p = &c->func; | ||||
|    GLuint i; | ||||
|  | ||||
|    c->nr_verts = 1; | ||||
|    alloc_regs(c); | ||||
|     | ||||
|    if (allocate) | ||||
|       alloc_regs(c); | ||||
|  | ||||
|    copy_z_inv_w(c); | ||||
|  | ||||
|    brw_MOV(p, c->m1Cx, brw_imm_ud(0)); /* zero - move out of loop */ | ||||
| @@ -564,7 +572,10 @@ void brw_emit_anyprim_setup( struct brw_sf_compile *c ) | ||||
|    struct brw_reg primmask; | ||||
|    struct brw_instruction *jmp; | ||||
|    struct brw_reg v1_null_ud = vec1(retype(brw_null_reg(), BRW_REGISTER_TYPE_UD)); | ||||
|     | ||||
|    GLuint saveflag; | ||||
|  | ||||
|    c->nr_verts = 3; | ||||
|    alloc_regs(c); | ||||
|  | ||||
|    primmask = retype(get_element(c->tmp, 0), BRW_REGISTER_TYPE_UD); | ||||
| @@ -582,10 +593,15 @@ void brw_emit_anyprim_setup( struct brw_sf_compile *c ) | ||||
| 					       (1<<_3DPRIM_TRIFAN_NOSTIPPLE))); | ||||
|    jmp = brw_JMPI(p, ip, ip, brw_imm_w(0)); | ||||
|    { | ||||
|       brw_push_insn_state(p); | ||||
|       brw_emit_tri_setup( c ); | ||||
|       saveflag = p->flag_value; | ||||
|       brw_push_insn_state(p);  | ||||
|       brw_emit_tri_setup( c, GL_FALSE ); | ||||
|       brw_pop_insn_state(p); | ||||
|       /* note - thread killed in subroutine */ | ||||
|       p->flag_value = saveflag; | ||||
|       /* note - thread killed in subroutine, so must | ||||
|        * restore the flag which is changed when building | ||||
|        * the subroutine. fix #13240 | ||||
|        */ | ||||
|    } | ||||
|    brw_land_fwd_jump(p, jmp); | ||||
|  | ||||
| @@ -598,14 +614,16 @@ void brw_emit_anyprim_setup( struct brw_sf_compile *c ) | ||||
| 					       (1<<_3DPRIM_LINESTRIP_CONT_BF))); | ||||
|    jmp = brw_JMPI(p, ip, ip, brw_imm_w(0)); | ||||
|    { | ||||
|       saveflag = p->flag_value; | ||||
|       brw_push_insn_state(p);  | ||||
|       brw_emit_line_setup( c ); | ||||
|       brw_emit_line_setup( c, GL_FALSE ); | ||||
|       brw_pop_insn_state(p); | ||||
|       p->flag_value = saveflag; | ||||
|       /* note - thread killed in subroutine */ | ||||
|    } | ||||
|    brw_land_fwd_jump(p, jmp);  | ||||
|  | ||||
|    brw_emit_point_setup( c ); | ||||
|    brw_emit_point_setup( c, GL_FALSE ); | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -185,7 +185,8 @@ static void upload_sf_unit( struct brw_context *brw ) | ||||
|    sf.sf6.point_rast_rule = 1;	/* opengl conventions */ | ||||
|    sf.sf7.point_size = brw->attribs.Point->_Size * (1<<3); | ||||
|    sf.sf7.use_point_size_state = !brw->attribs.Point->_Attenuated; | ||||
|        | ||||
|    sf.sf7.aa_line_distance_mode = 0; | ||||
|  | ||||
|    /* might be BRW_NEW_PRIMITIVE if we have to adjust pv for polygons: | ||||
|     */ | ||||
|    sf.sf7.trifan_pv = 2; | ||||
|   | ||||
| @@ -50,6 +50,7 @@ const struct brw_tracked_state brw_gs_prog; | ||||
| const struct brw_tracked_state brw_gs_unit; | ||||
| const struct brw_tracked_state brw_drawing_rect; | ||||
| const struct brw_tracked_state brw_line_stipple; | ||||
| const struct brw_tracked_state brw_aa_line_parameters; | ||||
| const struct brw_tracked_state brw_pipelined_state_pointers; | ||||
| const struct brw_tracked_state brw_binding_table_pointers; | ||||
| const struct brw_tracked_state brw_depthbuffer; | ||||
|   | ||||
| @@ -103,6 +103,7 @@ static void clear_batch_cache( struct brw_context *brw ) | ||||
|  | ||||
| void brw_clear_batch_cache_flush( struct brw_context *brw ) | ||||
| { | ||||
|    bmFinishFenceLock(&(brw->intel), bmSetFenceLock(&(brw->intel))); | ||||
|    clear_batch_cache(brw); | ||||
|  | ||||
|    brw->wrap = 0; | ||||
|   | ||||
| @@ -92,7 +92,7 @@ const struct brw_tracked_state *atoms[] = | ||||
|    &brw_polygon_stipple_offset, | ||||
|  | ||||
|    &brw_line_stipple, | ||||
|  | ||||
|    &brw_aa_line_parameters, | ||||
|    /* Ordering of the commands below is documented as fixed.   | ||||
|     */ | ||||
| #if 0 | ||||
|   | ||||
| @@ -141,7 +141,8 @@ struct brw_depthbuffer | ||||
|       struct { | ||||
| 	 GLuint pitch:18;  | ||||
| 	 GLuint format:3;  | ||||
| 	 GLuint pad:4; | ||||
| 	 GLuint pad:2; | ||||
| 	 GLuint software_tiled_rendering_mode:2; | ||||
| 	 GLuint depth_offset_disable:1;  | ||||
| 	 GLuint tile_walk:1;  | ||||
| 	 GLuint tiled_surface:1;  | ||||
| @@ -166,12 +167,20 @@ struct brw_depthbuffer | ||||
|  | ||||
|    union { | ||||
|       struct { | ||||
| 	 GLuint pad:12; | ||||
| 	 GLuint min_array_element:9;  | ||||
| 	 GLuint pad:10; | ||||
| 	 GLuint min_array_element:11;  | ||||
| 	 GLuint depth:11;  | ||||
|       } bits; | ||||
|       GLuint dword; | ||||
|    } dword4; | ||||
|  | ||||
|    union { | ||||
|       struct { | ||||
|          GLuint xoffset:16; | ||||
|          GLuint yoffset:16; | ||||
|       } bits; | ||||
|       GLuint dword; | ||||
|    } dword5;   /* NEW in Integrated Graphics Device */ | ||||
| }; | ||||
|  | ||||
| struct brw_drawrect | ||||
| @@ -213,6 +222,25 @@ struct brw_indexbuffer | ||||
|    GLuint buffer_end;  | ||||
| }; | ||||
|  | ||||
| /* NEW in Integrated Graphics Device */ | ||||
| struct brw_aa_line_parameters | ||||
| { | ||||
|    struct header header; | ||||
|  | ||||
|    struct { | ||||
|       GLuint aa_coverage_scope:8; | ||||
|       GLuint pad0:8; | ||||
|       GLuint aa_coverage_bias:8; | ||||
|       GLuint pad1:8; | ||||
|    } bits0; | ||||
|  | ||||
|    struct { | ||||
|       GLuint aa_coverage_endcap_slope:8; | ||||
|       GLuint pad0:8; | ||||
|       GLuint aa_coverage_endcap_bias:8; | ||||
|       GLuint pad1:8; | ||||
|    } bits1; | ||||
| }; | ||||
|  | ||||
| struct brw_line_stipple | ||||
| {    | ||||
| @@ -315,7 +343,8 @@ struct brw_pipe_control | ||||
|    { | ||||
|       GLuint length:8; | ||||
|       GLuint notify_enable:1; | ||||
|       GLuint pad:2; | ||||
|       GLuint texture_cache_flush_enable:1; | ||||
|       GLuint indirect_state_pointers_disable:1; | ||||
|       GLuint instruction_state_cache_flush_enable:1; | ||||
|       GLuint write_cache_flush_enable:1; | ||||
|       GLuint depth_stall_enable:1; | ||||
| @@ -547,8 +576,8 @@ struct brw_clip_unit_state | ||||
|       GLuint pad1:1; | ||||
|       GLuint urb_entry_allocation_size:5;  | ||||
|       GLuint pad2:1; | ||||
|       GLuint max_threads:1; 	/* may be less */ | ||||
|       GLuint pad3:6; | ||||
|       GLuint max_threads:5; 	/* may be less */ | ||||
|       GLuint pad3:2; | ||||
|    } thread4;    | ||||
|        | ||||
|    struct | ||||
| @@ -557,7 +586,7 @@ struct brw_clip_unit_state | ||||
|       GLuint clip_mode:3;  | ||||
|       GLuint userclip_enable_flags:8;  | ||||
|       GLuint userclip_must_clip:1;  | ||||
|       GLuint pad1:1; | ||||
|       GLuint negative_w_clip_test:1; | ||||
|       GLuint guard_band_enable:1;  | ||||
|       GLuint viewport_z_clip_enable:1;  | ||||
|       GLuint viewport_xy_clip_enable:1;  | ||||
| @@ -724,7 +753,8 @@ struct brw_sf_unit_state | ||||
|       GLuint use_point_size_state:1;  | ||||
|       GLuint subpixel_precision:1;  | ||||
|       GLuint sprite_point:1;  | ||||
|       GLuint pad0:11; | ||||
|       GLuint pad0:10; | ||||
|       GLuint aa_line_distance_mode:1; | ||||
|       GLuint trifan_pv:2;  | ||||
|       GLuint linestrip_pv:2;  | ||||
|       GLuint tristrip_pv:2;  | ||||
| @@ -749,8 +779,8 @@ struct brw_gs_unit_state | ||||
|       GLuint pad1:1; | ||||
|       GLuint urb_entry_allocation_size:5;  | ||||
|       GLuint pad2:1; | ||||
|       GLuint max_threads:1;  | ||||
|       GLuint pad3:6; | ||||
|       GLuint max_threads:5;  | ||||
|       GLuint pad3:2; | ||||
|    } thread4;    | ||||
|        | ||||
|    struct | ||||
| @@ -764,9 +794,14 @@ struct brw_gs_unit_state | ||||
|    struct | ||||
|    { | ||||
|       GLuint max_vp_index:4;  | ||||
|       GLuint pad0:26; | ||||
|       GLuint reorder_enable:1;  | ||||
|       GLuint pad0:12; | ||||
|       GLuint svbi_post_inc_value:10; | ||||
|       GLuint pad1:1; | ||||
|       GLuint svbi_post_inc_enable:1; | ||||
|       GLuint svbi_payload:1; | ||||
|       GLuint discard_adjaceny:1; | ||||
|       GLuint reorder_enable:1;  | ||||
|       GLuint pad2:1; | ||||
|    } gs6; | ||||
| }; | ||||
|  | ||||
| @@ -786,8 +821,8 @@ struct brw_vs_unit_state | ||||
|       GLuint pad1:1; | ||||
|       GLuint urb_entry_allocation_size:5;  | ||||
|       GLuint pad2:1; | ||||
|       GLuint max_threads:4;  | ||||
|       GLuint pad3:3; | ||||
|       GLuint max_threads:6;  | ||||
|       GLuint pad3:1; | ||||
|    } thread4;    | ||||
|  | ||||
|    struct | ||||
| @@ -815,7 +850,7 @@ struct brw_wm_unit_state | ||||
|     | ||||
|    struct { | ||||
|       GLuint stats_enable:1;  | ||||
|       GLuint pad0:1; | ||||
|       GLuint depth_buffer_clear:1; | ||||
|       GLuint sampler_count:3;  | ||||
|       GLuint sampler_state_pointer:27;  | ||||
|    } wm4; | ||||
| @@ -825,7 +860,9 @@ struct brw_wm_unit_state | ||||
|       GLuint enable_8_pix:1;  | ||||
|       GLuint enable_16_pix:1;  | ||||
|       GLuint enable_32_pix:1;  | ||||
|       GLuint pad0:7; | ||||
|       GLuint enable_con_32_pix:1; | ||||
|       GLuint enable_con_64_pix:1; | ||||
|       GLuint pad0:5; | ||||
|       GLuint legacy_global_depth_bias:1;  | ||||
|       GLuint line_stipple:1;  | ||||
|       GLuint depth_offset:1;  | ||||
| @@ -838,9 +875,8 @@ struct brw_wm_unit_state | ||||
|       GLuint program_computes_depth:1;  | ||||
|       GLuint program_uses_killpixel:1;  | ||||
|       GLuint legacy_line_rast: 1;  | ||||
|       GLuint pad1:1;  | ||||
|       GLuint max_threads:6;  | ||||
|       GLuint pad2:1; | ||||
|       GLuint transposed_urb_read_enable:1;  | ||||
|       GLuint max_threads:7;  | ||||
|    } wm5; | ||||
|     | ||||
|    GLfloat global_depth_offset_constant;   | ||||
| @@ -978,10 +1014,26 @@ struct brw_surface_state | ||||
|    } ss3; | ||||
|     | ||||
|    struct { | ||||
|       GLuint pad:19; | ||||
|       GLuint min_array_elt:9;  | ||||
|       GLuint multisample_position_palette_index:3; | ||||
|       GLuint pad1:1; | ||||
|       GLuint num_multisamples:3; | ||||
|       GLuint pad0:1; | ||||
|       GLuint render_target_view_extent:9; | ||||
|       GLuint min_array_elt:11; | ||||
|       GLuint min_lod:4;  | ||||
|    } ss4; | ||||
|  | ||||
|    struct { | ||||
|       GLuint pad1:16; | ||||
|       GLuint llc_mapping:1; | ||||
|       GLuint mlc_mapping:1; | ||||
|       GLuint gfdt:1; | ||||
|       GLuint gfdt_src:1; | ||||
|       GLuint y_offset:4; | ||||
|       GLuint pad0:1; | ||||
|       GLuint x_offset:7; | ||||
|    } ss5;   /* NEW in Integrated Graphics Device */ | ||||
|  | ||||
| }; | ||||
|  | ||||
|  | ||||
| @@ -1301,6 +1353,17 @@ struct brw_instruction | ||||
| 	 GLuint end_of_thread:1; | ||||
|       } sampler; | ||||
|  | ||||
|       struct { | ||||
|          GLuint binding_table_index:8; | ||||
|          GLuint sampler:4; | ||||
|          GLuint msg_type:4; | ||||
|          GLuint response_length:4; | ||||
|          GLuint msg_length:4; | ||||
|          GLuint msg_target:4; | ||||
|          GLuint pad1:3; | ||||
|          GLuint end_of_thread:1; | ||||
|       } sampler_igd;  | ||||
|  | ||||
|       struct brw_urb_immediate urb; | ||||
|  | ||||
|       struct { | ||||
|   | ||||
| @@ -38,7 +38,7 @@ | ||||
| #include "macros.h" | ||||
|  | ||||
|  | ||||
| GLboolean brw_miptree_layout( struct intel_mipmap_tree *mt ) | ||||
| GLboolean brw_miptree_layout( struct intel_context *intel, struct intel_mipmap_tree *mt ) | ||||
| { | ||||
|    /* XXX: these vary depending on image format:  | ||||
|     */ | ||||
| @@ -102,7 +102,7 @@ GLboolean brw_miptree_layout( struct intel_mipmap_tree *mt ) | ||||
|    } | ||||
|  | ||||
|    default: | ||||
|       i945_miptree_layout_2d(mt); | ||||
|       i945_miptree_layout_2d(intel, mt); | ||||
|       break; | ||||
|    } | ||||
|    DBG("%s: %dx%dx%d - sz 0x%x\n", __FUNCTION__,  | ||||
|   | ||||
| @@ -69,7 +69,7 @@ static GLboolean check_urb_layout( struct brw_context *brw ) | ||||
|    brw->urb.sf_start = brw->urb.clip_start + brw->urb.nr_clip_entries * brw->urb.vsize; | ||||
|    brw->urb.cs_start = brw->urb.sf_start + brw->urb.nr_sf_entries * brw->urb.sfsize; | ||||
|  | ||||
|    return brw->urb.cs_start + brw->urb.nr_cs_entries * brw->urb.csize <= 256; | ||||
|    return brw->urb.cs_start + brw->urb.nr_cs_entries * brw->urb.csize <= URB_SIZES(brw); | ||||
| } | ||||
|  | ||||
| /* Most minimal update, forces re-emit of URB fence packet after GS | ||||
| @@ -153,7 +153,7 @@ static void recalculate_urb_fence( struct brw_context *brw ) | ||||
| 		      brw->urb.clip_start, | ||||
| 		      brw->urb.sf_start, | ||||
| 		      brw->urb.cs_start,  | ||||
| 		      256); | ||||
| 		      URB_SIZES(brw)); | ||||
|        | ||||
|       brw->state.dirty.brw |= BRW_NEW_URB_FENCE; | ||||
|    } | ||||
| @@ -191,13 +191,13 @@ void brw_upload_urb_fence(struct brw_context *brw) | ||||
|    /* The ordering below is correct, not the layout in the | ||||
|     * instruction. | ||||
|     * | ||||
|     * There are 256 urb reg pairs in total. | ||||
|     * There are 256/384 urb reg pairs in total. | ||||
|     */ | ||||
|    uf.bits0.vs_fence  = brw->urb.gs_start; | ||||
|    uf.bits0.gs_fence  = brw->urb.clip_start;  | ||||
|    uf.bits0.clp_fence = brw->urb.sf_start;  | ||||
|    uf.bits1.sf_fence  = brw->urb.cs_start;  | ||||
|    uf.bits1.cs_fence  = 256; | ||||
|    uf.bits1.cs_fence  = URB_SIZES(brw); | ||||
|  | ||||
|    BRW_BATCH_STRUCT(brw, &uf); | ||||
| } | ||||
|   | ||||
| @@ -49,7 +49,7 @@ static void do_vs_prog( struct brw_context *brw, | ||||
|    memset(&c, 0, sizeof(c)); | ||||
|    memcpy(&c.key, key, sizeof(*key)); | ||||
|  | ||||
|    brw_init_compile(&c.func); | ||||
|    brw_init_compile(brw, &c.func); | ||||
|    c.vp = vp; | ||||
|  | ||||
|    c.prog_data.outputs_written = vp->program.Base.OutputsWritten; | ||||
|   | ||||
| @@ -845,7 +845,7 @@ static void emit_vertex_write( struct brw_vs_compile *c) | ||||
|        * Later, clipping will detect ucp[6] and ensure the primitive is | ||||
|        * clipped against all fixed planes. | ||||
|        */ | ||||
|       if (!c->key.know_w_is_one) { | ||||
|       if (!BRW_IS_IGD(p->brw) && !c->key.know_w_is_one) { | ||||
| 	 brw_CMP(p, | ||||
| 		 vec8(brw_null_reg()), | ||||
| 		 BRW_CONDITIONAL_L, | ||||
|   | ||||
| @@ -150,7 +150,6 @@ static void do_wm_prog( struct brw_context *brw, | ||||
|    c->fp = fp; | ||||
|    c->env_param = brw->intel.ctx.FragmentProgram.Parameters; | ||||
|  | ||||
|  | ||||
|    /* Augment fragment program.  Add instructions for pre- and | ||||
|     * post-fragment-program tasks such as interpolation and fogging. | ||||
|     */ | ||||
| @@ -175,7 +174,7 @@ static void do_wm_prog( struct brw_context *brw, | ||||
|  | ||||
|    /* This is where we start emitting gen4 code: | ||||
|     */ | ||||
|    brw_init_compile(&c->func);     | ||||
|    brw_init_compile(brw, &c->func);     | ||||
|  | ||||
|    brw_wm_pass2(c); | ||||
|  | ||||
|   | ||||
| @@ -777,6 +777,7 @@ static void emit_kil( struct brw_wm_compile *c, | ||||
|       brw_push_insn_state(p); | ||||
|       brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_GE, arg0[i], brw_imm_f(0));    | ||||
|       brw_set_predicate_control_flag_value(p, 0xff); | ||||
|       brw_set_compression_control(p, BRW_COMPRESSION_NONE); | ||||
|       brw_AND(p, r0uw, brw_flag_reg(), r0uw); | ||||
|       brw_pop_insn_state(p); | ||||
|    } | ||||
|   | ||||
| @@ -704,6 +704,9 @@ void bmDeleteBuffers(struct intel_context *intel, unsigned n, struct buffer **bu | ||||
| 	 if (buf && buf->block) | ||||
| 	    free_block(intel, buf->block); | ||||
|  | ||||
| 	 if (buf && buf->backing_store) | ||||
| 	    free_backing_store(intel, buf); | ||||
|  | ||||
| 	 if (buf)  | ||||
| 	    free(buf);	  | ||||
|       } | ||||
|   | ||||
| @@ -118,6 +118,9 @@ static const GLubyte *intelGetString( GLcontext *ctx, GLenum name ) | ||||
|       case PCI_CHIP_I965_GM: | ||||
| 	 chipset = "Intel(R) 965GM"; break; | ||||
|          break; | ||||
|       case PCI_CHIP_IGD_GM: | ||||
| 	 chipset = "Intel(R) Integrated Graphics Device"; | ||||
|          break; | ||||
|       default: | ||||
| 	 chipset = "Unknown Intel Chipset"; break; | ||||
|       } | ||||
|   | ||||
| @@ -387,6 +387,8 @@ extern int INTEL_DEBUG; | ||||
| #define PCI_CHIP_I946_GZ		0x2972 | ||||
| #define PCI_CHIP_I965_GM                0x2A02 | ||||
|  | ||||
| #define PCI_CHIP_IGD_GM       0x2A42 | ||||
|  | ||||
|  | ||||
| /* ================================================================ | ||||
|  * intel_context.c: | ||||
|   | ||||
| @@ -91,7 +91,7 @@ struct intel_mipmap_tree *intel_miptree_create( struct intel_context *intel, | ||||
|    default: | ||||
|       if (INTEL_DEBUG & DEBUG_TEXTURE) | ||||
| 	 _mesa_printf("assuming BRW texture layouts\n"); | ||||
|       ok = brw_miptree_layout( mt ); | ||||
|       ok = brw_miptree_layout( intel, mt ); | ||||
|       break; | ||||
|    } | ||||
|  | ||||
| @@ -110,6 +110,29 @@ struct intel_mipmap_tree *intel_miptree_create( struct intel_context *intel, | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * intel_miptree_pitch_align: | ||||
|  * | ||||
|  * @intel: intel context pointer | ||||
|  * | ||||
|  * @mt: the miptree to compute pitch alignment for | ||||
|  * | ||||
|  * @pitch: the natural pitch value | ||||
|  * | ||||
|  * Given @pitch, compute a larger value which accounts for | ||||
|  * any necessary alignment required by the device | ||||
|  */ | ||||
|  | ||||
| int intel_miptree_pitch_align (struct intel_context *intel, | ||||
| 			       struct intel_mipmap_tree *mt, | ||||
| 			       int pitch) | ||||
| { | ||||
|    if (!mt->compressed) | ||||
|       pitch = ((pitch * mt->cpp + 3) & ~3) / mt->cpp; | ||||
|  | ||||
|    return pitch; | ||||
| } | ||||
|  | ||||
|  | ||||
| void intel_miptree_destroy( struct intel_context *intel, | ||||
| 			    struct intel_mipmap_tree *mt ) | ||||
|   | ||||
| @@ -115,6 +115,10 @@ struct intel_mipmap_tree *intel_miptree_create( struct intel_context *intel, | ||||
| 						GLuint cpp, | ||||
| 						GLboolean compressed); | ||||
|  | ||||
| int intel_miptree_pitch_align (struct intel_context *intel, | ||||
| 			       struct intel_mipmap_tree *mt, | ||||
| 			       int pitch); | ||||
|  | ||||
| void intel_miptree_destroy( struct intel_context *intel, | ||||
| 			    struct intel_mipmap_tree *mt ); | ||||
|  | ||||
| @@ -159,7 +163,8 @@ GLboolean intel_miptree_image_data(struct intel_context *intel, | ||||
|  */ | ||||
| GLboolean i915_miptree_layout( struct intel_mipmap_tree *mt ); | ||||
| GLboolean i945_miptree_layout( struct intel_mipmap_tree *mt ); | ||||
| GLboolean brw_miptree_layout( struct intel_mipmap_tree *mt ); | ||||
| GLboolean brw_miptree_layout( struct intel_context *intel, | ||||
| 			      struct intel_mipmap_tree *mt ); | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -40,7 +40,7 @@ static int align(int value, int alignment) | ||||
|    return (value + alignment - 1) & ~(alignment - 1); | ||||
| } | ||||
|  | ||||
| void i945_miptree_layout_2d( struct intel_mipmap_tree *mt ) | ||||
| void i945_miptree_layout_2d( struct intel_context *intel, struct intel_mipmap_tree *mt ) | ||||
| { | ||||
|    GLint align_h = 2, align_w = 4; | ||||
|    GLuint level; | ||||
| @@ -67,7 +67,7 @@ void i945_miptree_layout_2d( struct intel_mipmap_tree *mt ) | ||||
|    /* Pitch must be a whole number of dwords, even though we | ||||
|     * express it in texels. | ||||
|     */ | ||||
|    mt->pitch = align(mt->pitch * mt->cpp, 4) / mt->cpp; | ||||
|    mt->pitch = intel_miptree_pitch_align (intel, mt, mt->pitch); | ||||
|    mt->total_height = 0; | ||||
|  | ||||
|    for ( level = mt->first_level ; level <= mt->last_level ; level++ ) { | ||||
|   | ||||
| @@ -38,4 +38,4 @@ static GLuint minify( GLuint d ) | ||||
|    return MAX2(1, d>>1); | ||||
| } | ||||
|  | ||||
| extern void i945_miptree_layout_2d( struct intel_mipmap_tree *mt ); | ||||
| extern void i945_miptree_layout_2d( struct intel_context *intel, struct intel_mipmap_tree *mt ); | ||||
|   | ||||
| @@ -144,7 +144,7 @@ static GLboolean mga_run_render( GLcontext *ctx, | ||||
|  | ||||
|    for (i = 0 ; i < VB->PrimitiveCount ; i++) | ||||
|    { | ||||
|       GLuint prim = VB->Primitive[i].mode; | ||||
|       GLuint prim = _tnl_translate_prim(&VB->Primitive[i]); | ||||
|       GLuint start = VB->Primitive[i].start; | ||||
|       GLuint length = VB->Primitive[i].count; | ||||
|  | ||||
|   | ||||
| @@ -489,7 +489,7 @@ static GLboolean r200_run_tcl_render( GLcontext *ctx, | ||||
|  | ||||
|    for (i = 0 ; i < VB->PrimitiveCount ; i++) | ||||
|    { | ||||
|       GLuint prim = VB->Primitive[i].mode; | ||||
|       GLuint prim = _tnl_translate_prim(&VB->Primitive[i]); | ||||
|       GLuint start = VB->Primitive[i].start; | ||||
|       GLuint length = VB->Primitive[i].count; | ||||
|  | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user