Compare commits
133 Commits
mesa_20050
...
mesa_6_3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4596584f6 | ||
|
|
6bb49eacfd | ||
|
|
bfb5ea307e | ||
|
|
364ae78e69 | ||
|
|
8d7d9c22f6 | ||
|
|
2d47c07398 | ||
|
|
7e152b83cb | ||
|
|
ed886336e1 | ||
|
|
5343ae8304 | ||
|
|
df88dfe1df | ||
|
|
c235a96a71 | ||
|
|
aa8ff1e75d | ||
|
|
9bdfee3a47 | ||
|
|
e0e993c5ff | ||
|
|
c529f6bf70 | ||
|
|
8d3aca655e | ||
|
|
1f88391747 | ||
|
|
d39760d718 | ||
|
|
df0350b7ec | ||
|
|
b0489d4f82 | ||
|
|
8ec981c469 | ||
|
|
4eb3a0f076 | ||
|
|
4c72778251 | ||
|
|
badad72383 | ||
|
|
c62c24c72f | ||
|
|
b127cfeb7a | ||
|
|
3f7cb794ea | ||
|
|
c472dcdac0 | ||
|
|
ce721143b4 | ||
|
|
9311bc253e | ||
|
|
0cfbd849ec | ||
|
|
6d5d1f8a41 | ||
|
|
38e2fa385d | ||
|
|
2550844c6e | ||
|
|
259f096ed8 | ||
|
|
f3186e5789 | ||
|
|
4cf6718725 | ||
|
|
78be0b5dad | ||
|
|
f0ff50d4ed | ||
|
|
1a9cac10b8 | ||
|
|
9204e87b2e | ||
|
|
4f178c6e3a | ||
|
|
ef2ce9d003 | ||
|
|
c1c684b0f3 | ||
|
|
666dcaaf05 | ||
|
|
7b12220256 | ||
|
|
5f79d27b82 | ||
|
|
c136b41b09 | ||
|
|
ee850657e6 | ||
|
|
0cf67634bb | ||
|
|
101d05ad94 | ||
|
|
c5b6580c6f | ||
|
|
35a11c14ee | ||
|
|
ec171b7d02 | ||
|
|
2de5f6e252 | ||
|
|
b64d60a2a6 | ||
|
|
eac7688231 | ||
|
|
219f3c4489 | ||
|
|
06abb854f0 | ||
|
|
7fe8696d01 | ||
|
|
9b56781986 | ||
|
|
758f334717 | ||
|
|
8e8fa63cb4 | ||
|
|
559c494fc8 | ||
|
|
03f52fea63 | ||
|
|
6d3284efd4 | ||
|
|
58a9573b08 | ||
|
|
0d34c0158d | ||
|
|
f4f1c29597 | ||
|
|
bb5c84fcbc | ||
|
|
446e258940 | ||
|
|
54fb9226e4 | ||
|
|
30aea49cf6 | ||
|
|
cf5b2f7419 | ||
|
|
c212abf99a | ||
|
|
1ac8ae446a | ||
|
|
aa70253cbb | ||
|
|
049e320f46 | ||
|
|
f138b977d0 | ||
|
|
4d652b7855 | ||
|
|
b0d62880e8 | ||
|
|
0e55891674 | ||
|
|
ccda2162f6 | ||
|
|
b6c0d753fa | ||
|
|
ec17e7941a | ||
|
|
b6c5116171 | ||
|
|
84f8d7aafb | ||
|
|
39a488ed63 | ||
|
|
2dbffb30f0 | ||
|
|
397088ff5e | ||
|
|
c43f03e38d | ||
|
|
3f9839a52b | ||
|
|
a4eb693b5f | ||
|
|
32b898126e | ||
|
|
3b817fde88 | ||
|
|
845f2a7350 | ||
|
|
f8582b6c1f | ||
|
|
394fd40a53 | ||
|
|
4e1aae6e0e | ||
|
|
5aafea03af | ||
|
|
3fb86eefe8 | ||
|
|
1c5caba184 | ||
|
|
2636e853f6 | ||
|
|
814e5360b0 | ||
|
|
66a5548fbb | ||
|
|
f292e13a20 | ||
|
|
1e4744d2b9 | ||
|
|
ebd99043ed | ||
|
|
a5fb15cb87 | ||
|
|
04f863e856 | ||
|
|
23606a5704 | ||
|
|
90b40c33e7 | ||
|
|
dc137ddb3f | ||
|
|
a6a3e01b09 | ||
|
|
4378dee78c | ||
|
|
38332a6d94 | ||
|
|
4e7df27466 | ||
|
|
3c6f17be32 | ||
|
|
af02907b4c | ||
|
|
463c1d6c57 | ||
|
|
0e288e58ef | ||
|
|
3176f8e2e1 | ||
|
|
6c2098ffd4 | ||
|
|
f445aaa67a | ||
|
|
aa26915472 | ||
|
|
fb818a0b11 | ||
|
|
6b9d9c5039 | ||
|
|
2d218885ec | ||
|
|
902e70875d | ||
|
|
b675c48027 | ||
|
|
4476978856 | ||
|
|
252d8e78cc | ||
|
|
5d6ecf25f8 |
31
Makefile
31
Makefile
@@ -213,7 +213,6 @@ LIB_FILES = \
|
||||
$(DIRECTORY)/src/mesa/drivers/dri/common/*.[ch] \
|
||||
$(DIRECTORY)/src/mesa/drivers/fbdev/glfbdev.c \
|
||||
$(DIRECTORY)/src/mesa/drivers/glide/*.[ch] \
|
||||
$(DIRECTORY)/src/mesa/drivers/glide/*.def \
|
||||
$(DIRECTORY)/src/mesa/drivers/ggi/*.[ch] \
|
||||
$(DIRECTORY)/src/mesa/drivers/ggi/ggimesa.conf.in \
|
||||
$(DIRECTORY)/src/mesa/drivers/ggi/default/*.c \
|
||||
@@ -230,10 +229,14 @@ LIB_FILES = \
|
||||
$(DIRECTORY)/src/mesa/drivers/windows/*/*.def \
|
||||
$(DIRECTORY)/src/mesa/drivers/x11/descrip.mms \
|
||||
$(DIRECTORY)/src/mesa/drivers/x11/*.[ch] \
|
||||
$(DIRECTORY)/src/mesa/ppc/*.[ch] \
|
||||
$(DIRECTORY)/src/mesa/sparc/*.[chS] \
|
||||
$(DIRECTORY)/src/mesa/x86/Makefile \
|
||||
$(DIRECTORY)/src/mesa/x86/*.[ch] \
|
||||
$(DIRECTORY)/src/mesa/x86/*.S \
|
||||
$(DIRECTORY)/src/mesa/x86/rtasm/*.[ch] \
|
||||
$(DIRECTORY)/src/mesa/x86-64/*.[chS] \
|
||||
$(DIRECTORY)/src/mesa/x86-64/Makefile \
|
||||
$(DIRECTORY)/src/glu/Makefile \
|
||||
$(DIRECTORY)/src/glu/descrip.mms \
|
||||
$(DIRECTORY)/src/glu/sgi/Makefile \
|
||||
@@ -272,12 +275,17 @@ LIB_FILES = \
|
||||
$(DIRECTORY)/vms/analyze_map.com \
|
||||
$(DIRECTORY)/vms/xlib.opt \
|
||||
$(DIRECTORY)/vms/xlib_share.opt \
|
||||
$(DIRECTORY)/windows/VC?/mesa/gdi/gdi.dsp \
|
||||
$(DIRECTORY)/windows/VC?/mesa/glu/*.txt \
|
||||
$(DIRECTORY)/windows/VC?/mesa/glu/glu.dsp \
|
||||
$(DIRECTORY)/windows/VC?/mesa/mesa.dsw \
|
||||
$(DIRECTORY)/windows/VC?/mesa/mesa/mesa.dsp \
|
||||
$(DIRECTORY)/windows/VC?/mesa/osmesa/osmesa.dsp
|
||||
$(DIRECTORY)/windows/VC6/mesa/gdi/gdi.dsp \
|
||||
$(DIRECTORY)/windows/VC6/mesa/glu/*.txt \
|
||||
$(DIRECTORY)/windows/VC6/mesa/glu/glu.dsp \
|
||||
$(DIRECTORY)/windows/VC6/mesa/mesa.dsw \
|
||||
$(DIRECTORY)/windows/VC6/mesa/mesa/mesa.dsp \
|
||||
$(DIRECTORY)/windows/VC6/mesa/osmesa/osmesa.dsp \
|
||||
$(DIRECTORY)/windows/VC7/mesa/gdi/gdi.vcproj \
|
||||
$(DIRECTORY)/windows/VC7/mesa/glu/glu.vcproj \
|
||||
$(DIRECTORY)/windows/VC7/mesa/mesa.sln \
|
||||
$(DIRECTORY)/windows/VC7/mesa/mesa/mesa.vcproj \
|
||||
$(DIRECTORY)/windows/VC7/mesa/osmesa/osmesa.vcproj
|
||||
|
||||
|
||||
GLUT_FILES = \
|
||||
@@ -323,9 +331,12 @@ DEMO_FILES = \
|
||||
$(DIRECTORY)/progs/windml/*.c \
|
||||
$(DIRECTORY)/progs/windml/*.bmp \
|
||||
$(DIRECTORY)/progs/ggi/*.c \
|
||||
$(DIRECTORY)/windows/VC?/progs/demos/*.dsp \
|
||||
$(DIRECTORY)/windows/VC?/progs/glut/glut.dsp \
|
||||
$(DIRECTORY)/windows/VC?/progs/progs.dsw
|
||||
$(DIRECTORY)/windows/VC6/progs/demos/*.dsp \
|
||||
$(DIRECTORY)/windows/VC6/progs/glut/glut.dsp \
|
||||
$(DIRECTORY)/windows/VC6/progs/progs.dsw \
|
||||
$(DIRECTORY)/windows/VC7/progs/demos/*.vcproj \
|
||||
$(DIRECTORY)/windows/VC7/progs/glut/glut.vcproj \
|
||||
$(DIRECTORY)/windows/VC7/progs/progs.sln
|
||||
|
||||
|
||||
DRI_FILES = \
|
||||
|
||||
@@ -446,7 +446,7 @@ case $ARCH in
|
||||
${LINK} ${OPTS} ${LIBNAME} ${OBJECTS}
|
||||
FINAL_LIBS=${LIBNAME}
|
||||
else
|
||||
LIBNAME="${LIBNAME}.dylib"
|
||||
LIBNAME="lib${LIBNAME}.dylib"
|
||||
echo "mklib: Making Darwin shared library: " ${LIBNAME}
|
||||
FLAGS="-dynamiclib -multiply_defined suppress"
|
||||
if [ $CPLUSPLUS = 1 ] ; then
|
||||
|
||||
@@ -18,8 +18,12 @@ GLW_LIB_NAME = libGLw.dylib
|
||||
OSMESA_LIB_NAME = libOSMesa.dylib
|
||||
|
||||
GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
|
||||
OSMESA_LIB_DEPS = $(TOP)/lib/GL.dylib
|
||||
GLU_LIB_DEPS = $(TOP)/lib/GL.dylib
|
||||
GLUT_LIB_DEPS =
|
||||
OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
|
||||
GLU_LIB_DEPS = -L$(LIB_DIR) -lGL
|
||||
GLUT_LIB_DEPS = -L$(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
|
||||
|
||||
|
||||
@@ -26,6 +26,10 @@ MKDEP = makedepend
|
||||
MKDEP_OPTIONS = -fdepend
|
||||
MAKE = make
|
||||
|
||||
# Python and flags (generally only needed by the developers)
|
||||
PYTHON2 = python
|
||||
PYTHON_FLAGS = -t -O -O
|
||||
|
||||
# Library names (base name)
|
||||
GL_LIB = GL
|
||||
GLU_LIB = GLU
|
||||
@@ -61,9 +65,10 @@ PROGRAM_DIRS = demos redbook samples xdemos
|
||||
|
||||
|
||||
# Library/program dependencies
|
||||
GL_LIB_DEPS = -lX11 -lXext -lm -lpthread
|
||||
EXTRA_LIB_PATH ?=
|
||||
GL_LIB_DEPS = $(EXTRA_LIB_PATH) -lX11 -lXext -lm -lpthread
|
||||
OSMESA_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB)
|
||||
GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm
|
||||
GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXt -lXi -lm
|
||||
GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lXt -lX11
|
||||
GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) $(EXTRA_LIB_PATH) -lX11 -lXmu -lXt -lXi -lm
|
||||
GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) $(EXTRA_LIB_PATH) -lXt -lX11
|
||||
APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
|
||||
|
||||
@@ -6,3 +6,4 @@ include $(TOP)/configs/freebsd-dri
|
||||
CONFIG_NAME = freebsd-dri-x86-64
|
||||
|
||||
ASM_FLAGS = -DUSE_X86_64_ASM
|
||||
ASM_SOURCES = $(X86-64_SOURCES) $(X86-64_API)
|
||||
|
||||
@@ -8,13 +8,26 @@ CONFIG_NAME = linux
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
|
||||
CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DPTHREADS -I/usr/X11R6/include
|
||||
CXXFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE
|
||||
WARN_FLAGS = -Wall
|
||||
OPT_FLAGS = -O3 -g
|
||||
PIC_FLAGS = -fPIC
|
||||
|
||||
# Add '-DGLX_USE_TLS' to ARCH_FLAGS to enable TLS support. Add -m32
|
||||
# to build properly on 64-bit platforms.
|
||||
|
||||
ARCH_FLAGS ?=
|
||||
|
||||
DEFINES = -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE \
|
||||
-D_BSD_SOURCE -DPTHREADS -DUSE_XSHM
|
||||
|
||||
X11_INCLUDES = -I/usr/X11R6/include
|
||||
|
||||
CFLAGS = $(WARN_FLAGS) $(OPT_FLAGS) $(PIC_FLAGS) $(ARCH_FLAGS) $(DEFINES) \
|
||||
$(ASM_FLAGS) $(X11_INCLUDES) -std=c99 -ffast-math
|
||||
|
||||
CXXFLAGS = $(WARN_FLAGS) $(OPT_FLAGS) $(PIC_FLAGS) $(ARCH_FLAGS) $(DEFINES) \
|
||||
$(X11_INCLUDES)
|
||||
|
||||
GLUT_CFLAGS = -fexceptions
|
||||
|
||||
|
||||
# Library/program dependencies
|
||||
# Need to have -L/usr/X11R6/lib in these:
|
||||
GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
|
||||
GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
|
||||
GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
|
||||
EXTRA_LIB_PATH = -L/usr/X11R6/lib
|
||||
|
||||
@@ -1,20 +1,8 @@
|
||||
# Configuration for debugging on Linux
|
||||
|
||||
include $(TOP)/configs/default
|
||||
include $(TOP)/configs/linux
|
||||
|
||||
CONFIG_NAME = linux-debug
|
||||
|
||||
# Compiler and flags
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
|
||||
CFLAGS = -g -ansi -pedantic -Wall -Wmissing-prototypes -Wundef -fPIC -ffast-math -D_POSIX_SOURCE -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM -DPTHREADS -DDEBUG -DMESA_DEBUG
|
||||
|
||||
CXXFLAGS = -g -ansi -pedantic -Wall -Wundef -fPIC -ffast-math -D_POSIX_SOURCE -D_SVID_SOURCE -D_BSD_SOURCE -DDEBUG -DMESA_DEBUG
|
||||
|
||||
GLUT_CFLAGS = -fexceptions
|
||||
|
||||
# Need to have -L/usr/X11R6/lib in these:
|
||||
GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
|
||||
GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
|
||||
GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lXt -L/usr/X11R6/lib -lX11
|
||||
OPT_FLAGS = -g
|
||||
DEFINES += -DDEBUG -DMESA_DEBUG -DRUN_DEBUG_BENCHMARK
|
||||
|
||||
@@ -39,8 +39,6 @@ EXTRA_LIB_PATH=-L/usr/X11R6/lib
|
||||
|
||||
DRI_LIB_DEPS = $(EXTRA_LIB_PATH) -lm -lpthread -lexpat -ldl
|
||||
GL_LIB_DEPS = $(EXTRA_LIB_PATH) -lX11 -lXext -lXxf86vm -lm -lpthread -ldl
|
||||
GLUT_LIB_DEPS = $(EXTRA_LIB_PATH) -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXt -lXi -lm
|
||||
GLW_LIB_DEPS = $(EXTRA_LIB_PATH) -L$(LIB_DIR) -l$(GL_LIB) -lXt -lX11
|
||||
|
||||
|
||||
# Directories
|
||||
@@ -49,7 +47,7 @@ DRIVER_DIRS = dri
|
||||
PROGRAM_DIRS =
|
||||
WINDOW_SYSTEM=dri
|
||||
|
||||
# ffb and gamma are missing because they have not been converted to use the new
|
||||
# gamma are missing because they have not been converted to use the new
|
||||
# interface.
|
||||
DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon s3v \
|
||||
savage sis tdfx trident unichrome
|
||||
savage sis tdfx trident unichrome ffb
|
||||
|
||||
@@ -8,5 +8,9 @@ CONFIG_NAME = linux-dri-x86
|
||||
# Unnecessary on x86, generally.
|
||||
PIC_FLAGS =
|
||||
|
||||
# Add -m32 to CFLAGS:
|
||||
ARCH_FLAGS = -m32
|
||||
|
||||
ASM_FLAGS = -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM
|
||||
ASM_SOURCES = $(X86_SOURCES)
|
||||
|
||||
|
||||
@@ -7,6 +7,9 @@ CONFIG_NAME = linux-dri-x86-64
|
||||
|
||||
ARCH_FLAGS = -m64
|
||||
|
||||
ASM_FLAGS = -DUSE_X86_64_ASM
|
||||
ASM_SOURCES = $(X86-64_SOURCES) $(X86-64_API)
|
||||
|
||||
LIB_DIR = $(TOP)/lib64
|
||||
|
||||
# Library/program dependencies
|
||||
|
||||
@@ -1,18 +1,9 @@
|
||||
# Configuration for Linux on PPC
|
||||
|
||||
include $(TOP)/configs/default
|
||||
include $(TOP)/configs/linux
|
||||
|
||||
CONFIG_NAME = linux-ppc
|
||||
|
||||
# Compiler and flags
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
CFLAGS = -O3 -mcpu=603 -ansi -pedantic -fPIC -fsigned-char -ffast-math -funroll-loops -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM
|
||||
CXXFLAGS = -O3 -mcpu=603 -ansi -pedantic -fPIC -fsigned-char -ffast-math -funroll-loops -D_SVID_SOURCE -D_BSD_SOURCE
|
||||
GLUT_CFLAGS = -fexceptions
|
||||
|
||||
GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
|
||||
GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
|
||||
GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
|
||||
APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
|
||||
OPT_FLAGS = -O3 -mcpu=603 -fsigned-char -funroll-loops
|
||||
|
||||
# FIXME: Use of PowerPC assembly should be enabled here.
|
||||
@@ -1,15 +1,9 @@
|
||||
# Configuration for Linux on PPC, static libs
|
||||
|
||||
include $(TOP)/configs/default
|
||||
include $(TOP)/configs/linux-ppc
|
||||
|
||||
CONFIG_NAME = linux-ppc-static
|
||||
|
||||
# Compiler and flags
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
CFLAGS = -O3 -mcpu=603 -ansi -pedantic -fPIC -fsigned-char -ffast-math -funroll-loops -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM
|
||||
CXXFLAGS = -O3 -mcpu=603 -ansi -pedantic -fPIC -fsigned-char -ffast-math -funroll-loops -D_SVID_SOURCE -D_BSD_SOURCE
|
||||
GLUT_CFLAGS = -fexceptions
|
||||
MKLIB_OPTIONS = -static
|
||||
|
||||
# Library names (actual file names)
|
||||
@@ -18,9 +12,3 @@ GLU_LIB_NAME = libGLU.a
|
||||
GLUT_LIB_NAME = libglut.a
|
||||
GLW_LIB_NAME = libGLw.a
|
||||
OSMESA_LIB_NAME = libOSMesa.a
|
||||
|
||||
|
||||
GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
|
||||
GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
|
||||
GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
|
||||
APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm
|
||||
|
||||
@@ -1,17 +1,9 @@
|
||||
# Configuration for generic Linux, making static libs
|
||||
|
||||
include $(TOP)/configs/default
|
||||
include $(TOP)/configs/linux
|
||||
|
||||
CONFIG_NAME = linux-static
|
||||
|
||||
# Compiler and flags
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
|
||||
CFLAGS = -O3 -ansi -pedantic -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DPTHREADS -I/usr/X11R6/include
|
||||
CXXFLAGS = -O3 -ansi -pedantic -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE
|
||||
GLUT_CFLAGS = -fexceptions
|
||||
|
||||
MKLIB_OPTIONS = -static
|
||||
|
||||
# Library names (actual file names)
|
||||
@@ -27,4 +19,3 @@ OSMESA_LIB_DEPS =
|
||||
GLU_LIB_DEPS =
|
||||
GLUT_LIB_DEPS =
|
||||
GLW_LIB_DEPS =
|
||||
APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
|
||||
|
||||
@@ -1,24 +1,8 @@
|
||||
# Configuration for Linux with x86 optimizations
|
||||
|
||||
include $(TOP)/configs/default
|
||||
include $(TOP)/configs/linux
|
||||
|
||||
CONFIG_NAME = linux-x86
|
||||
|
||||
# Compiler and flags
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
|
||||
CFLAGS = -Wall -O3 -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -DPTHREADS -I/usr/X11R6/include
|
||||
|
||||
CXXFLAGS = -Wall -O3 -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE
|
||||
|
||||
GLUT_CFLAGS = -fexceptions
|
||||
|
||||
|
||||
ASM_FLAGS = -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM
|
||||
ASM_SOURCES = $(X86_SOURCES) $(X86_API)
|
||||
|
||||
# Library/program dependencies
|
||||
GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
|
||||
GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
|
||||
GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
|
||||
APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
|
||||
|
||||
@@ -4,10 +4,4 @@ include $(TOP)/configs/linux-x86
|
||||
|
||||
CONFIG_NAME = linux-x86-32
|
||||
|
||||
|
||||
# Other than -m32, these are the same as in linux-x86, which we included above.
|
||||
|
||||
CFLAGS = -m32 -Wall -O3 -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -DPTHREADS -I/usr/X11R6/include
|
||||
|
||||
CXXFLAGS = -m32 -Wall -O3 fPIC -D_POSIX_SOURCE -D_SVID_SOURCE -D_BSD_SOURCE
|
||||
|
||||
ARCH_FLAGS += -m32
|
||||
|
||||
@@ -1,28 +1,13 @@
|
||||
# Configuration for Linux for 64-bit X86 (Opteron)
|
||||
|
||||
include $(TOP)/configs/default
|
||||
include $(TOP)/configs/linux
|
||||
|
||||
CONFIG_NAME = linux-x86-64
|
||||
|
||||
# Compiler and flags
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
|
||||
CFLAGS = -m64 -Wall -O3 -std=c99 -pedantic -fPIC -D_REENTRANT -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DPTHREADS -I/usr/X11R6/include -DUSE_X86_64_ASM
|
||||
|
||||
CXXFLAGS = -m64 -Wall -O3 -fPIC -D_REENTRANT -D_POSIX_SOURCE -D_SVID_SOURCE -D_BSD_SOURCE
|
||||
|
||||
GLUT_CFLAGS = -fexceptions
|
||||
|
||||
|
||||
ASM_SOURCES = $(X86-64_SOURCES)
|
||||
ARCH_FLAGS = -m64
|
||||
|
||||
ASM_SOURCES = $(X86-64_SOURCES) $(X86-64_API)
|
||||
ASM_FLAGS = -DUSE_X86_64_ASM
|
||||
|
||||
LIB_DIR = $(TOP)/lib64
|
||||
|
||||
|
||||
# Library/program dependencies
|
||||
GL_LIB_DEPS = -L/usr/X11R6/lib64 -lX11 -lXext -lm -lpthread
|
||||
GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib64 -lX11 -lXmu -lXt -lXi -lm
|
||||
GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib64 -lXt -lX11
|
||||
APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
|
||||
EXTRA_LIB_PATH = -L/usr/X11R6/lib64
|
||||
|
||||
@@ -1,28 +1,7 @@
|
||||
# Configuration for Linux for 64-bit X86 (Opteron)
|
||||
|
||||
include $(TOP)/configs/default
|
||||
include $(TOP)/configs/linux-x86-64
|
||||
|
||||
CONFIG_NAME = linux-x86-64-debug
|
||||
|
||||
# Compiler and flags
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
|
||||
CFLAGS = -g -m64 -Wall -O3 -std=c99 -pedantic -fPIC -D_REENTRANT -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DPTHREADS -I/usr/X11R6/include -DUSE_X86_64_ASM -DDEBUG -DMESA_DEBUG -DRUN_DEBUG_BENCHMARK
|
||||
|
||||
CXXFLAGS = -g -m64 -Wall -O3 -ansi -pedantic -fPIC -D_REENTRANT -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DDEBUG -DMESA_DEBUG -DRUN_DEBUG_BENCHMARK
|
||||
|
||||
GLUT_CFLAGS = -fexceptions
|
||||
|
||||
|
||||
ASM_SOURCES = $(X86-64_SOURCES)
|
||||
|
||||
|
||||
LIB_DIR = $(TOP)/lib64
|
||||
|
||||
|
||||
# Library/program dependencies
|
||||
GL_LIB_DEPS = -L/usr/X11R6/lib64 -lX11 -lXext -lm -lpthread
|
||||
GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib64 -lX11 -lXmu -lXt -lXi -lm
|
||||
GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib64 -lXt -lX11
|
||||
APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
|
||||
DEFINES += -DDEBUG -DMESA_DEBUG -DRUN_DEBUG_BENCHMARK
|
||||
|
||||
@@ -1,22 +1,11 @@
|
||||
# Configuration for Linux for 64-bit X86 (Opteron), static libs
|
||||
|
||||
include $(TOP)/configs/default
|
||||
include $(TOP)/configs/linux-x86-64
|
||||
|
||||
CONFIG_NAME = linux-x86-64-static
|
||||
|
||||
# Compiler and flags
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
|
||||
CFLAGS = -m64 -Wall -O3 -ansi -pedantic -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DPTHREADS -I/usr/X11R6/include
|
||||
|
||||
CXXFLAGS = -m64 -Wall -O3 -D_POSIX_SOURCE -D_SVID_SOURCE -D_BSD_SOURCE
|
||||
|
||||
GLUT_CFLAGS = -fexceptions
|
||||
|
||||
MKLIB_OPTIONS = -static
|
||||
|
||||
|
||||
# Library names (actual file names)
|
||||
GL_LIB_NAME = libGL.a
|
||||
GLU_LIB_NAME = libGLU.a
|
||||
@@ -24,17 +13,9 @@ GLUT_LIB_NAME = libglut.a
|
||||
GLW_LIB_NAME = libGLw.a
|
||||
OSMESA_LIB_NAME = libOSMesa.a
|
||||
|
||||
|
||||
#ASM_SOURCES = $(X86_SOURCES)
|
||||
|
||||
|
||||
LIB_DIR = $(TOP)/lib64
|
||||
|
||||
|
||||
# Library/program dependencies (static libs don't have dependencies)
|
||||
GL_LIB_DEPS =
|
||||
OSMESA_LIB_DEPS =
|
||||
GLU_LIB_DEPS =
|
||||
GLUT_LIB_DEPS =
|
||||
GLW_LIB_DEPS =
|
||||
APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib64 -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
|
||||
|
||||
@@ -5,6 +5,5 @@ include $(TOP)/configs/linux-x86
|
||||
|
||||
CONFIG_NAME = linux-x86-debug
|
||||
|
||||
CFLAGS = -Wall -g -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -DPTHREADS -I/usr/X11R6/include
|
||||
|
||||
CXXFLAGS = -Wall -g -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE
|
||||
OPT_FLAGS = -g
|
||||
DEFINES += -DDEBUG -DMESA_DEBUG -DRUN_DEBUG_BENCHMARK
|
||||
|
||||
@@ -1,22 +1,11 @@
|
||||
# Configuration for Linux with x86 optimizations, static libs
|
||||
|
||||
include $(TOP)/configs/default
|
||||
include $(TOP)/configs/linux-x86
|
||||
|
||||
CONFIG_NAME = linux-x86-static
|
||||
|
||||
# Compiler and flags
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
|
||||
CFLAGS = -Wall -O3 -ansi -pedantic -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -DPTHREADS -I/usr/X11R6/include
|
||||
|
||||
CXXFLAGS = -Wall -O3 -ansi -pedantic -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE
|
||||
|
||||
GLUT_CFLAGS = -fexceptions
|
||||
|
||||
MKLIB_OPTIONS = -static
|
||||
|
||||
|
||||
# Library names (actual file names)
|
||||
GL_LIB_NAME = libGL.a
|
||||
GLU_LIB_NAME = libGLU.a
|
||||
@@ -24,14 +13,9 @@ GLUT_LIB_NAME = libglut.a
|
||||
GLW_LIB_NAME = libGLw.a
|
||||
OSMESA_LIB_NAME = libOSMesa.a
|
||||
|
||||
|
||||
ASM_SOURCES = $(X86_SOURCES) $(X86_API)
|
||||
|
||||
|
||||
# Library/program dependencies (static libs don't have dependencies)
|
||||
GL_LIB_DEPS =
|
||||
OSMESA_LIB_DEPS =
|
||||
GLU_LIB_DEPS =
|
||||
GLUT_LIB_DEPS =
|
||||
GLW_LIB_DEPS =
|
||||
APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
File: docs/README.WIN32
|
||||
|
||||
Last updated: Jun 02, 2005 - Karl Schultz - kschultz@users.sourceforge.net
|
||||
Last updated: Jul 01, 2005 - Karl Schultz - kschultz@users.sourceforge.net
|
||||
|
||||
Quick Start
|
||||
----- -----
|
||||
@@ -17,7 +17,10 @@ the top-level "windows" directory. For example, Visual Studio 6 files
|
||||
are in windows/VC6. If a directory does not exist for your version of
|
||||
Visual Studio, you can try importing the project files from an earlier
|
||||
version of Visual Studio. At this time, project files exist for
|
||||
Version 6.
|
||||
Version 6 and Version 7. The code has been built with a beta version
|
||||
of Version 8 and it runs on 64-bit Windows. If you want to try this,
|
||||
start by importing the VC7 files and create the 64-bit targets in the
|
||||
configuration manager.
|
||||
|
||||
The project files to build the core Mesa library, Windows Mesa
|
||||
drivers, OSMesa, and GLU are in the mesa directory. The project files
|
||||
@@ -43,8 +46,12 @@ be useful in figuring out any problems, or report them to me.
|
||||
|
||||
To build Mesa with the GDI driver, build the mesa, gdi, and glu
|
||||
projects in the Visual Studio workspace found at
|
||||
windows/VC?/mesa/mesa.dsw. The osmesa DLL can also be built with the
|
||||
osmesa project.
|
||||
|
||||
windows/VC6/mesa/mesa.dsw
|
||||
or
|
||||
windows/VC7/mesa/mesa.sln
|
||||
|
||||
The osmesa DLL can also be built with the osmesa project.
|
||||
|
||||
The build system creates a lib top-level directory and copies
|
||||
resulting LIB and DLL files to this lib directory. The files are:
|
||||
@@ -53,13 +60,19 @@ resulting LIB and DLL files to this lib directory. The files are:
|
||||
OPENGL32.DLL, GLU32.DLL, OSMESA32.DLL
|
||||
|
||||
If the MesaDemos ZIP file was extracted, the DLL files are also copied
|
||||
to the demos directory.
|
||||
to the demos directory. This facilitates running the demos as described
|
||||
below.
|
||||
|
||||
|
||||
GLUT and Demos
|
||||
---- --- -----
|
||||
|
||||
A Visual Studio workspace can be found at windows/VC?/progs/progs.dsw.
|
||||
A Visual Studio workspace can be found at
|
||||
|
||||
windows/VC6/progs/progs.dsw
|
||||
or
|
||||
windows/VC7/progs/progs.sln
|
||||
|
||||
It can be used to build GLUT and a few demos. The GLUT lib and DLL
|
||||
are copied to the top-level lib directory, along with the Mesa libs.
|
||||
|
||||
@@ -70,6 +83,8 @@ rely on data files found there. Also, the Mesa lib DLL's were copied
|
||||
there by the Mesa lib build process. Therefore, you should be able to
|
||||
simply run the demo executables from the demo directory.
|
||||
|
||||
If you want to run the demos from the Visual Studio, you may have to
|
||||
change the startup directory and explicitly state where the executables are.
|
||||
|
||||
|
||||
Build System Notes
|
||||
@@ -87,19 +102,7 @@ GLU library.
|
||||
VC7
|
||||
---
|
||||
|
||||
Some users have reported problems building glu with VC7 after
|
||||
importing and converting the VC6 project files. The problem is caused
|
||||
by a custom build step that was put in place to work around a problem
|
||||
with VC6 not recognizing .cc files as C++ source files. It appears
|
||||
that VC7 can be configured to recognize .cc files as C++ files and so
|
||||
it compiles these glu files with the default settings, and does not
|
||||
use settings that are required to compile the files correctly. The
|
||||
easiest way to solve the problem is to remove the .cc files from the
|
||||
glu project. This does not delete the files, but removes them from
|
||||
the project so that VS does not try to compile them at all. This
|
||||
allows the custom build step to compile the files with the proper
|
||||
settings. Another approach is to remove the custom build step and fix
|
||||
the project up to compile the files normally.
|
||||
The above-mentioned .cc problem does not exist in this version.
|
||||
|
||||
|
||||
General
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
Mesa 6.3 release notes
|
||||
|
||||
month day, 2004
|
||||
July 20, 2004
|
||||
|
||||
PLEASE READ!!!!
|
||||
|
||||
@@ -28,7 +28,8 @@ GL_OES_read_format - allows one to query the fastest glReadPixels format
|
||||
GL_ARB_pixel_buffer_object - buffer objects for pixel read/write functions.
|
||||
|
||||
GL_EXT_framebuffer_object - allows render-to-texture and provides a
|
||||
window-system indepedent Pbuffer facility
|
||||
window-system indepedent Pbuffer facility.
|
||||
The Mesa CVS tree contains a couple tests of this extension.
|
||||
|
||||
DirectFB driver, contributed by Claudio Ciccani. See docs/README.directfb
|
||||
for details.
|
||||
@@ -63,11 +64,25 @@ contexts so they can't be deleted until they're unbound in _all_ contexts.
|
||||
|
||||
|
||||
|
||||
GL_EXT_framebuffer_object changes
|
||||
---------------------------------
|
||||
|
||||
Implementing this extension involved changing a lot of code (for the better).
|
||||
|
||||
The gl_framebuffer object now a collection of gl_renderbuffer objects.
|
||||
Renderbuffers may store colors, stencil indices, or depth values. The
|
||||
gl_framebuffer and gl_renderbuffer types are object-oriented in design.
|
||||
|
||||
All the old RGB, color index, stencil and depth-related span functions for
|
||||
reading/writing pixels from/to buffers has changed. Now, all pixels are
|
||||
read/written through a set of common renderbuffer functions (methods).
|
||||
|
||||
Most device drivers have been updated for these changes, but some haven't.
|
||||
|
||||
|
||||
To Do before release
|
||||
--------------------
|
||||
Fix dinoshade bug
|
||||
|
||||
To Do (someday) items
|
||||
---------------------
|
||||
Switch to freeglut
|
||||
Increase MAX_DRAWBUFFERS
|
||||
driver hooks for BeginQuery/EndQuery
|
||||
@@ -77,7 +92,7 @@ To Do before release
|
||||
Miscellaneous
|
||||
-------------
|
||||
|
||||
The main/get.c file is now generated with a Python script.
|
||||
The main/get.c file is now generated with a Python script (get_gen.py).
|
||||
|
||||
|
||||
|
||||
@@ -97,4 +112,4 @@ D3D needs updating
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
$Id: RELNOTES-6.3,v 3.9 2005/05/04 20:11:35 brianp Exp $
|
||||
$Id: RELNOTES-6.3,v 3.12 2005/07/20 18:07:11 brianp Exp $
|
||||
|
||||
@@ -1314,20 +1314,39 @@ Mesa Version History
|
||||
- bug reports should to go bugzilla.freedesktop.org
|
||||
|
||||
|
||||
6.3 Month day, 2004
|
||||
6.3 July 20, 2004
|
||||
New:
|
||||
- GL_EXT_framebuffer_object extension
|
||||
- GL_ARB_draw_buffers extension
|
||||
- GL_ARB_pixel_buffer_object extension
|
||||
- GL_OES_read_format extension (Ian Romanick)
|
||||
- DirectFB driver (Claudio Ciccani)
|
||||
- x86_64 vertex transformation code (Mikko T.)
|
||||
- Updated GL/glext.h to version 29
|
||||
Changes:
|
||||
- added -stereo option for glxgears demo (Jacek Rosik)
|
||||
- updated the PBuffer demo code in xdemos/ directory
|
||||
- glDeleteTextures/Programs/Buffers() now makes the object ID
|
||||
available for immediate re-use
|
||||
- assorted 64-bit clean-ups fixes (x86_64 and Win64)
|
||||
- lots of internal changes for GL_EXT_framebuffer_object
|
||||
Bug fixes:
|
||||
- some functions didn't support PBO functionality
|
||||
- glGetTexImage didn't convert color index images to RGBA as required
|
||||
|
||||
- fragment program texcoords were sometimes wrong for points and lines
|
||||
- fixed problem with negative dot product in arbfplight, fplight demos
|
||||
- fixed bug in perspective correction of antialiased, textured lines
|
||||
- querying GL_POST_CONVOLUTION_ALPHA_BIAS_EXT returned wrong value
|
||||
- fixed a couple per-pixel fog bugs (Soju Matsumoto)
|
||||
- glGetBooleanv(GL_FRAGMENT_PROGRAM_BINDING_NV) was broken
|
||||
- fixed float parsing bug in ARB frag/vert programs (bug 2520)
|
||||
- XMesaGetDepthBuffer() returned incorrect value for bytesPerValue
|
||||
- GL_COLOR_MATERIAL with glColor3 didn't properly set diffuse alpha
|
||||
- glXChooseFBConfig() crashed if attribList pointer was NULL
|
||||
- program state.light[n].spot.direction.w was wrong value (bug 3083)
|
||||
- fragment program fog option required glEnable(GL_FOG) - wrong.
|
||||
- glColorTable() could produce a Mesa implementation error (bug 3135)
|
||||
- RasterPos could get corrupted by color index rendering path
|
||||
- Removed bad XTranslateCoordinates call when rendering to Pixmaps
|
||||
- glPopAttrib() didn't properly restore GL_TEXTURE_GEN enable state
|
||||
- fixed a few Darwin compilation problems
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="mesa.css"></head>
|
||||
|
||||
<body bgcolor="#eeeeee">
|
||||
|
||||
<!--Override a few values from the style sheet: -->
|
||||
<style>
|
||||
<!--
|
||||
@@ -40,6 +38,7 @@ a:visited {
|
||||
<b>Download / Install</b>
|
||||
<ul>
|
||||
<li><a href="http://www.sourceforge.net/projects/mesa3d" target="_parent">Stable Release (6.2.1)</a>
|
||||
<li><a href="http://www.sourceforge.net/projects/mesa3d" target="_parent">Devel Release (6.3)</a>
|
||||
<li><a href="download.html" target="MainFrame">Downloading/Unpacking</a>
|
||||
<li><a href="install.html" target="MainFrame">Compilation/Installation</a>
|
||||
<li><a href="glu.html" target="MainFrame">SGI's GLU</a>
|
||||
|
||||
@@ -82,7 +82,7 @@ my work hours at the Space Science and Engineering Center at the University
|
||||
of Wisconsin in Madison. My supervisor, Bill Hibbard, lets me do this because
|
||||
Mesa is now being using for the <a href="http://www.ssec.wisc.edu/%7Ebillh/vis.html" target="_parent">Vis5D</a> project.
|
||||
</p><p>
|
||||
October 1996: Mesa 2.0 is released. It implementes the OpenGL 1.1 specification.
|
||||
October 1996: Mesa 2.0 is released. It implements the OpenGL 1.1 specification.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -134,8 +134,8 @@ GL_ARB_fragment_program extensions.
|
||||
|
||||
|
||||
<p>
|
||||
Ongoing: Mesa is used as the core of many hardware OpenGL drivers for XFree86
|
||||
within the
|
||||
Ongoing: Mesa is used as the core of many hardware OpenGL drivers for
|
||||
the XFree86 X.org X servers within the
|
||||
<A href="http://dri.sourceforge.net/" target="_parent">DRI project</A>.
|
||||
I continue to enhance Mesa with new extensions and features.
|
||||
</p>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/* Mesa CSS */
|
||||
body {
|
||||
background-color: #ffffff;
|
||||
/*background-color: #55bbff;*/
|
||||
font: 14px 'Lucida Grande', Geneva, Arial, Verdana, sans-serif;
|
||||
color: black;
|
||||
link: #111188;
|
||||
|
||||
@@ -6,9 +6,54 @@
|
||||
|
||||
<BODY>
|
||||
|
||||
<body bgcolor="#eeeeee">
|
||||
|
||||
<H1>News</H1>
|
||||
|
||||
|
||||
<h2>July 20, 2005</h2>
|
||||
<p>
|
||||
Mesa 6.3 has been released.
|
||||
This is a development release with new features, changes and bug fixes.
|
||||
</p>
|
||||
<pre>
|
||||
New:
|
||||
- GL_EXT_framebuffer_object extension
|
||||
- GL_ARB_draw_buffers extension
|
||||
- GL_ARB_pixel_buffer_object extension
|
||||
- GL_OES_read_format extension (Ian Romanick)
|
||||
- DirectFB driver (Claudio Ciccani)
|
||||
- x86_64 vertex transformation code (Mikko T.)
|
||||
Changes:
|
||||
- added -stereo option for glxgears demo (Jacek Rosik)
|
||||
- updated the PBuffer demo code in xdemos/ directory
|
||||
- glDeleteTextures/Programs/Buffers() now makes the object ID
|
||||
available for immediate re-use
|
||||
- assorted 64-bit clean-ups fixes (x86_64 and Win64)
|
||||
- lots of internal changes for GL_EXT_framebuffer_object
|
||||
Bug fixes:
|
||||
- some functions didn't support PBO functionality
|
||||
- glGetTexImage didn't convert color index images to RGBA as required
|
||||
- fragment program texcoords were sometimes wrong for points and lines
|
||||
- fixed problem with negative dot product in arbfplight, fplight demos
|
||||
- fixed bug in perspective correction of antialiased, textured lines
|
||||
- querying GL_POST_CONVOLUTION_ALPHA_BIAS_EXT returned wrong value
|
||||
- fixed a couple per-pixel fog bugs (Soju Matsumoto)
|
||||
- glGetBooleanv(GL_FRAGMENT_PROGRAM_BINDING_NV) was broken
|
||||
- fixed float parsing bug in ARB frag/vert programs (bug 2520)
|
||||
- XMesaGetDepthBuffer() returned incorrect value for bytesPerValue
|
||||
- GL_COLOR_MATERIAL with glColor3 didn't properly set diffuse alpha
|
||||
- glXChooseFBConfig() crashed if attribList pointer was NULL
|
||||
- program state.light[n].spot.direction.w was wrong value (bug 3083)
|
||||
- fragment program fog option required glEnable(GL_FOG) - wrong.
|
||||
- glColorTable() could produce a Mesa implementation error (bug 3135)
|
||||
- RasterPos could get corrupted by color index rendering path
|
||||
- Removed bad XTranslateCoordinates call when rendering to Pixmaps
|
||||
- glPopAttrib() didn't properly restore GL_TEXTURE_GEN enable state
|
||||
- fixed a few Darwin compilation problems
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>December 9, 2004</h2>
|
||||
<p>
|
||||
Mesa 6.2.1 has been released.
|
||||
@@ -960,6 +1005,6 @@ source code</a>.</p>
|
||||
|
||||
|
||||
<hr>
|
||||
$Id: news.html,v 3.19 2005/05/05 14:18:31 brianp Exp $
|
||||
$Id: news.html,v 3.21 2005/07/20 18:07:11 brianp Exp $
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -52,9 +52,9 @@ extern "C" {
|
||||
/*************************************************************/
|
||||
|
||||
/* Header file version number, required by OpenGL ABI for Linux */
|
||||
/* glext.h last updated 2005/05/31 */
|
||||
/* glext.h last updated 2005/06/20 */
|
||||
/* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */
|
||||
#define GL_GLEXT_VERSION 28
|
||||
#define GL_GLEXT_VERSION 29
|
||||
|
||||
#ifndef GL_VERSION_1_2
|
||||
#define GL_UNSIGNED_BYTE_3_3_2 0x8032
|
||||
@@ -3023,7 +3023,6 @@ extern "C" {
|
||||
#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42
|
||||
#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43
|
||||
#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44
|
||||
#define GL_STENCIL_INDEX_EXT 0x8D45
|
||||
#define GL_STENCIL_INDEX1_EXT 0x8D46
|
||||
#define GL_STENCIL_INDEX4_EXT 0x8D47
|
||||
#define GL_STENCIL_INDEX8_EXT 0x8D48
|
||||
|
||||
@@ -12,7 +12,8 @@ PROGRAMS = \
|
||||
demo1 \
|
||||
demo2 \
|
||||
demo3 \
|
||||
eglinfo
|
||||
eglinfo \
|
||||
eglgears
|
||||
|
||||
|
||||
.c.o:
|
||||
@@ -51,6 +52,12 @@ eglinfo.o: eglinfo.c $(HEADERS)
|
||||
$(CC) -c $(CFLAGS) -I$(TOP)/include eglinfo.c
|
||||
|
||||
|
||||
eglgears: eglgears.o $(LIB_DIR)/libEGL.so
|
||||
$(CC) eglgears.o -L$(LIB_DIR) -lEGL $(APP_LIB_DEPS) -o $@
|
||||
|
||||
eglgears.o: eglgears.c $(HEADERS)
|
||||
$(CC) -c $(CFLAGS) -I$(TOP)/include eglgears.c
|
||||
|
||||
|
||||
clean:
|
||||
rm -f *.o *~
|
||||
|
||||
@@ -92,7 +92,6 @@ main(int argc, char *argv[])
|
||||
EGLContext ctx;
|
||||
EGLSurface pbuffer;
|
||||
EGLConfig configs[10];
|
||||
EGLint numConfigs, i;
|
||||
EGLBoolean b;
|
||||
const EGLint pbufAttribs[] = {
|
||||
EGL_WIDTH, 500,
|
||||
|
||||
@@ -56,6 +56,7 @@ static void Reshape(int width, int height)
|
||||
windH = (GLint)height;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void RotateColorMask(void)
|
||||
{
|
||||
static GLint rotation = 0;
|
||||
@@ -80,6 +81,7 @@ static void RotateColorMask(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void Viewport(GLint row, GLint column)
|
||||
{
|
||||
|
||||
446
progs/egl/eglgears.c
Normal file
446
progs/egl/eglgears.c
Normal file
@@ -0,0 +1,446 @@
|
||||
/*
|
||||
* Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is a port of the infamous "glxgears" demo to straight EGL
|
||||
* Port by Dane Rushton 10 July 2005
|
||||
*
|
||||
* No command line options.
|
||||
* Program runs for 5 seconds then exits, outputing framerate to console
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GLES/egl.h>
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
#define BENCHMARK
|
||||
|
||||
#ifdef BENCHMARK
|
||||
|
||||
/* XXX this probably isn't very portable */
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* return current time (in seconds) */
|
||||
static double
|
||||
current_time(void)
|
||||
{
|
||||
struct timeval tv;
|
||||
#ifdef __VMS
|
||||
(void) gettimeofday(&tv, NULL );
|
||||
#else
|
||||
struct timezone tz;
|
||||
(void) gettimeofday(&tv, &tz);
|
||||
#endif
|
||||
return (double) tv.tv_sec + tv.tv_usec / 1000000.0;
|
||||
}
|
||||
|
||||
#else /*BENCHMARK*/
|
||||
|
||||
/* dummy */
|
||||
static double
|
||||
current_time(void)
|
||||
{
|
||||
/* update this function for other platforms! */
|
||||
static double t = 0.0;
|
||||
static int warn = 1;
|
||||
if (warn) {
|
||||
fprintf(stderr, "Warning: current_time() not implemented!!\n");
|
||||
warn = 0;
|
||||
}
|
||||
return t += 1.0;
|
||||
}
|
||||
|
||||
#endif /*BENCHMARK*/
|
||||
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265
|
||||
#endif
|
||||
|
||||
|
||||
static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
|
||||
static GLint gear1, gear2, gear3;
|
||||
static GLfloat angle = 0.0;
|
||||
|
||||
static GLfloat eyesep = 5.0; /* Eye separation. */
|
||||
static GLfloat fix_point = 40.0; /* Fixation point distance. */
|
||||
static GLfloat left, right, asp; /* Stereo frustum params. */
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Draw a gear wheel. You'll probably want to call this function when
|
||||
* building a display list since we do a lot of trig here.
|
||||
*
|
||||
* Input: inner_radius - radius of hole at center
|
||||
* outer_radius - radius at center of teeth
|
||||
* width - width of gear
|
||||
* teeth - number of teeth
|
||||
* tooth_depth - depth of tooth
|
||||
*/
|
||||
static void
|
||||
gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
|
||||
GLint teeth, GLfloat tooth_depth)
|
||||
{
|
||||
GLint i;
|
||||
GLfloat r0, r1, r2;
|
||||
GLfloat angle, da;
|
||||
GLfloat u, v, len;
|
||||
|
||||
r0 = inner_radius;
|
||||
r1 = outer_radius - tooth_depth / 2.0;
|
||||
r2 = outer_radius + tooth_depth / 2.0;
|
||||
|
||||
da = 2.0 * M_PI / teeth / 4.0;
|
||||
|
||||
glShadeModel(GL_FLAT);
|
||||
|
||||
glNormal3f(0.0, 0.0, 1.0);
|
||||
|
||||
/* draw front face */
|
||||
glBegin(GL_QUAD_STRIP);
|
||||
for (i = 0; i <= teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
|
||||
if (i < teeth) {
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
|
||||
width * 0.5);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
|
||||
/* draw front sides of teeth */
|
||||
glBegin(GL_QUADS);
|
||||
da = 2.0 * M_PI / teeth / 4.0;
|
||||
for (i = 0; i < teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
|
||||
width * 0.5);
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
|
||||
width * 0.5);
|
||||
}
|
||||
glEnd();
|
||||
|
||||
glNormal3f(0.0, 0.0, -1.0);
|
||||
|
||||
/* draw back face */
|
||||
glBegin(GL_QUAD_STRIP);
|
||||
for (i = 0; i <= teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
|
||||
if (i < teeth) {
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
|
||||
-width * 0.5);
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
|
||||
/* draw back sides of teeth */
|
||||
glBegin(GL_QUADS);
|
||||
da = 2.0 * M_PI / teeth / 4.0;
|
||||
for (i = 0; i < teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
|
||||
-width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
|
||||
-width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
|
||||
}
|
||||
glEnd();
|
||||
|
||||
/* draw outward faces of teeth */
|
||||
glBegin(GL_QUAD_STRIP);
|
||||
for (i = 0; i < teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
|
||||
u = r2 * cos(angle + da) - r1 * cos(angle);
|
||||
v = r2 * sin(angle + da) - r1 * sin(angle);
|
||||
len = sqrt(u * u + v * v);
|
||||
u /= len;
|
||||
v /= len;
|
||||
glNormal3f(v, -u, 0.0);
|
||||
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
|
||||
glNormal3f(cos(angle), sin(angle), 0.0);
|
||||
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
|
||||
width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
|
||||
-width * 0.5);
|
||||
u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
|
||||
v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
|
||||
glNormal3f(v, -u, 0.0);
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
|
||||
width * 0.5);
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
|
||||
-width * 0.5);
|
||||
glNormal3f(cos(angle), sin(angle), 0.0);
|
||||
}
|
||||
|
||||
glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
|
||||
glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
|
||||
|
||||
glEnd();
|
||||
|
||||
glShadeModel(GL_SMOOTH);
|
||||
|
||||
/* draw inside radius cylinder */
|
||||
glBegin(GL_QUAD_STRIP);
|
||||
for (i = 0; i <= teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
glNormal3f(-cos(angle), -sin(angle), 0.0);
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
draw(void)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
glPushMatrix();
|
||||
glRotatef(view_rotx, 1.0, 0.0, 0.0);
|
||||
glRotatef(view_roty, 0.0, 1.0, 0.0);
|
||||
glRotatef(view_rotz, 0.0, 0.0, 1.0);
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef(-3.0, -2.0, 0.0);
|
||||
glRotatef(angle, 0.0, 0.0, 1.0);
|
||||
glCallList(gear1);
|
||||
glPopMatrix();
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef(3.1, -2.0, 0.0);
|
||||
glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0);
|
||||
glCallList(gear2);
|
||||
glPopMatrix();
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef(-3.1, 4.2, 0.0);
|
||||
glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0);
|
||||
glCallList(gear3);
|
||||
glPopMatrix();
|
||||
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
|
||||
/* new window size or exposure */
|
||||
static void
|
||||
reshape(int width, int height)
|
||||
{
|
||||
glViewport(0, 0, (GLint) width, (GLint) height);
|
||||
|
||||
GLfloat h = (GLfloat) height / (GLfloat) width;
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
|
||||
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glTranslatef(0.0, 0.0, -40.0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
init(void)
|
||||
{
|
||||
static GLfloat pos[4] = { 5.0, 5.0, 10.0, 0.0 };
|
||||
static GLfloat red[4] = { 0.8, 0.1, 0.0, 1.0 };
|
||||
static GLfloat green[4] = { 0.0, 0.8, 0.2, 1.0 };
|
||||
static GLfloat blue[4] = { 0.2, 0.2, 1.0, 1.0 };
|
||||
|
||||
glLightfv(GL_LIGHT0, GL_POSITION, pos);
|
||||
glEnable(GL_CULL_FACE);
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
/* make the gears */
|
||||
gear1 = glGenLists(1);
|
||||
glNewList(gear1, GL_COMPILE);
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
|
||||
gear(1.0, 4.0, 1.0, 20, 0.7);
|
||||
glEndList();
|
||||
|
||||
gear2 = glGenLists(1);
|
||||
glNewList(gear2, GL_COMPILE);
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
|
||||
gear(0.5, 2.0, 2.0, 10, 0.7);
|
||||
glEndList();
|
||||
|
||||
gear3 = glGenLists(1);
|
||||
glNewList(gear3, GL_COMPILE);
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
|
||||
gear(1.3, 2.0, 0.5, 10, 0.7);
|
||||
glEndList();
|
||||
|
||||
glEnable(GL_NORMALIZE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void run_gears(EGLDisplay dpy, EGLSurface surf, int ttr)
|
||||
{
|
||||
double st = current_time();
|
||||
double ct = st;
|
||||
int frames = 0;
|
||||
while (ct - st < ttr)
|
||||
{
|
||||
double tt = current_time();
|
||||
double dt = tt - ct;
|
||||
ct = tt;
|
||||
|
||||
/* advance rotation for next frame */
|
||||
angle += 70.0 * dt; /* 70 degrees per second */
|
||||
if (angle > 3600.0)
|
||||
angle -= 3600.0;
|
||||
|
||||
draw();
|
||||
|
||||
// DBR : Swap the Buffers
|
||||
eglSwapBuffers(dpy, surf);
|
||||
|
||||
|
||||
frames++;
|
||||
}
|
||||
|
||||
GLfloat seconds = ct - st;
|
||||
GLfloat fps = frames / seconds;
|
||||
printf("%d frames in %3.1f seconds = %6.3f FPS\n", frames, seconds, fps);
|
||||
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int maj, min;
|
||||
EGLContext ctx;
|
||||
EGLSurface screen_surf;
|
||||
EGLConfig configs[10];
|
||||
EGLint numConfigs, i;
|
||||
EGLBoolean b;
|
||||
|
||||
const EGLint screenAttribs[] = {
|
||||
EGL_WIDTH, 1024,
|
||||
EGL_HEIGHT, 768,
|
||||
EGL_NONE
|
||||
};
|
||||
|
||||
EGLModeMESA mode;
|
||||
EGLScreenMESA screen;
|
||||
EGLint count;
|
||||
GLboolean printInfo = GL_FALSE;
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if (strcmp(argv[i], "-info") == 0)
|
||||
{
|
||||
printInfo = GL_TRUE;
|
||||
}
|
||||
else
|
||||
printf("Warning: unknown parameter: %s\n", argv[i]);
|
||||
}
|
||||
|
||||
// DBR : Create EGL context/surface etc
|
||||
EGLDisplay d = eglGetDisplay("!fb_dri");
|
||||
assert(d);
|
||||
|
||||
if (!eglInitialize(d, &maj, &min)) {
|
||||
printf("demo: eglInitialize failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("EGL version = %d.%d\n", maj, min);
|
||||
printf("EGL_VENDOR = %s\n", eglQueryString(d, EGL_VENDOR));
|
||||
|
||||
eglGetConfigs(d, configs, 10, &numConfigs);
|
||||
eglGetScreensMESA(d, &screen, 1, &count);
|
||||
eglGetModesMESA(d, screen, &mode, 1, &count);
|
||||
|
||||
ctx = eglCreateContext(d, configs[0], EGL_NO_CONTEXT, NULL);
|
||||
if (ctx == EGL_NO_CONTEXT) {
|
||||
printf("failed to create context\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
screen_surf = eglCreateScreenSurfaceMESA(d, configs[0], screenAttribs);
|
||||
if (screen_surf == EGL_NO_SURFACE) {
|
||||
printf("failed to create screen surface\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
eglShowSurfaceMESA(d, screen, screen_surf, mode);
|
||||
|
||||
b = eglMakeCurrent(d, screen_surf, screen_surf, ctx);
|
||||
if (!b) {
|
||||
printf("make current failed\n");
|
||||
return 0;
|
||||
}
|
||||
// DBR
|
||||
|
||||
if (printInfo)
|
||||
{
|
||||
printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
|
||||
printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
|
||||
printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS));
|
||||
}
|
||||
|
||||
init(); // Initialise the GL visual
|
||||
reshape(1024,768);
|
||||
|
||||
// DBR : Run the simulation
|
||||
run_gears(d, screen_surf, 5.0);
|
||||
|
||||
|
||||
// DBR : Destroy EGL context/surface etc
|
||||
eglDestroySurface(d, screen_surf);
|
||||
eglDestroyContext(d, ctx);
|
||||
eglTerminate(d);
|
||||
// DBR
|
||||
|
||||
return 0;
|
||||
}
|
||||
2
progs/tests/.cvsignore
Normal file
2
progs/tests/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
||||
.cvsignore
|
||||
getproclist.h
|
||||
@@ -22,6 +22,7 @@ SOURCES = antialias.c \
|
||||
blendminmax.c \
|
||||
blendsquare.c \
|
||||
bufferobj.c \
|
||||
bug_3101.c \
|
||||
crossbar.c \
|
||||
cva.c \
|
||||
dinoshade.c \
|
||||
|
||||
128
progs/tests/bug_3101.c
Normal file
128
progs/tests/bug_3101.c
Normal file
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* (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
|
||||
* on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||
* license, and/or sell copies of the Software, and to permit persons to whom
|
||||
* the Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
* VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file bug_3101.c
|
||||
*
|
||||
* Simple regression test for bug #3101. Attempt to draw a single square.
|
||||
* After emiting the first vertex, call \c glEdgeFlag to change the vertex
|
||||
* format. If the bug still exists, this will cause a segfault.
|
||||
*
|
||||
* \author Ian Romanick <idr@us.ibm.com>
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
static int Width = 400;
|
||||
static int Height = 200;
|
||||
static const GLfloat Near = 5.0, Far = 25.0;
|
||||
|
||||
|
||||
static void Display( void )
|
||||
{
|
||||
glClearColor(0.2, 0.2, 0.8, 0);
|
||||
glClear( GL_COLOR_BUFFER_BIT );
|
||||
|
||||
glPushMatrix();
|
||||
|
||||
/* This is the "reference" square.
|
||||
*/
|
||||
|
||||
glTranslatef(-4.5, 0, 0);
|
||||
glBlendEquation( GL_FUNC_ADD );
|
||||
glBlendFunc( GL_ONE, GL_ZERO );
|
||||
glBegin(GL_QUADS);
|
||||
glColor3f( 0.5, 0.5, 0.5 );
|
||||
glVertex2f(-1, -1);
|
||||
glVertex2f( 1, -1);
|
||||
glEdgeFlag(GL_TRUE);
|
||||
glVertex2f( 1, 1);
|
||||
glVertex2f(-1, 1);
|
||||
glEnd();
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
glutSwapBuffers();
|
||||
}
|
||||
|
||||
|
||||
static void Reshape( int width, int height )
|
||||
{
|
||||
GLfloat ar = (float) width / (float) height;
|
||||
Width = width;
|
||||
Height = height;
|
||||
glViewport( 0, 0, width, height );
|
||||
glMatrixMode( GL_PROJECTION );
|
||||
glLoadIdentity();
|
||||
glFrustum( -ar, ar, -1.0, 1.0, Near, Far );
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
glLoadIdentity();
|
||||
glTranslatef( 0.0, 0.0, -15.0 );
|
||||
}
|
||||
|
||||
|
||||
static void Key( unsigned char key, int x, int y )
|
||||
{
|
||||
(void) x;
|
||||
(void) y;
|
||||
switch (key) {
|
||||
case 27:
|
||||
exit(0);
|
||||
break;
|
||||
}
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
static void Init( void )
|
||||
{
|
||||
const char * const ver_string = (const char * const)
|
||||
glGetString( GL_VERSION );
|
||||
|
||||
printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
printf("GL_VERSION = %s\n", ver_string);
|
||||
|
||||
printf("\nThis program should draw a single square, but not crash.\n");
|
||||
printf("This is a regression test for bug #3101.\n");
|
||||
printf("https://bugs.freedesktop.org/show_bug.cgi?id=3101\n");
|
||||
glEnable( GL_BLEND );
|
||||
}
|
||||
|
||||
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
glutInit( &argc, argv );
|
||||
glutInitWindowPosition( 0, 0 );
|
||||
glutInitWindowSize( Width, Height );
|
||||
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
|
||||
glutCreateWindow( "Bug #3101 Test" );
|
||||
glutReshapeFunc( Reshape );
|
||||
glutKeyboardFunc( Key );
|
||||
glutDisplayFunc( Display );
|
||||
Init();
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
||||
@@ -145,6 +145,19 @@ Init( void )
|
||||
|
||||
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height);
|
||||
|
||||
{
|
||||
GLint r, g, b, a;
|
||||
glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT,
|
||||
GL_RENDERBUFFER_RED_SIZE_EXT, &r);
|
||||
glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT,
|
||||
GL_RENDERBUFFER_GREEN_SIZE_EXT, &g);
|
||||
glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT,
|
||||
GL_RENDERBUFFER_BLUE_SIZE_EXT, &b);
|
||||
glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT,
|
||||
GL_RENDERBUFFER_ALPHA_SIZE_EXT, &a);
|
||||
printf("renderbuffer RGBA sizes = %d %d %d %d\n", r, g, b, a);
|
||||
}
|
||||
|
||||
CheckError(__LINE__);
|
||||
|
||||
/* restore to default */
|
||||
|
||||
@@ -223,6 +223,10 @@ Init(void)
|
||||
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, DepthRB);
|
||||
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT,
|
||||
TexWidth, TexHeight);
|
||||
glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT,
|
||||
GL_RENDERBUFFER_DEPTH_SIZE_EXT, &i);
|
||||
printf("Depth renderbuffer size = %d bits\n", i);
|
||||
assert(i > 0);
|
||||
|
||||
/* make stencil renderbuffer */
|
||||
glGenRenderbuffersEXT(1, &StencilRB);
|
||||
@@ -231,6 +235,10 @@ Init(void)
|
||||
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, StencilRB);
|
||||
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX,
|
||||
TexWidth, TexHeight);
|
||||
glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT,
|
||||
GL_RENDERBUFFER_STENCIL_SIZE_EXT, &i);
|
||||
printf("Stencil renderbuffer size = %d bits\n", i);
|
||||
assert(i > 0);
|
||||
|
||||
/* attach DepthRB to MyFB */
|
||||
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# $Id: getprocaddress.py,v 1.6 2004/11/27 19:57:46 brianp Exp $
|
||||
# $Id: getprocaddress.py,v 1.7 2005/06/21 23:42:43 idr Exp $
|
||||
|
||||
# Helper for the getprocaddress.c test.
|
||||
|
||||
from xml.sax import saxutils
|
||||
from xml.sax import make_parser
|
||||
from xml.sax.handler import feature_namespaces
|
||||
|
||||
import sys, getopt, re
|
||||
sys.path.append("../../src/mesa/glapi/" )
|
||||
import gl_XML
|
||||
@@ -30,16 +26,19 @@ def FindTestFunctions():
|
||||
return functions
|
||||
|
||||
|
||||
class PrintExports(gl_XML.FilterGLAPISpecBase):
|
||||
name = "gl_exports.py (from Mesa)"
|
||||
|
||||
class PrintExports(gl_XML.gl_print_base):
|
||||
def __init__(self):
|
||||
gl_XML.FilterGLAPISpecBase.__init__(self)
|
||||
gl_XML.gl_print_base.__init__(self)
|
||||
|
||||
self.name = "getprocaddress.py (from Mesa)"
|
||||
self.license = license.bsd_license_template % ( \
|
||||
"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
|
||||
(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
|
||||
|
||||
self.tests = FindTestFunctions()
|
||||
self.prevCategory = ""
|
||||
return
|
||||
|
||||
|
||||
def printRealHeader(self):
|
||||
print """
|
||||
@@ -50,22 +49,28 @@ struct name_test_pair {
|
||||
|
||||
static struct name_test_pair functions[] = {"""
|
||||
|
||||
def printRealFooter(self):
|
||||
print"""
|
||||
{ NULL, NULL }
|
||||
};
|
||||
"""
|
||||
def printBody(self, api):
|
||||
prev_category = None
|
||||
|
||||
|
||||
def printFunction(self, f):
|
||||
if f.category != self.prevCategory:
|
||||
print ' { "-%s", NULL},' % f.category
|
||||
self.prevCategory = f.category
|
||||
for f in api.functionIterateByOffset():
|
||||
[category, num] = api.get_category_for_name( f.name )
|
||||
if category != prev_category:
|
||||
print ' { "-%s", NULL},' % category
|
||||
prev_category = category
|
||||
|
||||
if f.name in self.tests:
|
||||
test = "test_%s" % f.name
|
||||
else:
|
||||
test = "NULL"
|
||||
print ' { "gl%s", %s },' % (f.name, test)
|
||||
for name in f.entry_points:
|
||||
if name in self.tests:
|
||||
test = "test_%s" % name
|
||||
break
|
||||
|
||||
print ' { "gl%s", %s },' % (f.name, test)
|
||||
|
||||
print ''
|
||||
print ' { NULL, NULL }'
|
||||
print '};'
|
||||
print ''
|
||||
return
|
||||
|
||||
|
||||
@@ -81,15 +86,8 @@ if __name__ == '__main__':
|
||||
if arg == "-f":
|
||||
file_name = val
|
||||
|
||||
dh = PrintExports()
|
||||
printer = PrintExports()
|
||||
|
||||
parser = make_parser()
|
||||
parser.setFeature(feature_namespaces, 0)
|
||||
parser.setContentHandler(dh)
|
||||
api = gl_XML.parse_GL_API( file_name, gl_XML.gl_item_factory() )
|
||||
|
||||
f = open(file_name)
|
||||
|
||||
parser.parse(f)
|
||||
dh.printHeader()
|
||||
dh.printFunctions()
|
||||
dh.printFooter()
|
||||
printer.Print( api )
|
||||
|
||||
@@ -20,6 +20,7 @@ PROGS = glthreads \
|
||||
glxswapcontrol \
|
||||
manywin \
|
||||
offset \
|
||||
overlay \
|
||||
pbinfo \
|
||||
pbdemo \
|
||||
wincopy \
|
||||
@@ -51,10 +52,10 @@ clean:
|
||||
|
||||
# special cases
|
||||
pbinfo: pbinfo.o pbutil.o
|
||||
$(CC) pbinfo.o pbutil.o $(APP_LIB_DEPS) -o $@
|
||||
$(CC) $(CFLAGS) pbinfo.o pbutil.o $(APP_LIB_DEPS) -o $@
|
||||
|
||||
pbdemo: pbdemo.o pbutil.o
|
||||
$(CC) pbdemo.o pbutil.o $(APP_LIB_DEPS) -o $@
|
||||
$(CC) $(CFLAGS) pbdemo.o pbutil.o $(APP_LIB_DEPS) -o $@
|
||||
|
||||
pbinfo.o: pbinfo.c pbutil.h
|
||||
$(CC) -c -I. -I$(INCDIR) $(CFLAGS) pbinfo.c
|
||||
@@ -66,13 +67,13 @@ pbutil.o: pbutil.c pbutil.h
|
||||
$(CC) -c -I. -I$(INCDIR) $(CFLAGS) pbutil.c
|
||||
|
||||
glxgears_fbconfig: glxgears_fbconfig.o pbutil.o
|
||||
$(CC) glxgears_fbconfig.o pbutil.o $(APP_LIB_DEPS) -o $@
|
||||
$(CC) $(CFLAGS) glxgears_fbconfig.o pbutil.o $(APP_LIB_DEPS) -o $@
|
||||
|
||||
glxgears_fbconfig.o: glxgears_fbconfig.c pbutil.h
|
||||
$(CC) -c -I. -I$(INCDIR) $(CFLAGS) glxgears_fbconfig.c
|
||||
$(CC) $(CFLAGS) -c -I. -I$(INCDIR) $(CFLAGS) glxgears_fbconfig.c
|
||||
|
||||
xrotfontdemo: xrotfontdemo.o xuserotfont.o
|
||||
$(CC) xrotfontdemo.o xuserotfont.o $(APP_LIB_DEPS) -o $@
|
||||
$(CC) $(CFLAGS) xrotfontdemo.o xuserotfont.o $(APP_LIB_DEPS) -o $@
|
||||
|
||||
xuserotfont.o: xuserotfont.c xuserotfont.h
|
||||
$(CC) -c -I. -I$(INCDIR) $(CFLAGS) xuserotfont.c
|
||||
|
||||
245
progs/xdemos/overlay.c
Normal file
245
progs/xdemos/overlay.c
Normal file
@@ -0,0 +1,245 @@
|
||||
/*
|
||||
* GLX overlay test/demo.
|
||||
*
|
||||
* Brian Paul
|
||||
* 18 July 2005
|
||||
*/
|
||||
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glx.h>
|
||||
#include <X11/keysym.h>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static int WinWidth = 300, WinHeight = 300;
|
||||
static Window NormalWindow = 0;
|
||||
static Window OverlayWindow = 0;
|
||||
static GLXContext NormalContext = 0;
|
||||
static GLXContext OverlayContext = 0;
|
||||
static GLboolean RGBOverlay = GL_FALSE;
|
||||
static GLfloat Angle = 0.0;
|
||||
|
||||
|
||||
static void
|
||||
RedrawNormal(Display *dpy)
|
||||
{
|
||||
glXMakeCurrent(dpy, NormalWindow, NormalContext);
|
||||
glViewport(0, 0, WinWidth, WinHeight);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glClearColor(0.5, 0.5, 0.5, 1.0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
glColor3f(1.0, 1.0, 0.0);
|
||||
glPushMatrix();
|
||||
glRotatef(Angle, 0, 0, 1);
|
||||
glRectf(-0.8, -0.8, 0.8, 0.8);
|
||||
glPopMatrix();
|
||||
glXSwapBuffers(dpy, NormalWindow);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
RedrawOverlay(Display *dpy)
|
||||
{
|
||||
glXMakeCurrent(dpy, OverlayWindow, OverlayContext);
|
||||
glViewport(0, 0, WinWidth, WinHeight);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
if (RGBOverlay) {
|
||||
glColor3f(0.0, 1.0, 1.0);
|
||||
}
|
||||
else {
|
||||
glIndexi(2);
|
||||
}
|
||||
glBegin(GL_LINES);
|
||||
glVertex2f(-1, -1);
|
||||
glVertex2f(1, 1);
|
||||
glVertex2f(1, -1);
|
||||
glVertex2f(-1, 1);
|
||||
glEnd();
|
||||
glXSwapBuffers(dpy, OverlayWindow);
|
||||
}
|
||||
|
||||
|
||||
static Window
|
||||
MakeWindow(Display *dpy, XVisualInfo *visinfo, Window parent,
|
||||
unsigned int width, unsigned int height)
|
||||
{
|
||||
int scrnum;
|
||||
XSetWindowAttributes attr;
|
||||
unsigned long mask;
|
||||
Window root;
|
||||
Window win;
|
||||
|
||||
scrnum = DefaultScreen(dpy);
|
||||
root = RootWindow(dpy, scrnum);
|
||||
|
||||
/* window attributes */
|
||||
attr.background_pixel = 0;
|
||||
attr.border_pixel = 0;
|
||||
attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone);
|
||||
attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask;
|
||||
mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
|
||||
|
||||
win = XCreateWindow(dpy, parent, 0, 0, width, height,
|
||||
0, visinfo->depth, InputOutput,
|
||||
visinfo->visual, mask, &attr);
|
||||
return win;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
MakeNormalWindow(Display *dpy)
|
||||
{
|
||||
int attrib[] = { GLX_RGBA,
|
||||
GLX_RED_SIZE, 1,
|
||||
GLX_GREEN_SIZE, 1,
|
||||
GLX_BLUE_SIZE, 1,
|
||||
GLX_DOUBLEBUFFER,
|
||||
None };
|
||||
int scrnum;
|
||||
Window root;
|
||||
XVisualInfo *visinfo;
|
||||
|
||||
scrnum = DefaultScreen(dpy);
|
||||
root = RootWindow(dpy, scrnum);
|
||||
|
||||
visinfo = glXChooseVisual(dpy, scrnum, attrib);
|
||||
if (!visinfo) {
|
||||
printf("Error: couldn't get an RGB, Double-buffered visual\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
NormalWindow = MakeWindow(dpy, visinfo, root, WinWidth, WinHeight);
|
||||
assert(NormalWindow);
|
||||
|
||||
NormalContext = glXCreateContext(dpy, visinfo, NULL, True);
|
||||
assert(NormalContext);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
MakeOverlayWindow(Display *dpy)
|
||||
{
|
||||
int rgbAttribs[] = {
|
||||
GLX_RGBA,
|
||||
GLX_RED_SIZE, 1,
|
||||
GLX_GREEN_SIZE, 1,
|
||||
GLX_BLUE_SIZE, 1,
|
||||
GLX_DOUBLEBUFFER,
|
||||
GLX_LEVEL, 1,
|
||||
None
|
||||
};
|
||||
int indexAttribs[] = {
|
||||
/*GLX_RGBA, leave this out */
|
||||
GLX_RED_SIZE, 1,
|
||||
GLX_GREEN_SIZE, 1,
|
||||
GLX_BLUE_SIZE, 1,
|
||||
GLX_DOUBLEBUFFER,
|
||||
GLX_LEVEL, 1,
|
||||
None
|
||||
};
|
||||
int scrnum;
|
||||
Window root;
|
||||
XVisualInfo *visinfo;
|
||||
|
||||
scrnum = DefaultScreen(dpy);
|
||||
root = RootWindow(dpy, scrnum);
|
||||
|
||||
visinfo = glXChooseVisual(dpy, scrnum, rgbAttribs);
|
||||
if (visinfo) {
|
||||
printf("Found RGB overlay visual 0x%x\n", (int) visinfo->visualid);
|
||||
RGBOverlay = GL_TRUE;
|
||||
}
|
||||
else {
|
||||
visinfo = glXChooseVisual(dpy, scrnum, indexAttribs);
|
||||
if (visinfo) {
|
||||
printf("Found Color Index overlay visual 0x%x\n",
|
||||
(int) visinfo->visualid);
|
||||
/* XXX setup the colormap entries! */
|
||||
}
|
||||
else {
|
||||
printf("Error: couldn't get an overlay visual!\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
OverlayWindow = MakeWindow(dpy, visinfo, NormalWindow, WinWidth, WinHeight);
|
||||
assert(OverlayWindow);
|
||||
|
||||
OverlayContext = glXCreateContext(dpy, visinfo, NULL, True);
|
||||
assert(OverlayContext);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
EventLoop(Display *dpy)
|
||||
{
|
||||
XEvent event;
|
||||
|
||||
while (1) {
|
||||
XNextEvent(dpy, &event);
|
||||
|
||||
switch (event.type) {
|
||||
case Expose:
|
||||
RedrawNormal(dpy);
|
||||
RedrawOverlay(dpy);
|
||||
break;
|
||||
case ConfigureNotify:
|
||||
WinWidth = event.xconfigure.width;
|
||||
WinHeight = event.xconfigure.height;
|
||||
if (event.xconfigure.window == NormalWindow)
|
||||
XResizeWindow(dpy, OverlayWindow, WinWidth, WinHeight);
|
||||
break;
|
||||
case KeyPress:
|
||||
{
|
||||
char buffer[10];
|
||||
int r, code;
|
||||
code = XLookupKeysym(&event.xkey, 0);
|
||||
r = XLookupString(&event.xkey, buffer, sizeof(buffer),
|
||||
NULL, NULL);
|
||||
if (buffer[0] == 27) {
|
||||
/* escape */
|
||||
return;
|
||||
}
|
||||
else if (buffer[0] == ' ') {
|
||||
Angle += 5.0;
|
||||
RedrawNormal(dpy);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
; /* nothing */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
Display *dpy = XOpenDisplay(NULL);
|
||||
|
||||
assert(dpy);
|
||||
|
||||
MakeNormalWindow(dpy);
|
||||
MakeOverlayWindow(dpy);
|
||||
|
||||
XMapWindow(dpy, NormalWindow);
|
||||
XMapWindow(dpy, OverlayWindow);
|
||||
|
||||
EventLoop(dpy);
|
||||
|
||||
glXDestroyContext(dpy, OverlayContext);
|
||||
glXDestroyContext(dpy, NormalContext);
|
||||
XDestroyWindow(dpy, OverlayWindow);
|
||||
XDestroyWindow(dpy, NormalWindow);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -53,145 +53,145 @@ glutExtensionSupported(const char *extension)
|
||||
|
||||
struct name_address_pair {
|
||||
const char *name;
|
||||
const void *address;
|
||||
const GLUTproc address;
|
||||
};
|
||||
|
||||
static struct name_address_pair glut_functions[] = {
|
||||
{ "glutInit", (const void *) glutInit },
|
||||
{ "glutInitDisplayMode", (const void *) glutInitDisplayMode },
|
||||
{ "glutInitDisplayString", (const void *) glutInitDisplayString },
|
||||
{ "glutInitWindowPosition", (const void *) glutInitWindowPosition },
|
||||
{ "glutInitWindowSize", (const void *) glutInitWindowSize },
|
||||
{ "glutMainLoop", (const void *) glutMainLoop },
|
||||
{ "glutCreateWindow", (const void *) glutCreateWindow },
|
||||
{ "glutCreateSubWindow", (const void *) glutCreateSubWindow },
|
||||
{ "glutDestroyWindow", (const void *) glutDestroyWindow },
|
||||
{ "glutPostRedisplay", (const void *) glutPostRedisplay },
|
||||
{ "glutPostWindowRedisplay", (const void *) glutPostWindowRedisplay },
|
||||
{ "glutSwapBuffers", (const void *) glutSwapBuffers },
|
||||
{ "glutGetWindow", (const void *) glutGetWindow },
|
||||
{ "glutSetWindow", (const void *) glutSetWindow },
|
||||
{ "glutSetWindowTitle", (const void *) glutSetWindowTitle },
|
||||
{ "glutSetIconTitle", (const void *) glutSetIconTitle },
|
||||
{ "glutPositionWindow", (const void *) glutPositionWindow },
|
||||
{ "glutReshapeWindow", (const void *) glutReshapeWindow },
|
||||
{ "glutPopWindow", (const void *) glutPopWindow },
|
||||
{ "glutPushWindow", (const void *) glutPushWindow },
|
||||
{ "glutIconifyWindow", (const void *) glutIconifyWindow },
|
||||
{ "glutShowWindow", (const void *) glutShowWindow },
|
||||
{ "glutHideWindow", (const void *) glutHideWindow },
|
||||
{ "glutFullScreen", (const void *) glutFullScreen },
|
||||
{ "glutSetCursor", (const void *) glutSetCursor },
|
||||
{ "glutWarpPointer", (const void *) glutWarpPointer },
|
||||
{ "glutEstablishOverlay", (const void *) glutEstablishOverlay },
|
||||
{ "glutRemoveOverlay", (const void *) glutRemoveOverlay },
|
||||
{ "glutUseLayer", (const void *) glutUseLayer },
|
||||
{ "glutPostOverlayRedisplay", (const void *) glutPostOverlayRedisplay },
|
||||
{ "glutPostWindowOverlayRedisplay", (const void *) glutPostWindowOverlayRedisplay },
|
||||
{ "glutShowOverlay", (const void *) glutShowOverlay },
|
||||
{ "glutHideOverlay", (const void *) glutHideOverlay },
|
||||
{ "glutCreateMenu", (const void *) glutCreateMenu },
|
||||
{ "glutDestroyMenu", (const void *) glutDestroyMenu },
|
||||
{ "glutGetMenu", (const void *) glutGetMenu },
|
||||
{ "glutSetMenu", (const void *) glutSetMenu },
|
||||
{ "glutAddMenuEntry", (const void *) glutAddMenuEntry },
|
||||
{ "glutAddSubMenu", (const void *) glutAddSubMenu },
|
||||
{ "glutChangeToMenuEntry", (const void *) glutChangeToMenuEntry },
|
||||
{ "glutChangeToSubMenu", (const void *) glutChangeToSubMenu },
|
||||
{ "glutRemoveMenuItem", (const void *) glutRemoveMenuItem },
|
||||
{ "glutAttachMenu", (const void *) glutAttachMenu },
|
||||
{ "glutDetachMenu", (const void *) glutDetachMenu },
|
||||
{ "glutDisplayFunc", (const void *) glutDisplayFunc },
|
||||
{ "glutReshapeFunc", (const void *) glutReshapeFunc },
|
||||
{ "glutKeyboardFunc", (const void *) glutKeyboardFunc },
|
||||
{ "glutMouseFunc", (const void *) glutMouseFunc },
|
||||
{ "glutMotionFunc", (const void *) glutMotionFunc },
|
||||
{ "glutPassiveMotionFunc", (const void *) glutPassiveMotionFunc },
|
||||
{ "glutEntryFunc", (const void *) glutEntryFunc },
|
||||
{ "glutVisibilityFunc", (const void *) glutVisibilityFunc },
|
||||
{ "glutIdleFunc", (const void *) glutIdleFunc },
|
||||
{ "glutTimerFunc", (const void *) glutTimerFunc },
|
||||
{ "glutMenuStateFunc", (const void *) glutMenuStateFunc },
|
||||
{ "glutSpecialFunc", (const void *) glutSpecialFunc },
|
||||
{ "glutSpaceballMotionFunc", (const void *) glutSpaceballMotionFunc },
|
||||
{ "glutSpaceballRotateFunc", (const void *) glutSpaceballRotateFunc },
|
||||
{ "glutSpaceballButtonFunc", (const void *) glutSpaceballButtonFunc },
|
||||
{ "glutButtonBoxFunc", (const void *) glutButtonBoxFunc },
|
||||
{ "glutDialsFunc", (const void *) glutDialsFunc },
|
||||
{ "glutTabletMotionFunc", (const void *) glutTabletMotionFunc },
|
||||
{ "glutTabletButtonFunc", (const void *) glutTabletButtonFunc },
|
||||
{ "glutMenuStatusFunc", (const void *) glutMenuStatusFunc },
|
||||
{ "glutOverlayDisplayFunc", (const void *) glutOverlayDisplayFunc },
|
||||
{ "glutWindowStatusFunc", (const void *) glutWindowStatusFunc },
|
||||
// { "glutKeyboardUpFunc", (const void *) glutKeyboardUpFunc },
|
||||
// { "glutSpecialUpFunc", (const void *) glutSpecialUpFunc },
|
||||
// { "glutJoystickFunc", (const void *) glutJoystickFunc },
|
||||
{ "glutSetColor", (const void *) glutSetColor },
|
||||
{ "glutGetColor", (const void *) glutGetColor },
|
||||
{ "glutCopyColormap", (const void *) glutCopyColormap },
|
||||
{ "glutGet", (const void *) glutGet },
|
||||
{ "glutDeviceGet", (const void *) glutDeviceGet },
|
||||
{ "glutExtensionSupported", (const void *) glutExtensionSupported },
|
||||
{ "glutGetModifiers", (const void *) glutGetModifiers },
|
||||
{ "glutLayerGet", (const void *) glutLayerGet },
|
||||
{ "glutGetProcAddress", (const void *) glutGetProcAddress },
|
||||
{ "glutBitmapCharacter", (const void *) glutBitmapCharacter },
|
||||
{ "glutBitmapWidth", (const void *) glutBitmapWidth },
|
||||
{ "glutStrokeCharacter", (const void *) glutStrokeCharacter },
|
||||
{ "glutStrokeWidth", (const void *) glutStrokeWidth },
|
||||
{ "glutBitmapLength", (const void *) glutBitmapLength },
|
||||
{ "glutStrokeLength", (const void *) glutStrokeLength },
|
||||
{ "glutWireSphere", (const void *) glutWireSphere },
|
||||
{ "glutSolidSphere", (const void *) glutSolidSphere },
|
||||
{ "glutWireCone", (const void *) glutWireCone },
|
||||
{ "glutSolidCone", (const void *) glutSolidCone },
|
||||
{ "glutWireCube", (const void *) glutWireCube },
|
||||
{ "glutSolidCube", (const void *) glutSolidCube },
|
||||
{ "glutWireTorus", (const void *) glutWireTorus },
|
||||
{ "glutSolidTorus", (const void *) glutSolidTorus },
|
||||
{ "glutWireDodecahedron", (const void *) glutWireDodecahedron },
|
||||
{ "glutSolidDodecahedron", (const void *) glutSolidDodecahedron },
|
||||
{ "glutWireTeapot", (const void *) glutWireTeapot },
|
||||
{ "glutSolidTeapot", (const void *) glutSolidTeapot },
|
||||
{ "glutWireOctahedron", (const void *) glutWireOctahedron },
|
||||
{ "glutSolidOctahedron", (const void *) glutSolidOctahedron },
|
||||
{ "glutWireTetrahedron", (const void *) glutWireTetrahedron },
|
||||
{ "glutSolidTetrahedron", (const void *) glutSolidTetrahedron },
|
||||
{ "glutWireIcosahedron", (const void *) glutWireIcosahedron },
|
||||
{ "glutSolidIcosahedron", (const void *) glutSolidIcosahedron },
|
||||
{ "glutVideoResizeGet", (const void *) glutVideoResizeGet },
|
||||
{ "glutSetupVideoResizing", (const void *) glutSetupVideoResizing },
|
||||
{ "glutStopVideoResizing", (const void *) glutStopVideoResizing },
|
||||
{ "glutVideoResize", (const void *) glutVideoResize },
|
||||
{ "glutVideoPan", (const void *) glutVideoPan },
|
||||
{ "glutReportErrors", (const void *) glutReportErrors },
|
||||
// { "glutIgnoreKeyRepeat", (const void *) glutIgnoreKeyRepeat },
|
||||
// { "glutSetKeyRepeat", (const void *) glutSetKeyRepeat },
|
||||
// { "glutForceJoystickFunc", (const void *) glutForceJoystickFunc },
|
||||
// { "glutGameModeString", (const void *) glutGameModeString },
|
||||
// { "glutEnterGameMode", (const void *) glutEnterGameMode },
|
||||
// { "glutLeaveGameMode", (const void *) glutLeaveGameMode },
|
||||
// { "glutGameModeGet", (const void *) glutGameModeGet },
|
||||
{ "glutInit", (const GLUTproc) glutInit },
|
||||
{ "glutInitDisplayMode", (const GLUTproc) glutInitDisplayMode },
|
||||
{ "glutInitDisplayString", (const GLUTproc) glutInitDisplayString },
|
||||
{ "glutInitWindowPosition", (const GLUTproc) glutInitWindowPosition },
|
||||
{ "glutInitWindowSize", (const GLUTproc) glutInitWindowSize },
|
||||
{ "glutMainLoop", (const GLUTproc) glutMainLoop },
|
||||
{ "glutCreateWindow", (const GLUTproc) glutCreateWindow },
|
||||
{ "glutCreateSubWindow", (const GLUTproc) glutCreateSubWindow },
|
||||
{ "glutDestroyWindow", (const GLUTproc) glutDestroyWindow },
|
||||
{ "glutPostRedisplay", (const GLUTproc) glutPostRedisplay },
|
||||
{ "glutPostWindowRedisplay", (const GLUTproc) glutPostWindowRedisplay },
|
||||
{ "glutSwapBuffers", (const GLUTproc) glutSwapBuffers },
|
||||
{ "glutGetWindow", (const GLUTproc) glutGetWindow },
|
||||
{ "glutSetWindow", (const GLUTproc) glutSetWindow },
|
||||
{ "glutSetWindowTitle", (const GLUTproc) glutSetWindowTitle },
|
||||
{ "glutSetIconTitle", (const GLUTproc) glutSetIconTitle },
|
||||
{ "glutPositionWindow", (const GLUTproc) glutPositionWindow },
|
||||
{ "glutReshapeWindow", (const GLUTproc) glutReshapeWindow },
|
||||
{ "glutPopWindow", (const GLUTproc) glutPopWindow },
|
||||
{ "glutPushWindow", (const GLUTproc) glutPushWindow },
|
||||
{ "glutIconifyWindow", (const GLUTproc) glutIconifyWindow },
|
||||
{ "glutShowWindow", (const GLUTproc) glutShowWindow },
|
||||
{ "glutHideWindow", (const GLUTproc) glutHideWindow },
|
||||
{ "glutFullScreen", (const GLUTproc) glutFullScreen },
|
||||
{ "glutSetCursor", (const GLUTproc) glutSetCursor },
|
||||
{ "glutWarpPointer", (const GLUTproc) glutWarpPointer },
|
||||
{ "glutEstablishOverlay", (const GLUTproc) glutEstablishOverlay },
|
||||
{ "glutRemoveOverlay", (const GLUTproc) glutRemoveOverlay },
|
||||
{ "glutUseLayer", (const GLUTproc) glutUseLayer },
|
||||
{ "glutPostOverlayRedisplay", (const GLUTproc) glutPostOverlayRedisplay },
|
||||
{ "glutPostWindowOverlayRedisplay", (const GLUTproc) glutPostWindowOverlayRedisplay },
|
||||
{ "glutShowOverlay", (const GLUTproc) glutShowOverlay },
|
||||
{ "glutHideOverlay", (const GLUTproc) glutHideOverlay },
|
||||
{ "glutCreateMenu", (const GLUTproc) glutCreateMenu },
|
||||
{ "glutDestroyMenu", (const GLUTproc) glutDestroyMenu },
|
||||
{ "glutGetMenu", (const GLUTproc) glutGetMenu },
|
||||
{ "glutSetMenu", (const GLUTproc) glutSetMenu },
|
||||
{ "glutAddMenuEntry", (const GLUTproc) glutAddMenuEntry },
|
||||
{ "glutAddSubMenu", (const GLUTproc) glutAddSubMenu },
|
||||
{ "glutChangeToMenuEntry", (const GLUTproc) glutChangeToMenuEntry },
|
||||
{ "glutChangeToSubMenu", (const GLUTproc) glutChangeToSubMenu },
|
||||
{ "glutRemoveMenuItem", (const GLUTproc) glutRemoveMenuItem },
|
||||
{ "glutAttachMenu", (const GLUTproc) glutAttachMenu },
|
||||
{ "glutDetachMenu", (const GLUTproc) glutDetachMenu },
|
||||
{ "glutDisplayFunc", (const GLUTproc) glutDisplayFunc },
|
||||
{ "glutReshapeFunc", (const GLUTproc) glutReshapeFunc },
|
||||
{ "glutKeyboardFunc", (const GLUTproc) glutKeyboardFunc },
|
||||
{ "glutMouseFunc", (const GLUTproc) glutMouseFunc },
|
||||
{ "glutMotionFunc", (const GLUTproc) glutMotionFunc },
|
||||
{ "glutPassiveMotionFunc", (const GLUTproc) glutPassiveMotionFunc },
|
||||
{ "glutEntryFunc", (const GLUTproc) glutEntryFunc },
|
||||
{ "glutVisibilityFunc", (const GLUTproc) glutVisibilityFunc },
|
||||
{ "glutIdleFunc", (const GLUTproc) glutIdleFunc },
|
||||
{ "glutTimerFunc", (const GLUTproc) glutTimerFunc },
|
||||
{ "glutMenuStateFunc", (const GLUTproc) glutMenuStateFunc },
|
||||
{ "glutSpecialFunc", (const GLUTproc) glutSpecialFunc },
|
||||
{ "glutSpaceballMotionFunc", (const GLUTproc) glutSpaceballMotionFunc },
|
||||
{ "glutSpaceballRotateFunc", (const GLUTproc) glutSpaceballRotateFunc },
|
||||
{ "glutSpaceballButtonFunc", (const GLUTproc) glutSpaceballButtonFunc },
|
||||
{ "glutButtonBoxFunc", (const GLUTproc) glutButtonBoxFunc },
|
||||
{ "glutDialsFunc", (const GLUTproc) glutDialsFunc },
|
||||
{ "glutTabletMotionFunc", (const GLUTproc) glutTabletMotionFunc },
|
||||
{ "glutTabletButtonFunc", (const GLUTproc) glutTabletButtonFunc },
|
||||
{ "glutMenuStatusFunc", (const GLUTproc) glutMenuStatusFunc },
|
||||
{ "glutOverlayDisplayFunc", (const GLUTproc) glutOverlayDisplayFunc },
|
||||
{ "glutWindowStatusFunc", (const GLUTproc) glutWindowStatusFunc },
|
||||
// { "glutKeyboardUpFunc", (const GLUTproc) glutKeyboardUpFunc },
|
||||
// { "glutSpecialUpFunc", (const GLUTproc) glutSpecialUpFunc },
|
||||
// { "glutJoystickFunc", (const GLUTproc) glutJoystickFunc },
|
||||
{ "glutSetColor", (const GLUTproc) glutSetColor },
|
||||
{ "glutGetColor", (const GLUTproc) glutGetColor },
|
||||
{ "glutCopyColormap", (const GLUTproc) glutCopyColormap },
|
||||
{ "glutGet", (const GLUTproc) glutGet },
|
||||
{ "glutDeviceGet", (const GLUTproc) glutDeviceGet },
|
||||
{ "glutExtensionSupported", (const GLUTproc) glutExtensionSupported },
|
||||
{ "glutGetModifiers", (const GLUTproc) glutGetModifiers },
|
||||
{ "glutLayerGet", (const GLUTproc) glutLayerGet },
|
||||
{ "glutGetProcAddress", (const GLUTproc) glutGetProcAddress },
|
||||
{ "glutBitmapCharacter", (const GLUTproc) glutBitmapCharacter },
|
||||
{ "glutBitmapWidth", (const GLUTproc) glutBitmapWidth },
|
||||
{ "glutStrokeCharacter", (const GLUTproc) glutStrokeCharacter },
|
||||
{ "glutStrokeWidth", (const GLUTproc) glutStrokeWidth },
|
||||
{ "glutBitmapLength", (const GLUTproc) glutBitmapLength },
|
||||
{ "glutStrokeLength", (const GLUTproc) glutStrokeLength },
|
||||
{ "glutWireSphere", (const GLUTproc) glutWireSphere },
|
||||
{ "glutSolidSphere", (const GLUTproc) glutSolidSphere },
|
||||
{ "glutWireCone", (const GLUTproc) glutWireCone },
|
||||
{ "glutSolidCone", (const GLUTproc) glutSolidCone },
|
||||
{ "glutWireCube", (const GLUTproc) glutWireCube },
|
||||
{ "glutSolidCube", (const GLUTproc) glutSolidCube },
|
||||
{ "glutWireTorus", (const GLUTproc) glutWireTorus },
|
||||
{ "glutSolidTorus", (const GLUTproc) glutSolidTorus },
|
||||
{ "glutWireDodecahedron", (const GLUTproc) glutWireDodecahedron },
|
||||
{ "glutSolidDodecahedron", (const GLUTproc) glutSolidDodecahedron },
|
||||
{ "glutWireTeapot", (const GLUTproc) glutWireTeapot },
|
||||
{ "glutSolidTeapot", (const GLUTproc) glutSolidTeapot },
|
||||
{ "glutWireOctahedron", (const GLUTproc) glutWireOctahedron },
|
||||
{ "glutSolidOctahedron", (const GLUTproc) glutSolidOctahedron },
|
||||
{ "glutWireTetrahedron", (const GLUTproc) glutWireTetrahedron },
|
||||
{ "glutSolidTetrahedron", (const GLUTproc) glutSolidTetrahedron },
|
||||
{ "glutWireIcosahedron", (const GLUTproc) glutWireIcosahedron },
|
||||
{ "glutSolidIcosahedron", (const GLUTproc) glutSolidIcosahedron },
|
||||
{ "glutVideoResizeGet", (const GLUTproc) glutVideoResizeGet },
|
||||
{ "glutSetupVideoResizing", (const GLUTproc) glutSetupVideoResizing },
|
||||
{ "glutStopVideoResizing", (const GLUTproc) glutStopVideoResizing },
|
||||
{ "glutVideoResize", (const GLUTproc) glutVideoResize },
|
||||
{ "glutVideoPan", (const GLUTproc) glutVideoPan },
|
||||
{ "glutReportErrors", (const GLUTproc) glutReportErrors },
|
||||
// { "glutIgnoreKeyRepeat", (const GLUTproc) glutIgnoreKeyRepeat },
|
||||
// { "glutSetKeyRepeat", (const GLUTproc) glutSetKeyRepeat },
|
||||
// { "glutForceJoystickFunc", (const GLUTproc) glutForceJoystickFunc },
|
||||
// { "glutGameModeString", (const GLUTproc) glutGameModeString },
|
||||
// { "glutEnterGameMode", (const GLUTproc) glutEnterGameMode },
|
||||
// { "glutLeaveGameMode", (const GLUTproc) glutLeaveGameMode },
|
||||
// { "glutGameModeGet", (const GLUTproc) glutGameModeGet },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
/* XXX This isn't an official GLUT function, yet */
|
||||
void * GLUTAPIENTRY
|
||||
GLUTproc GLUTAPIENTRY
|
||||
glutGetProcAddress(const char *procName)
|
||||
{
|
||||
/* Try GLUT functions first */
|
||||
int i;
|
||||
for (i = 0; glut_functions[i].name; i++) {
|
||||
if (strcmp(glut_functions[i].name, procName) == 0)
|
||||
return (void *) glut_functions[i].address;
|
||||
return glut_functions[i].address;
|
||||
}
|
||||
|
||||
/* Try core GL functions */
|
||||
#if defined(_WIN32)
|
||||
return (void *) wglGetProcAddress((LPCSTR) procName);
|
||||
return (GLUTProc) wglGetProcAddress((LPCSTR) procName);
|
||||
#elif defined(GLX_ARB_get_proc_address)
|
||||
return (void *) glXGetProcAddressARB((const GLubyte *) procName);
|
||||
return (GLUTProc) glXGetProcAddressARB((const GLubyte *) procName);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
@@ -49,6 +49,7 @@ C_SOURCES = \
|
||||
XF86dri.c \
|
||||
|
||||
X86_SOURCES = $(TOP)/src/mesa/x86/glapi_x86.S
|
||||
X86-64_SOURCES = $(TOP)/src/mesa/x86-64/glapi_x86-64.S
|
||||
|
||||
# ASM_SOURCES = $(X86_SOURCES)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -543,10 +543,10 @@ extern HIDDEN void __indirect_glSecondaryColor3usEXT(GLushort red, GLushort gree
|
||||
extern HIDDEN void __indirect_glSecondaryColor3usvEXT(const GLushort * v);
|
||||
extern HIDDEN void __indirect_glSecondaryColorPointerEXT(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer);
|
||||
extern HIDDEN GLboolean __indirect_glAreProgramsResidentNV(GLsizei n, const GLuint * ids, GLboolean * residences);
|
||||
extern HIDDEN void __indirect_glBindProgramNV(GLenum target, GLuint id);
|
||||
extern HIDDEN void __indirect_glDeleteProgramsNV(GLsizei n, const GLuint * ids);
|
||||
extern HIDDEN void __indirect_glBindProgramNV(GLenum target, GLuint program);
|
||||
extern HIDDEN void __indirect_glDeleteProgramsNV(GLsizei n, const GLuint * programs);
|
||||
extern HIDDEN void __indirect_glExecuteProgramNV(GLenum target, GLuint id, const GLfloat * params);
|
||||
extern HIDDEN void __indirect_glGenProgramsNV(GLsizei n, GLuint * ids);
|
||||
extern HIDDEN void __indirect_glGenProgramsNV(GLsizei n, GLuint * programs);
|
||||
extern HIDDEN void __indirect_glGetProgramParameterdvNV(GLenum target, GLuint index, GLenum pname, GLdouble * params);
|
||||
extern HIDDEN void __indirect_glGetProgramParameterfvNV(GLenum target, GLuint index, GLenum pname, GLfloat * params);
|
||||
extern HIDDEN void __indirect_glGetProgramivNV(GLuint id, GLenum pname, GLint * params);
|
||||
@@ -555,8 +555,8 @@ extern HIDDEN void __indirect_glGetTrackMatrixivNV(GLenum target, GLuint address
|
||||
extern HIDDEN void __indirect_glGetVertexAttribdvARB(GLuint index, GLenum pname, GLdouble * params);
|
||||
extern HIDDEN void __indirect_glGetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat * params);
|
||||
extern HIDDEN void __indirect_glGetVertexAttribivARB(GLuint index, GLenum pname, GLint * params);
|
||||
extern HIDDEN void __indirect_glGetVertexAttribPointervNV(GLuint index, GLenum pname, GLvoid ** pointer);
|
||||
extern HIDDEN GLboolean __indirect_glIsProgramNV(GLuint id);
|
||||
extern HIDDEN void __indirect_glGetVertexAttribPointervNV(GLuint index, GLenum pname, GLvoid ** params);
|
||||
extern HIDDEN GLboolean __indirect_glIsProgramNV(GLuint program);
|
||||
extern HIDDEN void __indirect_glLoadProgramNV(GLenum target, GLuint id, GLsizei len, const GLubyte * program);
|
||||
extern HIDDEN void __indirect_glProgramParameter4dNV(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
|
||||
extern HIDDEN void __indirect_glProgramParameter4dvNV(GLenum target, GLuint index, const GLdouble * params);
|
||||
@@ -606,7 +606,7 @@ extern HIDDEN void __indirect_glVertexAttribs4dvNV(GLuint index, GLsizei n, cons
|
||||
extern HIDDEN void __indirect_glVertexAttribs4fvNV(GLuint index, GLsizei n, const GLfloat * v);
|
||||
extern HIDDEN void __indirect_glVertexAttribs4svNV(GLuint index, GLsizei n, const GLshort * v);
|
||||
extern HIDDEN void __indirect_glVertexAttribs4ubvNV(GLuint index, GLsizei n, const GLubyte * v);
|
||||
extern HIDDEN void __indirect_glPointParameteriNV(GLenum pname, GLint params);
|
||||
extern HIDDEN void __indirect_glPointParameteriNV(GLenum pname, GLint param);
|
||||
extern HIDDEN void __indirect_glPointParameterivNV(GLenum pname, const GLint * params);
|
||||
extern HIDDEN void __indirect_glMultiDrawArraysEXT(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount);
|
||||
extern HIDDEN void __indirect_glMultiDrawElementsEXT(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount);
|
||||
@@ -682,6 +682,23 @@ extern HIDDEN void __indirect_glVertexAttrib4sNV(GLuint index, GLshort x, GLshor
|
||||
extern HIDDEN void __indirect_glVertexAttrib4svNV(GLuint index, const GLshort * v);
|
||||
extern HIDDEN void __indirect_glVertexAttrib4ubNV(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
|
||||
extern HIDDEN void __indirect_glVertexAttrib4ubvNV(GLuint index, const GLubyte * v);
|
||||
extern HIDDEN GLboolean __indirect_glIsRenderbufferEXT(GLuint renderbuffer);
|
||||
extern HIDDEN void __indirect_glBindRenderbufferEXT(GLenum target, GLuint renderbuffer);
|
||||
extern HIDDEN void __indirect_glDeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers);
|
||||
extern HIDDEN void __indirect_glGenRenderbuffersEXT(GLsizei n, GLuint * renderbuffers);
|
||||
extern HIDDEN void __indirect_glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
|
||||
extern HIDDEN void __indirect_glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint * params);
|
||||
extern HIDDEN GLboolean __indirect_glIsFramebufferEXT(GLuint framebuffer);
|
||||
extern HIDDEN void __indirect_glBindFramebufferEXT(GLenum target, GLuint framebuffer);
|
||||
extern HIDDEN void __indirect_glDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers);
|
||||
extern HIDDEN void __indirect_glGenFramebuffersEXT(GLsizei n, GLuint * framebuffers);
|
||||
extern HIDDEN GLenum __indirect_glCheckFramebufferStatusEXT(GLenum target);
|
||||
extern HIDDEN void __indirect_glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
|
||||
extern HIDDEN void __indirect_glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
|
||||
extern HIDDEN void __indirect_glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
|
||||
extern HIDDEN void __indirect_glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
|
||||
extern HIDDEN void __indirect_glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint * params);
|
||||
extern HIDDEN void __indirect_glGenerateMipmapEXT(GLenum target);
|
||||
|
||||
# undef HIDDEN
|
||||
# undef FASTCALL
|
||||
|
||||
@@ -72,7 +72,7 @@ __GLapi * __glXNewIndirectAPI( void )
|
||||
|
||||
/* now, initialize the entries we understand */
|
||||
|
||||
/* GL_VERSION_1_0 */
|
||||
/* 1.0 */
|
||||
|
||||
glAPI->NewList = __indirect_glNewList;
|
||||
glAPI->EndList = __indirect_glEndList;
|
||||
@@ -381,7 +381,7 @@ __GLapi * __glXNewIndirectAPI( void )
|
||||
glAPI->Translatef = __indirect_glTranslatef;
|
||||
glAPI->Viewport = __indirect_glViewport;
|
||||
|
||||
/* GL_VERSION_1_1 */
|
||||
/* 1.1 */
|
||||
|
||||
glAPI->ArrayElement = __indirect_glArrayElement;
|
||||
glAPI->BindTexture = __indirect_glBindTexture;
|
||||
@@ -414,7 +414,7 @@ __GLapi * __glXNewIndirectAPI( void )
|
||||
glAPI->PopClientAttrib = __indirect_glPopClientAttrib;
|
||||
glAPI->PushClientAttrib = __indirect_glPushClientAttrib;
|
||||
|
||||
/* GL_VERSION_1_2 */
|
||||
/* 1.2 */
|
||||
|
||||
glAPI->BlendColor = __indirect_glBlendColor;
|
||||
glAPI->BlendEquation = __indirect_glBlendEquation;
|
||||
@@ -455,18 +455,8 @@ __GLapi * __glXNewIndirectAPI( void )
|
||||
glAPI->TexSubImage3D = __indirect_glTexSubImage3D;
|
||||
glAPI->CopyTexSubImage3D = __indirect_glCopyTexSubImage3D;
|
||||
|
||||
/* GL_ARB_multitexture */
|
||||
/* 1. GL_ARB_multitexture */
|
||||
|
||||
glAPI->ActiveTextureARB = __indirect_glActiveTextureARB;
|
||||
glAPI->ClientActiveTextureARB = __indirect_glClientActiveTextureARB;
|
||||
glAPI->MultiTexCoord1dARB = __indirect_glMultiTexCoord1dARB;
|
||||
glAPI->MultiTexCoord1dvARB = __indirect_glMultiTexCoord1dvARB;
|
||||
glAPI->MultiTexCoord1fARB = __indirect_glMultiTexCoord1fARB;
|
||||
glAPI->MultiTexCoord1fvARB = __indirect_glMultiTexCoord1fvARB;
|
||||
glAPI->MultiTexCoord1iARB = __indirect_glMultiTexCoord1iARB;
|
||||
glAPI->MultiTexCoord1ivARB = __indirect_glMultiTexCoord1ivARB;
|
||||
glAPI->MultiTexCoord1sARB = __indirect_glMultiTexCoord1sARB;
|
||||
glAPI->MultiTexCoord1svARB = __indirect_glMultiTexCoord1svARB;
|
||||
glAPI->MultiTexCoord2dARB = __indirect_glMultiTexCoord2dARB;
|
||||
glAPI->MultiTexCoord2dvARB = __indirect_glMultiTexCoord2dvARB;
|
||||
glAPI->MultiTexCoord2fARB = __indirect_glMultiTexCoord2fARB;
|
||||
@@ -491,79 +481,29 @@ __GLapi * __glXNewIndirectAPI( void )
|
||||
glAPI->MultiTexCoord4ivARB = __indirect_glMultiTexCoord4ivARB;
|
||||
glAPI->MultiTexCoord4sARB = __indirect_glMultiTexCoord4sARB;
|
||||
glAPI->MultiTexCoord4svARB = __indirect_glMultiTexCoord4svARB;
|
||||
glAPI->ActiveTextureARB = __indirect_glActiveTextureARB;
|
||||
glAPI->ClientActiveTextureARB = __indirect_glClientActiveTextureARB;
|
||||
glAPI->MultiTexCoord1dARB = __indirect_glMultiTexCoord1dARB;
|
||||
glAPI->MultiTexCoord1dvARB = __indirect_glMultiTexCoord1dvARB;
|
||||
glAPI->MultiTexCoord1fARB = __indirect_glMultiTexCoord1fARB;
|
||||
glAPI->MultiTexCoord1fvARB = __indirect_glMultiTexCoord1fvARB;
|
||||
glAPI->MultiTexCoord1iARB = __indirect_glMultiTexCoord1iARB;
|
||||
glAPI->MultiTexCoord1ivARB = __indirect_glMultiTexCoord1ivARB;
|
||||
glAPI->MultiTexCoord1sARB = __indirect_glMultiTexCoord1sARB;
|
||||
glAPI->MultiTexCoord1svARB = __indirect_glMultiTexCoord1svARB;
|
||||
|
||||
/* GL_ARB_transpose_matrix */
|
||||
/* 3. GL_ARB_transpose_matrix */
|
||||
|
||||
glAPI->LoadTransposeMatrixfARB = __indirect_glLoadTransposeMatrixfARB;
|
||||
glAPI->LoadTransposeMatrixdARB = __indirect_glLoadTransposeMatrixdARB;
|
||||
glAPI->MultTransposeMatrixfARB = __indirect_glMultTransposeMatrixfARB;
|
||||
glAPI->MultTransposeMatrixdARB = __indirect_glMultTransposeMatrixdARB;
|
||||
|
||||
/* GL_ARB_multisample */
|
||||
/* 5. GL_ARB_multisample */
|
||||
|
||||
glAPI->SampleCoverageARB = __indirect_glSampleCoverageARB;
|
||||
|
||||
/* GL_ARB_draw_buffers */
|
||||
|
||||
glAPI->DrawBuffersARB = __indirect_glDrawBuffersARB;
|
||||
|
||||
/* GL_EXT_texture_object */
|
||||
|
||||
glAPI->AreTexturesResidentEXT = __indirect_glAreTexturesResidentEXT;
|
||||
glAPI->GenTexturesEXT = __indirect_glGenTexturesEXT;
|
||||
glAPI->IsTextureEXT = __indirect_glIsTextureEXT;
|
||||
|
||||
/* GL_SGIS_multisample */
|
||||
|
||||
glAPI->SampleMaskSGIS = __indirect_glSampleMaskSGIS;
|
||||
glAPI->SamplePatternSGIS = __indirect_glSamplePatternSGIS;
|
||||
|
||||
/* GL_EXT_vertex_array */
|
||||
|
||||
glAPI->ColorPointerEXT = __indirect_glColorPointerEXT;
|
||||
glAPI->EdgeFlagPointerEXT = __indirect_glEdgeFlagPointerEXT;
|
||||
glAPI->IndexPointerEXT = __indirect_glIndexPointerEXT;
|
||||
glAPI->NormalPointerEXT = __indirect_glNormalPointerEXT;
|
||||
glAPI->TexCoordPointerEXT = __indirect_glTexCoordPointerEXT;
|
||||
glAPI->VertexPointerEXT = __indirect_glVertexPointerEXT;
|
||||
|
||||
/* GL_EXT_point_parameters */
|
||||
|
||||
glAPI->PointParameterfEXT = __indirect_glPointParameterfEXT;
|
||||
glAPI->PointParameterfvEXT = __indirect_glPointParameterfvEXT;
|
||||
|
||||
/* GL_MESA_window_pos */
|
||||
|
||||
glAPI->WindowPos2dMESA = __indirect_glWindowPos2dMESA;
|
||||
glAPI->WindowPos2dvMESA = __indirect_glWindowPos2dvMESA;
|
||||
glAPI->WindowPos2fMESA = __indirect_glWindowPos2fMESA;
|
||||
glAPI->WindowPos2fvMESA = __indirect_glWindowPos2fvMESA;
|
||||
glAPI->WindowPos2iMESA = __indirect_glWindowPos2iMESA;
|
||||
glAPI->WindowPos2ivMESA = __indirect_glWindowPos2ivMESA;
|
||||
glAPI->WindowPos2sMESA = __indirect_glWindowPos2sMESA;
|
||||
glAPI->WindowPos2svMESA = __indirect_glWindowPos2svMESA;
|
||||
glAPI->WindowPos3dMESA = __indirect_glWindowPos3dMESA;
|
||||
glAPI->WindowPos3dvMESA = __indirect_glWindowPos3dvMESA;
|
||||
glAPI->WindowPos3fMESA = __indirect_glWindowPos3fMESA;
|
||||
glAPI->WindowPos3fvMESA = __indirect_glWindowPos3fvMESA;
|
||||
glAPI->WindowPos3iMESA = __indirect_glWindowPos3iMESA;
|
||||
glAPI->WindowPos3ivMESA = __indirect_glWindowPos3ivMESA;
|
||||
glAPI->WindowPos3sMESA = __indirect_glWindowPos3sMESA;
|
||||
glAPI->WindowPos3svMESA = __indirect_glWindowPos3svMESA;
|
||||
|
||||
/* GL_EXT_blend_func_separate */
|
||||
|
||||
glAPI->BlendFuncSeparateEXT = __indirect_glBlendFuncSeparateEXT;
|
||||
|
||||
/* GL_EXT_fog_coord */
|
||||
|
||||
glAPI->FogCoordfEXT = __indirect_glFogCoordfEXT;
|
||||
glAPI->FogCoordfvEXT = __indirect_glFogCoordfvEXT;
|
||||
glAPI->FogCoorddEXT = __indirect_glFogCoorddEXT;
|
||||
glAPI->FogCoorddvEXT = __indirect_glFogCoorddvEXT;
|
||||
glAPI->FogCoordPointerEXT = __indirect_glFogCoordPointerEXT;
|
||||
|
||||
/* GL_ARB_texture_compression */
|
||||
/* 12. GL_ARB_texture_compression */
|
||||
|
||||
glAPI->CompressedTexImage3DARB = __indirect_glCompressedTexImage3DARB;
|
||||
glAPI->CompressedTexImage2DARB = __indirect_glCompressedTexImage2DARB;
|
||||
@@ -573,120 +513,7 @@ __GLapi * __glXNewIndirectAPI( void )
|
||||
glAPI->CompressedTexSubImage1DARB = __indirect_glCompressedTexSubImage1DARB;
|
||||
glAPI->GetCompressedTexImageARB = __indirect_glGetCompressedTexImageARB;
|
||||
|
||||
/* GL_EXT_secondary_color */
|
||||
|
||||
glAPI->SecondaryColor3bEXT = __indirect_glSecondaryColor3bEXT;
|
||||
glAPI->SecondaryColor3bvEXT = __indirect_glSecondaryColor3bvEXT;
|
||||
glAPI->SecondaryColor3dEXT = __indirect_glSecondaryColor3dEXT;
|
||||
glAPI->SecondaryColor3dvEXT = __indirect_glSecondaryColor3dvEXT;
|
||||
glAPI->SecondaryColor3fEXT = __indirect_glSecondaryColor3fEXT;
|
||||
glAPI->SecondaryColor3fvEXT = __indirect_glSecondaryColor3fvEXT;
|
||||
glAPI->SecondaryColor3iEXT = __indirect_glSecondaryColor3iEXT;
|
||||
glAPI->SecondaryColor3ivEXT = __indirect_glSecondaryColor3ivEXT;
|
||||
glAPI->SecondaryColor3sEXT = __indirect_glSecondaryColor3sEXT;
|
||||
glAPI->SecondaryColor3svEXT = __indirect_glSecondaryColor3svEXT;
|
||||
glAPI->SecondaryColor3ubEXT = __indirect_glSecondaryColor3ubEXT;
|
||||
glAPI->SecondaryColor3ubvEXT = __indirect_glSecondaryColor3ubvEXT;
|
||||
glAPI->SecondaryColor3uiEXT = __indirect_glSecondaryColor3uiEXT;
|
||||
glAPI->SecondaryColor3uivEXT = __indirect_glSecondaryColor3uivEXT;
|
||||
glAPI->SecondaryColor3usEXT = __indirect_glSecondaryColor3usEXT;
|
||||
glAPI->SecondaryColor3usvEXT = __indirect_glSecondaryColor3usvEXT;
|
||||
glAPI->SecondaryColorPointerEXT = __indirect_glSecondaryColorPointerEXT;
|
||||
|
||||
/* GL_NV_vertex_program */
|
||||
|
||||
glAPI->AreProgramsResidentNV = __indirect_glAreProgramsResidentNV;
|
||||
glAPI->BindProgramNV = __indirect_glBindProgramNV;
|
||||
glAPI->DeleteProgramsNV = __indirect_glDeleteProgramsNV;
|
||||
glAPI->ExecuteProgramNV = __indirect_glExecuteProgramNV;
|
||||
glAPI->GenProgramsNV = __indirect_glGenProgramsNV;
|
||||
glAPI->GetProgramParameterdvNV = __indirect_glGetProgramParameterdvNV;
|
||||
glAPI->GetProgramParameterfvNV = __indirect_glGetProgramParameterfvNV;
|
||||
glAPI->GetProgramivNV = __indirect_glGetProgramivNV;
|
||||
glAPI->GetProgramStringNV = __indirect_glGetProgramStringNV;
|
||||
glAPI->GetTrackMatrixivNV = __indirect_glGetTrackMatrixivNV;
|
||||
|
||||
/* GL_ARB_vertex_program */
|
||||
|
||||
glAPI->GetVertexAttribdvARB = __indirect_glGetVertexAttribdvARB;
|
||||
glAPI->GetVertexAttribfvARB = __indirect_glGetVertexAttribfvARB;
|
||||
glAPI->GetVertexAttribivARB = __indirect_glGetVertexAttribivARB;
|
||||
|
||||
/* GL_NV_vertex_program */
|
||||
|
||||
glAPI->GetVertexAttribPointervNV = __indirect_glGetVertexAttribPointervNV;
|
||||
glAPI->IsProgramNV = __indirect_glIsProgramNV;
|
||||
glAPI->LoadProgramNV = __indirect_glLoadProgramNV;
|
||||
glAPI->ProgramParameter4dNV = __indirect_glProgramParameter4dNV;
|
||||
glAPI->ProgramParameter4dvNV = __indirect_glProgramParameter4dvNV;
|
||||
glAPI->ProgramParameter4fNV = __indirect_glProgramParameter4fNV;
|
||||
glAPI->ProgramParameter4fvNV = __indirect_glProgramParameter4fvNV;
|
||||
glAPI->ProgramParameters4dvNV = __indirect_glProgramParameters4dvNV;
|
||||
glAPI->ProgramParameters4fvNV = __indirect_glProgramParameters4fvNV;
|
||||
glAPI->RequestResidentProgramsNV = __indirect_glRequestResidentProgramsNV;
|
||||
glAPI->TrackMatrixNV = __indirect_glTrackMatrixNV;
|
||||
glAPI->VertexAttribPointerNV = __indirect_glVertexAttribPointerNV;
|
||||
|
||||
/* GL_ARB_vertex_program */
|
||||
|
||||
glAPI->VertexAttrib1dARB = __indirect_glVertexAttrib1dARB;
|
||||
glAPI->VertexAttrib1dvARB = __indirect_glVertexAttrib1dvARB;
|
||||
glAPI->VertexAttrib1fARB = __indirect_glVertexAttrib1fARB;
|
||||
glAPI->VertexAttrib1fvARB = __indirect_glVertexAttrib1fvARB;
|
||||
glAPI->VertexAttrib1sARB = __indirect_glVertexAttrib1sARB;
|
||||
glAPI->VertexAttrib1svARB = __indirect_glVertexAttrib1svARB;
|
||||
glAPI->VertexAttrib2dARB = __indirect_glVertexAttrib2dARB;
|
||||
glAPI->VertexAttrib2dvARB = __indirect_glVertexAttrib2dvARB;
|
||||
glAPI->VertexAttrib2fARB = __indirect_glVertexAttrib2fARB;
|
||||
glAPI->VertexAttrib2fvARB = __indirect_glVertexAttrib2fvARB;
|
||||
glAPI->VertexAttrib2sARB = __indirect_glVertexAttrib2sARB;
|
||||
glAPI->VertexAttrib2svARB = __indirect_glVertexAttrib2svARB;
|
||||
glAPI->VertexAttrib3dARB = __indirect_glVertexAttrib3dARB;
|
||||
glAPI->VertexAttrib3dvARB = __indirect_glVertexAttrib3dvARB;
|
||||
glAPI->VertexAttrib3fARB = __indirect_glVertexAttrib3fARB;
|
||||
glAPI->VertexAttrib3fvARB = __indirect_glVertexAttrib3fvARB;
|
||||
glAPI->VertexAttrib3sARB = __indirect_glVertexAttrib3sARB;
|
||||
glAPI->VertexAttrib3svARB = __indirect_glVertexAttrib3svARB;
|
||||
glAPI->VertexAttrib4dARB = __indirect_glVertexAttrib4dARB;
|
||||
glAPI->VertexAttrib4dvARB = __indirect_glVertexAttrib4dvARB;
|
||||
glAPI->VertexAttrib4fARB = __indirect_glVertexAttrib4fARB;
|
||||
glAPI->VertexAttrib4fvARB = __indirect_glVertexAttrib4fvARB;
|
||||
glAPI->VertexAttrib4sARB = __indirect_glVertexAttrib4sARB;
|
||||
glAPI->VertexAttrib4svARB = __indirect_glVertexAttrib4svARB;
|
||||
glAPI->VertexAttrib4NubARB = __indirect_glVertexAttrib4NubARB;
|
||||
glAPI->VertexAttrib4NubvARB = __indirect_glVertexAttrib4NubvARB;
|
||||
|
||||
/* GL_NV_vertex_program */
|
||||
|
||||
glAPI->VertexAttribs1dvNV = __indirect_glVertexAttribs1dvNV;
|
||||
glAPI->VertexAttribs1fvNV = __indirect_glVertexAttribs1fvNV;
|
||||
glAPI->VertexAttribs1svNV = __indirect_glVertexAttribs1svNV;
|
||||
glAPI->VertexAttribs2dvNV = __indirect_glVertexAttribs2dvNV;
|
||||
glAPI->VertexAttribs2fvNV = __indirect_glVertexAttribs2fvNV;
|
||||
glAPI->VertexAttribs2svNV = __indirect_glVertexAttribs2svNV;
|
||||
glAPI->VertexAttribs3dvNV = __indirect_glVertexAttribs3dvNV;
|
||||
glAPI->VertexAttribs3fvNV = __indirect_glVertexAttribs3fvNV;
|
||||
glAPI->VertexAttribs3svNV = __indirect_glVertexAttribs3svNV;
|
||||
glAPI->VertexAttribs4dvNV = __indirect_glVertexAttribs4dvNV;
|
||||
glAPI->VertexAttribs4fvNV = __indirect_glVertexAttribs4fvNV;
|
||||
glAPI->VertexAttribs4svNV = __indirect_glVertexAttribs4svNV;
|
||||
glAPI->VertexAttribs4ubvNV = __indirect_glVertexAttribs4ubvNV;
|
||||
|
||||
/* GL_NV_point_sprite */
|
||||
|
||||
glAPI->PointParameteriNV = __indirect_glPointParameteriNV;
|
||||
glAPI->PointParameterivNV = __indirect_glPointParameterivNV;
|
||||
|
||||
/* GL_EXT_multi_draw_arrays */
|
||||
|
||||
glAPI->MultiDrawArraysEXT = __indirect_glMultiDrawArraysEXT;
|
||||
glAPI->MultiDrawElementsEXT = __indirect_glMultiDrawElementsEXT;
|
||||
|
||||
/* GL_EXT_stencil_two_side */
|
||||
|
||||
glAPI->ActiveStencilFaceEXT = __indirect_glActiveStencilFaceEXT;
|
||||
|
||||
/* GL_ARB_vertex_program */
|
||||
/* 26. GL_ARB_vertex_program */
|
||||
|
||||
glAPI->VertexAttrib4bvARB = __indirect_glVertexAttrib4bvARB;
|
||||
glAPI->VertexAttrib4ivARB = __indirect_glVertexAttrib4ivARB;
|
||||
@@ -716,8 +543,209 @@ __GLapi * __glXNewIndirectAPI( void )
|
||||
glAPI->GetProgramLocalParameterfvARB = __indirect_glGetProgramLocalParameterfvARB;
|
||||
glAPI->GetProgramivARB = __indirect_glGetProgramivARB;
|
||||
glAPI->GetProgramStringARB = __indirect_glGetProgramStringARB;
|
||||
glAPI->GetVertexAttribdvARB = __indirect_glGetVertexAttribdvARB;
|
||||
glAPI->GetVertexAttribfvARB = __indirect_glGetVertexAttribfvARB;
|
||||
glAPI->GetVertexAttribivARB = __indirect_glGetVertexAttribivARB;
|
||||
glAPI->VertexAttrib1dARB = __indirect_glVertexAttrib1dARB;
|
||||
glAPI->VertexAttrib1dvARB = __indirect_glVertexAttrib1dvARB;
|
||||
glAPI->VertexAttrib1fARB = __indirect_glVertexAttrib1fARB;
|
||||
glAPI->VertexAttrib1fvARB = __indirect_glVertexAttrib1fvARB;
|
||||
glAPI->VertexAttrib1sARB = __indirect_glVertexAttrib1sARB;
|
||||
glAPI->VertexAttrib1svARB = __indirect_glVertexAttrib1svARB;
|
||||
glAPI->VertexAttrib2dARB = __indirect_glVertexAttrib2dARB;
|
||||
glAPI->VertexAttrib2dvARB = __indirect_glVertexAttrib2dvARB;
|
||||
glAPI->VertexAttrib2fARB = __indirect_glVertexAttrib2fARB;
|
||||
glAPI->VertexAttrib2fvARB = __indirect_glVertexAttrib2fvARB;
|
||||
glAPI->VertexAttrib2sARB = __indirect_glVertexAttrib2sARB;
|
||||
glAPI->VertexAttrib2svARB = __indirect_glVertexAttrib2svARB;
|
||||
glAPI->VertexAttrib3dARB = __indirect_glVertexAttrib3dARB;
|
||||
glAPI->VertexAttrib3dvARB = __indirect_glVertexAttrib3dvARB;
|
||||
glAPI->VertexAttrib3fARB = __indirect_glVertexAttrib3fARB;
|
||||
glAPI->VertexAttrib3fvARB = __indirect_glVertexAttrib3fvARB;
|
||||
glAPI->VertexAttrib3sARB = __indirect_glVertexAttrib3sARB;
|
||||
glAPI->VertexAttrib3svARB = __indirect_glVertexAttrib3svARB;
|
||||
glAPI->VertexAttrib4dARB = __indirect_glVertexAttrib4dARB;
|
||||
glAPI->VertexAttrib4dvARB = __indirect_glVertexAttrib4dvARB;
|
||||
glAPI->VertexAttrib4fARB = __indirect_glVertexAttrib4fARB;
|
||||
glAPI->VertexAttrib4fvARB = __indirect_glVertexAttrib4fvARB;
|
||||
glAPI->VertexAttrib4sARB = __indirect_glVertexAttrib4sARB;
|
||||
glAPI->VertexAttrib4svARB = __indirect_glVertexAttrib4svARB;
|
||||
glAPI->VertexAttrib4NubARB = __indirect_glVertexAttrib4NubARB;
|
||||
glAPI->VertexAttrib4NubvARB = __indirect_glVertexAttrib4NubvARB;
|
||||
|
||||
/* GL_NV_fragment_program */
|
||||
/* 29. GL_ARB_occlusion_query */
|
||||
|
||||
glAPI->EndQueryARB = __indirect_glEndQueryARB;
|
||||
glAPI->GetQueryivARB = __indirect_glGetQueryivARB;
|
||||
glAPI->GetQueryObjectivARB = __indirect_glGetQueryObjectivARB;
|
||||
glAPI->GetQueryObjectuivARB = __indirect_glGetQueryObjectuivARB;
|
||||
glAPI->GenQueriesARB = __indirect_glGenQueriesARB;
|
||||
glAPI->DeleteQueriesARB = __indirect_glDeleteQueriesARB;
|
||||
glAPI->IsQueryARB = __indirect_glIsQueryARB;
|
||||
glAPI->BeginQueryARB = __indirect_glBeginQueryARB;
|
||||
|
||||
/* 37. GL_ARB_draw_buffers */
|
||||
|
||||
glAPI->DrawBuffersARB = __indirect_glDrawBuffersARB;
|
||||
|
||||
/* 20. GL_EXT_texture_object */
|
||||
|
||||
glAPI->GenTexturesEXT = __indirect_glGenTexturesEXT;
|
||||
glAPI->IsTextureEXT = __indirect_glIsTextureEXT;
|
||||
glAPI->AreTexturesResidentEXT = __indirect_glAreTexturesResidentEXT;
|
||||
|
||||
/* 25. GL_SGIS_multisample */
|
||||
|
||||
glAPI->SampleMaskSGIS = __indirect_glSampleMaskSGIS;
|
||||
glAPI->SamplePatternSGIS = __indirect_glSamplePatternSGIS;
|
||||
|
||||
/* 30. GL_EXT_vertex_array */
|
||||
|
||||
glAPI->ColorPointerEXT = __indirect_glColorPointerEXT;
|
||||
glAPI->EdgeFlagPointerEXT = __indirect_glEdgeFlagPointerEXT;
|
||||
glAPI->IndexPointerEXT = __indirect_glIndexPointerEXT;
|
||||
glAPI->NormalPointerEXT = __indirect_glNormalPointerEXT;
|
||||
glAPI->TexCoordPointerEXT = __indirect_glTexCoordPointerEXT;
|
||||
glAPI->VertexPointerEXT = __indirect_glVertexPointerEXT;
|
||||
|
||||
/* 54. GL_EXT_point_parameters */
|
||||
|
||||
glAPI->PointParameterfEXT = __indirect_glPointParameterfEXT;
|
||||
glAPI->PointParameterfvEXT = __indirect_glPointParameterfvEXT;
|
||||
|
||||
/* 145. GL_EXT_secondary_color */
|
||||
|
||||
glAPI->SecondaryColor3usvEXT = __indirect_glSecondaryColor3usvEXT;
|
||||
glAPI->SecondaryColorPointerEXT = __indirect_glSecondaryColorPointerEXT;
|
||||
glAPI->SecondaryColor3bEXT = __indirect_glSecondaryColor3bEXT;
|
||||
glAPI->SecondaryColor3bvEXT = __indirect_glSecondaryColor3bvEXT;
|
||||
glAPI->SecondaryColor3dEXT = __indirect_glSecondaryColor3dEXT;
|
||||
glAPI->SecondaryColor3dvEXT = __indirect_glSecondaryColor3dvEXT;
|
||||
glAPI->SecondaryColor3fEXT = __indirect_glSecondaryColor3fEXT;
|
||||
glAPI->SecondaryColor3fvEXT = __indirect_glSecondaryColor3fvEXT;
|
||||
glAPI->SecondaryColor3iEXT = __indirect_glSecondaryColor3iEXT;
|
||||
glAPI->SecondaryColor3ivEXT = __indirect_glSecondaryColor3ivEXT;
|
||||
glAPI->SecondaryColor3sEXT = __indirect_glSecondaryColor3sEXT;
|
||||
glAPI->SecondaryColor3svEXT = __indirect_glSecondaryColor3svEXT;
|
||||
glAPI->SecondaryColor3ubEXT = __indirect_glSecondaryColor3ubEXT;
|
||||
glAPI->SecondaryColor3ubvEXT = __indirect_glSecondaryColor3ubvEXT;
|
||||
glAPI->SecondaryColor3uiEXT = __indirect_glSecondaryColor3uiEXT;
|
||||
glAPI->SecondaryColor3uivEXT = __indirect_glSecondaryColor3uivEXT;
|
||||
glAPI->SecondaryColor3usEXT = __indirect_glSecondaryColor3usEXT;
|
||||
|
||||
/* 148. GL_EXT_multi_draw_arrays */
|
||||
|
||||
glAPI->MultiDrawArraysEXT = __indirect_glMultiDrawArraysEXT;
|
||||
glAPI->MultiDrawElementsEXT = __indirect_glMultiDrawElementsEXT;
|
||||
|
||||
/* 149. GL_EXT_fog_coord */
|
||||
|
||||
glAPI->FogCoordfEXT = __indirect_glFogCoordfEXT;
|
||||
glAPI->FogCoordfvEXT = __indirect_glFogCoordfvEXT;
|
||||
glAPI->FogCoorddEXT = __indirect_glFogCoorddEXT;
|
||||
glAPI->FogCoorddvEXT = __indirect_glFogCoorddvEXT;
|
||||
glAPI->FogCoordPointerEXT = __indirect_glFogCoordPointerEXT;
|
||||
|
||||
/* 173. GL_EXT_blend_func_separate */
|
||||
|
||||
glAPI->BlendFuncSeparateEXT = __indirect_glBlendFuncSeparateEXT;
|
||||
|
||||
/* 197. GL_MESA_window_pos */
|
||||
|
||||
glAPI->WindowPos2dMESA = __indirect_glWindowPos2dMESA;
|
||||
glAPI->WindowPos2dvMESA = __indirect_glWindowPos2dvMESA;
|
||||
glAPI->WindowPos2fMESA = __indirect_glWindowPos2fMESA;
|
||||
glAPI->WindowPos2fvMESA = __indirect_glWindowPos2fvMESA;
|
||||
glAPI->WindowPos2iMESA = __indirect_glWindowPos2iMESA;
|
||||
glAPI->WindowPos2ivMESA = __indirect_glWindowPos2ivMESA;
|
||||
glAPI->WindowPos2sMESA = __indirect_glWindowPos2sMESA;
|
||||
glAPI->WindowPos2svMESA = __indirect_glWindowPos2svMESA;
|
||||
glAPI->WindowPos3dMESA = __indirect_glWindowPos3dMESA;
|
||||
glAPI->WindowPos3dvMESA = __indirect_glWindowPos3dvMESA;
|
||||
glAPI->WindowPos3fMESA = __indirect_glWindowPos3fMESA;
|
||||
glAPI->WindowPos3fvMESA = __indirect_glWindowPos3fvMESA;
|
||||
glAPI->WindowPos3iMESA = __indirect_glWindowPos3iMESA;
|
||||
glAPI->WindowPos3ivMESA = __indirect_glWindowPos3ivMESA;
|
||||
glAPI->WindowPos3sMESA = __indirect_glWindowPos3sMESA;
|
||||
glAPI->WindowPos3svMESA = __indirect_glWindowPos3svMESA;
|
||||
|
||||
/* 233. GL_NV_vertex_program */
|
||||
|
||||
glAPI->VertexAttribs4svNV = __indirect_glVertexAttribs4svNV;
|
||||
glAPI->VertexAttribs4ubvNV = __indirect_glVertexAttribs4ubvNV;
|
||||
glAPI->VertexAttrib3fNV = __indirect_glVertexAttrib3fNV;
|
||||
glAPI->VertexAttrib3fvNV = __indirect_glVertexAttrib3fvNV;
|
||||
glAPI->VertexAttrib3sNV = __indirect_glVertexAttrib3sNV;
|
||||
glAPI->VertexAttrib3svNV = __indirect_glVertexAttrib3svNV;
|
||||
glAPI->VertexAttrib4dNV = __indirect_glVertexAttrib4dNV;
|
||||
glAPI->VertexAttrib3dvNV = __indirect_glVertexAttrib3dvNV;
|
||||
glAPI->VertexAttrib4fNV = __indirect_glVertexAttrib4fNV;
|
||||
glAPI->VertexAttrib4fvNV = __indirect_glVertexAttrib4fvNV;
|
||||
glAPI->VertexAttrib4sNV = __indirect_glVertexAttrib4sNV;
|
||||
glAPI->VertexAttrib4svNV = __indirect_glVertexAttrib4svNV;
|
||||
glAPI->VertexAttrib4ubNV = __indirect_glVertexAttrib4ubNV;
|
||||
glAPI->VertexAttrib4ubvNV = __indirect_glVertexAttrib4ubvNV;
|
||||
glAPI->VertexAttrib1fvNV = __indirect_glVertexAttrib1fvNV;
|
||||
glAPI->VertexAttrib3dNV = __indirect_glVertexAttrib3dNV;
|
||||
glAPI->VertexAttrib4dvNV = __indirect_glVertexAttrib4dvNV;
|
||||
glAPI->VertexAttrib1sNV = __indirect_glVertexAttrib1sNV;
|
||||
glAPI->VertexAttrib1fNV = __indirect_glVertexAttrib1fNV;
|
||||
glAPI->VertexAttrib1svNV = __indirect_glVertexAttrib1svNV;
|
||||
glAPI->VertexAttrib1dvNV = __indirect_glVertexAttrib1dvNV;
|
||||
glAPI->AreProgramsResidentNV = __indirect_glAreProgramsResidentNV;
|
||||
glAPI->BindProgramNV = __indirect_glBindProgramNV;
|
||||
glAPI->DeleteProgramsNV = __indirect_glDeleteProgramsNV;
|
||||
glAPI->ExecuteProgramNV = __indirect_glExecuteProgramNV;
|
||||
glAPI->GenProgramsNV = __indirect_glGenProgramsNV;
|
||||
glAPI->GetProgramParameterdvNV = __indirect_glGetProgramParameterdvNV;
|
||||
glAPI->GetProgramParameterfvNV = __indirect_glGetProgramParameterfvNV;
|
||||
glAPI->GetProgramivNV = __indirect_glGetProgramivNV;
|
||||
glAPI->GetProgramStringNV = __indirect_glGetProgramStringNV;
|
||||
glAPI->GetTrackMatrixivNV = __indirect_glGetTrackMatrixivNV;
|
||||
glAPI->GetVertexAttribPointervNV = __indirect_glGetVertexAttribPointervNV;
|
||||
glAPI->IsProgramNV = __indirect_glIsProgramNV;
|
||||
glAPI->LoadProgramNV = __indirect_glLoadProgramNV;
|
||||
glAPI->ProgramParameter4dNV = __indirect_glProgramParameter4dNV;
|
||||
glAPI->ProgramParameter4dvNV = __indirect_glProgramParameter4dvNV;
|
||||
glAPI->ProgramParameter4fNV = __indirect_glProgramParameter4fNV;
|
||||
glAPI->ProgramParameter4fvNV = __indirect_glProgramParameter4fvNV;
|
||||
glAPI->ProgramParameters4dvNV = __indirect_glProgramParameters4dvNV;
|
||||
glAPI->ProgramParameters4fvNV = __indirect_glProgramParameters4fvNV;
|
||||
glAPI->RequestResidentProgramsNV = __indirect_glRequestResidentProgramsNV;
|
||||
glAPI->TrackMatrixNV = __indirect_glTrackMatrixNV;
|
||||
glAPI->VertexAttribPointerNV = __indirect_glVertexAttribPointerNV;
|
||||
glAPI->VertexAttrib2dNV = __indirect_glVertexAttrib2dNV;
|
||||
glAPI->VertexAttrib2sNV = __indirect_glVertexAttrib2sNV;
|
||||
glAPI->VertexAttrib2dvNV = __indirect_glVertexAttrib2dvNV;
|
||||
glAPI->VertexAttrib2fNV = __indirect_glVertexAttrib2fNV;
|
||||
glAPI->VertexAttrib2svNV = __indirect_glVertexAttrib2svNV;
|
||||
glAPI->VertexAttrib2fvNV = __indirect_glVertexAttrib2fvNV;
|
||||
glAPI->GetVertexAttribdvNV = __indirect_glGetVertexAttribdvNV;
|
||||
glAPI->GetVertexAttribfvNV = __indirect_glGetVertexAttribfvNV;
|
||||
glAPI->GetVertexAttribivNV = __indirect_glGetVertexAttribivNV;
|
||||
glAPI->VertexAttrib1dNV = __indirect_glVertexAttrib1dNV;
|
||||
glAPI->VertexAttribs1dvNV = __indirect_glVertexAttribs1dvNV;
|
||||
glAPI->VertexAttribs1fvNV = __indirect_glVertexAttribs1fvNV;
|
||||
glAPI->VertexAttribs1svNV = __indirect_glVertexAttribs1svNV;
|
||||
glAPI->VertexAttribs2dvNV = __indirect_glVertexAttribs2dvNV;
|
||||
glAPI->VertexAttribs2fvNV = __indirect_glVertexAttribs2fvNV;
|
||||
glAPI->VertexAttribs2svNV = __indirect_glVertexAttribs2svNV;
|
||||
glAPI->VertexAttribs3dvNV = __indirect_glVertexAttribs3dvNV;
|
||||
glAPI->VertexAttribs3fvNV = __indirect_glVertexAttribs3fvNV;
|
||||
glAPI->VertexAttribs3svNV = __indirect_glVertexAttribs3svNV;
|
||||
glAPI->VertexAttribs4dvNV = __indirect_glVertexAttribs4dvNV;
|
||||
glAPI->VertexAttribs4fvNV = __indirect_glVertexAttribs4fvNV;
|
||||
|
||||
/* 262. GL_NV_point_sprite */
|
||||
|
||||
glAPI->PointParameteriNV = __indirect_glPointParameteriNV;
|
||||
glAPI->PointParameterivNV = __indirect_glPointParameterivNV;
|
||||
|
||||
/* 268. GL_EXT_stencil_two_side */
|
||||
|
||||
glAPI->ActiveStencilFaceEXT = __indirect_glActiveStencilFaceEXT;
|
||||
|
||||
/* 282. GL_NV_fragment_program */
|
||||
|
||||
glAPI->ProgramNamedParameter4fNV = __indirect_glProgramNamedParameter4fNV;
|
||||
glAPI->ProgramNamedParameter4dNV = __indirect_glProgramNamedParameter4dNV;
|
||||
@@ -726,48 +754,25 @@ __GLapi * __glXNewIndirectAPI( void )
|
||||
glAPI->GetProgramNamedParameterfvNV = __indirect_glGetProgramNamedParameterfvNV;
|
||||
glAPI->GetProgramNamedParameterdvNV = __indirect_glGetProgramNamedParameterdvNV;
|
||||
|
||||
/* GL_ARB_occlusion_query */
|
||||
/* 310. GL_EXT_framebuffer_object */
|
||||
|
||||
glAPI->GenQueriesARB = __indirect_glGenQueriesARB;
|
||||
glAPI->DeleteQueriesARB = __indirect_glDeleteQueriesARB;
|
||||
glAPI->IsQueryARB = __indirect_glIsQueryARB;
|
||||
glAPI->BeginQueryARB = __indirect_glBeginQueryARB;
|
||||
glAPI->EndQueryARB = __indirect_glEndQueryARB;
|
||||
glAPI->GetQueryivARB = __indirect_glGetQueryivARB;
|
||||
glAPI->GetQueryObjectivARB = __indirect_glGetQueryObjectivARB;
|
||||
glAPI->GetQueryObjectuivARB = __indirect_glGetQueryObjectuivARB;
|
||||
|
||||
/* GL_NV_vertex_program */
|
||||
|
||||
glAPI->GetVertexAttribdvNV = __indirect_glGetVertexAttribdvNV;
|
||||
glAPI->GetVertexAttribfvNV = __indirect_glGetVertexAttribfvNV;
|
||||
glAPI->GetVertexAttribivNV = __indirect_glGetVertexAttribivNV;
|
||||
glAPI->VertexAttrib1dNV = __indirect_glVertexAttrib1dNV;
|
||||
glAPI->VertexAttrib1dvNV = __indirect_glVertexAttrib1dvNV;
|
||||
glAPI->VertexAttrib1fNV = __indirect_glVertexAttrib1fNV;
|
||||
glAPI->VertexAttrib1fvNV = __indirect_glVertexAttrib1fvNV;
|
||||
glAPI->VertexAttrib1sNV = __indirect_glVertexAttrib1sNV;
|
||||
glAPI->VertexAttrib1svNV = __indirect_glVertexAttrib1svNV;
|
||||
glAPI->VertexAttrib2dNV = __indirect_glVertexAttrib2dNV;
|
||||
glAPI->VertexAttrib2dvNV = __indirect_glVertexAttrib2dvNV;
|
||||
glAPI->VertexAttrib2fNV = __indirect_glVertexAttrib2fNV;
|
||||
glAPI->VertexAttrib2fvNV = __indirect_glVertexAttrib2fvNV;
|
||||
glAPI->VertexAttrib2sNV = __indirect_glVertexAttrib2sNV;
|
||||
glAPI->VertexAttrib2svNV = __indirect_glVertexAttrib2svNV;
|
||||
glAPI->VertexAttrib3dNV = __indirect_glVertexAttrib3dNV;
|
||||
glAPI->VertexAttrib3dvNV = __indirect_glVertexAttrib3dvNV;
|
||||
glAPI->VertexAttrib3fNV = __indirect_glVertexAttrib3fNV;
|
||||
glAPI->VertexAttrib3fvNV = __indirect_glVertexAttrib3fvNV;
|
||||
glAPI->VertexAttrib3sNV = __indirect_glVertexAttrib3sNV;
|
||||
glAPI->VertexAttrib3svNV = __indirect_glVertexAttrib3svNV;
|
||||
glAPI->VertexAttrib4dNV = __indirect_glVertexAttrib4dNV;
|
||||
glAPI->VertexAttrib4dvNV = __indirect_glVertexAttrib4dvNV;
|
||||
glAPI->VertexAttrib4fNV = __indirect_glVertexAttrib4fNV;
|
||||
glAPI->VertexAttrib4fvNV = __indirect_glVertexAttrib4fvNV;
|
||||
glAPI->VertexAttrib4sNV = __indirect_glVertexAttrib4sNV;
|
||||
glAPI->VertexAttrib4svNV = __indirect_glVertexAttrib4svNV;
|
||||
glAPI->VertexAttrib4ubNV = __indirect_glVertexAttrib4ubNV;
|
||||
glAPI->VertexAttrib4ubvNV = __indirect_glVertexAttrib4ubvNV;
|
||||
glAPI->RenderbufferStorageEXT = __indirect_glRenderbufferStorageEXT;
|
||||
glAPI->GetRenderbufferParameterivEXT = __indirect_glGetRenderbufferParameterivEXT;
|
||||
glAPI->IsFramebufferEXT = __indirect_glIsFramebufferEXT;
|
||||
glAPI->BindFramebufferEXT = __indirect_glBindFramebufferEXT;
|
||||
glAPI->DeleteFramebuffersEXT = __indirect_glDeleteFramebuffersEXT;
|
||||
glAPI->GenFramebuffersEXT = __indirect_glGenFramebuffersEXT;
|
||||
glAPI->CheckFramebufferStatusEXT = __indirect_glCheckFramebufferStatusEXT;
|
||||
glAPI->FramebufferTexture1DEXT = __indirect_glFramebufferTexture1DEXT;
|
||||
glAPI->FramebufferTexture2DEXT = __indirect_glFramebufferTexture2DEXT;
|
||||
glAPI->FramebufferTexture3DEXT = __indirect_glFramebufferTexture3DEXT;
|
||||
glAPI->FramebufferRenderbufferEXT = __indirect_glFramebufferRenderbufferEXT;
|
||||
glAPI->GetFramebufferAttachmentParameterivEXT = __indirect_glGetFramebufferAttachmentParameterivEXT;
|
||||
glAPI->GenerateMipmapEXT = __indirect_glGenerateMipmapEXT;
|
||||
glAPI->IsRenderbufferEXT = __indirect_glIsRenderbufferEXT;
|
||||
glAPI->BindRenderbufferEXT = __indirect_glBindRenderbufferEXT;
|
||||
glAPI->DeleteRenderbuffersEXT = __indirect_glDeleteRenderbuffersEXT;
|
||||
glAPI->GenRenderbuffersEXT = __indirect_glGenRenderbuffersEXT;
|
||||
|
||||
return glAPI;
|
||||
}
|
||||
|
||||
@@ -334,22 +334,18 @@ __glPointParameterfvEXT_size( GLenum e )
|
||||
switch( e ) {
|
||||
case GL_POINT_SIZE_MIN:
|
||||
/* case GL_POINT_SIZE_MIN_ARB:*/
|
||||
/* case GL_POINT_SIZE_MIN_EXT:*/
|
||||
/* case GL_POINT_SIZE_MIN_SGIS:*/
|
||||
case GL_POINT_SIZE_MAX:
|
||||
/* case GL_POINT_SIZE_MAX_ARB:*/
|
||||
/* case GL_POINT_SIZE_MAX_EXT:*/
|
||||
/* case GL_POINT_SIZE_MAX_SGIS:*/
|
||||
case GL_POINT_FADE_THRESHOLD_SIZE:
|
||||
/* case GL_POINT_FADE_THRESHOLD_SIZE_ARB:*/
|
||||
/* case GL_POINT_FADE_THRESHOLD_SIZE_EXT:*/
|
||||
/* case GL_POINT_FADE_THRESHOLD_SIZE_SGIS:*/
|
||||
case GL_POINT_SPRITE_R_MODE_NV:
|
||||
case GL_POINT_SPRITE_COORD_ORIGIN:
|
||||
return 1;
|
||||
case GL_POINT_DISTANCE_ATTENUATION:
|
||||
/* case GL_POINT_DISTANCE_ATTENUATION_ARB:*/
|
||||
/* case GL_POINT_DISTANCE_ATTENUATION_EXT:*/
|
||||
/* case GL_POINT_DISTANCE_ATTENUATION_SGIS:*/
|
||||
return 3;
|
||||
default: return 0;
|
||||
@@ -369,3 +365,8 @@ ALIAS( Map2f, Map2d )
|
||||
ALIAS( ColorTableParameteriv, ColorTableParameterfv )
|
||||
ALIAS( ConvolutionParameteriv, ConvolutionParameterfv )
|
||||
ALIAS( PointParameterivNV, PointParameterfvEXT )
|
||||
|
||||
# undef HAVE_ALIAS
|
||||
# undef PURE
|
||||
# undef FASTCALL
|
||||
# undef INTERNAL
|
||||
|
||||
@@ -45,7 +45,8 @@ install:
|
||||
echo "*** Installation aborted."; \
|
||||
exit 1; \
|
||||
fi;
|
||||
install -m 0755 $(DIRECTFBGL_MESA) $(DFB_MODULEDIR)/interfaces/IDirectFBGL/
|
||||
test -d $(DFB_MODULEDIR)/interfaces/IDirectFBGL/ || mkdir $(DFB_MODULEDIR)/interfaces/IDirectFBGL/
|
||||
install -m 755 $(DIRECTFBGL_MESA) $(DFB_MODULEDIR)/interfaces/IDirectFBGL/
|
||||
|
||||
|
||||
clean:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004 Claudio Ciccani <klan@users.sf.net>
|
||||
* Copyright (C) 2004-2005 Claudio Ciccani <klan@users.sf.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
@@ -38,6 +38,8 @@
|
||||
#include "buffers.h"
|
||||
#include "context.h"
|
||||
#include "extensions.h"
|
||||
#include "framebuffer.h"
|
||||
#include "renderbuffer.h"
|
||||
#include "imports.h"
|
||||
#include "texformat.h"
|
||||
#include "teximage.h"
|
||||
@@ -84,6 +86,7 @@ typedef struct {
|
||||
GLvisual visual;
|
||||
GLframebuffer framebuffer;
|
||||
GLcontext context;
|
||||
struct gl_renderbuffer render;
|
||||
} IDirectFBGL_data;
|
||||
|
||||
|
||||
@@ -93,7 +96,7 @@ static bool dfb_mesa_create_context ( GLcontext *context,
|
||||
GLframebuffer *framebuffer,
|
||||
GLvisual *visual,
|
||||
DFBSurfacePixelFormat format,
|
||||
void *data );
|
||||
IDirectFBGL_data *data );
|
||||
static void dfb_mesa_destroy_context( GLcontext *context,
|
||||
GLframebuffer *framebuffer );
|
||||
|
||||
@@ -155,6 +158,8 @@ IDirectFBGL_Lock( IDirectFBGL *thiz )
|
||||
return err;
|
||||
}
|
||||
data->video.end = data->video.start + (height-1) * data->video.pitch;
|
||||
|
||||
data->render.Data = data->video.start;
|
||||
|
||||
if (data->width != width || data->height != height) {
|
||||
data->width = width;
|
||||
@@ -248,7 +253,7 @@ Construct( IDirectFBGL *thiz,
|
||||
|
||||
/* Create context. */
|
||||
if (!dfb_mesa_create_context( &data->context, &data->framebuffer,
|
||||
&data->visual, data->format, (void*) data )) {
|
||||
&data->visual, data->format, data )) {
|
||||
D_ERROR( "DirectFBGL/Mesa: failed to create context.\n" );
|
||||
surface->Release( surface );
|
||||
return DFB_UNSUPPORTED;
|
||||
@@ -312,134 +317,144 @@ set_buffer( GLcontext *ctx, GLframebuffer *buffer, GLuint bufferBit )
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
delete_renderbuffer( struct gl_renderbuffer *render )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static GLboolean
|
||||
renderbuffer_storage( GLcontext *ctx, struct gl_renderbuffer *render,
|
||||
GLenum internalFormat, GLuint width, GLuint height )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* RGB332 */
|
||||
#define NAME(PREFIX) PREFIX##_RGB332
|
||||
#define FORMAT GL_RGBA8
|
||||
#define SPAN_VARS \
|
||||
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
|
||||
#define INIT_PIXEL_PTR(P, X, Y) \
|
||||
GLubyte *P = data->video.end - (Y) * data->video.pitch + (X)
|
||||
GLubyte *P = data->video.end - (Y) * data->video.pitch + (X);
|
||||
#define INC_PIXEL_PTR(P) P += 1
|
||||
#define STORE_RGB_PIXEL(P, X, Y, R, G, B) \
|
||||
*P = ( (((R) & 0xe0)) | (((G) & 0xe0) >> 3) | ((B) >> 6) )
|
||||
#define STORE_RGBA_PIXEL(P, X, Y, R, G, B, A) \
|
||||
*P = ( (((R) & 0xe0)) | (((G) & 0xe0) >> 3) | ((B) >> 6) )
|
||||
#define FETCH_RGBA_PIXEL(R, G, B, A, P) \
|
||||
R = ((*P & 0xe0) ); \
|
||||
G = ((*P & 0x1c) << 3); \
|
||||
B = ((*P & 0x03) << 6); \
|
||||
A = CHAN_MAX
|
||||
#define STORE_PIXEL(P, X, Y, S) \
|
||||
*P = ( (((S[RCOMP]) & 0xe0)) | (((S[GCOMP]) & 0xe0) >> 3) | ((S[BCOMP]) >> 6) )
|
||||
#define FETCH_PIXEL(D, P) \
|
||||
D[RCOMP] = ((*P & 0xe0) ); \
|
||||
D[GCOMP] = ((*P & 0x1c) << 3); \
|
||||
D[BCOMP] = ((*P & 0x03) << 6); \
|
||||
D[ACOMP] = 0xff
|
||||
|
||||
#include "swrast/s_spantemp.h"
|
||||
|
||||
/* ARGB1555 */
|
||||
#define NAME(PREFIX) PREFIX##_ARGB1555
|
||||
#define FORMAT GL_RGBA8
|
||||
#define SPAN_VARS \
|
||||
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
|
||||
#define INIT_PIXEL_PTR(P, X, Y) \
|
||||
GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2)
|
||||
GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
|
||||
#define INC_PIXEL_PTR(P) P += 1
|
||||
#define STORE_RGB_PIXEL(P, X, Y, R, G, B) \
|
||||
*P = ( (((R) & 0xf8) << 7) | (((G) & 0xf8) << 2) | ((B) >> 3) )
|
||||
#define STORE_RGBA_PIXEL(P, X, Y, R, G, B, A) \
|
||||
*P = ( (((A) & 0x80) << 8) | (((R) & 0xf8) << 7) | (((G) & 0xf8) << 2) | ((B) >> 3) )
|
||||
#define FETCH_RGBA_PIXEL(R, G, B, A, P) \
|
||||
R = ((*P & 0x7c00) >> 7); \
|
||||
G = ((*P & 0x03e0) >> 2); \
|
||||
B = ((*P & 0x001f) << 3); \
|
||||
A = ((*P & 0x8000) ? 0xff : 0)
|
||||
#define STORE_PIXEL(P, X, Y, S) \
|
||||
*P = ( (((S[RCOMP]) & 0xf8) << 7) | (((S[GCOMP]) & 0xf8) << 2) | ((S[BCOMP]) >> 3) )
|
||||
#define FETCH_PIXEL(D, P) \
|
||||
D[RCOMP] = ((*P & 0x7c00) >> 7); \
|
||||
D[GCOMP] = ((*P & 0x03e0) >> 2); \
|
||||
D[BCOMP] = ((*P & 0x001f) << 3); \
|
||||
D[ACOMP] = ((*P & 0x8000) ? 0xff : 0)
|
||||
|
||||
#include "swrast/s_spantemp.h"
|
||||
|
||||
/* RGB16 */
|
||||
#define NAME(PREFIX) PREFIX##_RGB16
|
||||
#define FORMAT GL_RGBA8
|
||||
#define SPAN_VARS \
|
||||
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
|
||||
#define INIT_PIXEL_PTR(P, X, Y) \
|
||||
GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2)
|
||||
GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
|
||||
#define INC_PIXEL_PTR(P) P += 1
|
||||
#define STORE_RGB_PIXEL(P, X, Y, R, G, B) \
|
||||
*P = ( (((R) & 0xf8) << 8) | (((G) & 0xfc) << 3) | ((B) >> 3) )
|
||||
#define STORE_RGBA_PIXEL(P, X, Y, R, G, B, A) \
|
||||
*P = ( (((R) & 0xf8) << 8) | (((G) & 0xfc) << 3) | ((B) >> 3) )
|
||||
#define FETCH_RGBA_PIXEL(R, G, B, A, P) \
|
||||
R = ((*P & 0xf800) >> 8); \
|
||||
G = ((*P & 0x07e0) >> 3); \
|
||||
B = ((*P & 0x001f) << 3); \
|
||||
A = CHAN_MAX
|
||||
#define STORE_PIXEL(P, X, Y, S) \
|
||||
*P = ( (((S[RCOMP]) & 0xf8) << 8) | (((S[GCOMP]) & 0xfc) << 3) | ((S[BCOMP]) >> 3) )
|
||||
#define FETCH_PIXEL(D, P) \
|
||||
D[RCOMP] = ((*P & 0xf800) >> 8); \
|
||||
D[GCOMP] = ((*P & 0x07e0) >> 3); \
|
||||
D[BCOMP] = ((*P & 0x001f) << 3); \
|
||||
D[ACOMP] = 0xff
|
||||
|
||||
#include "swrast/s_spantemp.h"
|
||||
|
||||
/* RGB24 */
|
||||
#define NAME(PREFIX) PREFIX##_RGB24
|
||||
#define FORMAT GL_RGBA8
|
||||
#define SPAN_VARS \
|
||||
IDirectFBGL_data *data = ctx->DriverCtx;
|
||||
#define INIT_PIXEL_PTR(P, X, Y) \
|
||||
GLubyte *P = data->video.end - (Y) * data->video.pitch + (X) * 3
|
||||
GLubyte *P = data->video.end - (Y) * data->video.pitch + (X) * 3;
|
||||
#define INC_PIXEL_PTR(P) P += 3
|
||||
#define STORE_RGB_PIXEL(P, X, Y, R, G, B) \
|
||||
P[0] = B; P[1] = G; P[2] = R
|
||||
#define STORE_RGBA_PIXEL(P, X, Y, R, G, B, A) \
|
||||
P[0] = B; P[1] = G; P[2] = R
|
||||
#define FETCH_RGBA_PIXEL(R, G, B, A, P) \
|
||||
R = P[2]; G = P[1]; B = P[0]; A = CHAN_MAX
|
||||
#define STORE_PIXEL(P, X, Y, S) \
|
||||
P[0] = S[BCOMP]; P[1] = S[GCOMP]; P[2] = S[BCOMP]
|
||||
#define FETCH_PIXEL(D, P) \
|
||||
D[RCOMP] = P[2]; D[GCOMP] = P[1]; D[BCOMP] = P[0]; D[ACOMP] = 0xff
|
||||
|
||||
#include "swrast/s_spantemp.h"
|
||||
|
||||
/* RGB32 */
|
||||
#define NAME(PREFIX) PREFIX##_RGB32
|
||||
#define FORMAT GL_RGBA8
|
||||
#define SPAN_VARS \
|
||||
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
|
||||
#define INIT_PIXEL_PTR(P, X, Y) \
|
||||
GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4)
|
||||
GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);
|
||||
#define INC_PIXEL_PTR(P) P += 1
|
||||
#define STORE_RGB_PIXEL(P, X, Y, R, G, B) \
|
||||
*P = ( ((R) << 16) | ((G) << 8) | (B) )
|
||||
#define STORE_RGBA_PIXEL(P, X, Y, R, G, B, A) \
|
||||
*P = ( ((R) << 16) | ((G) << 8) | (B) )
|
||||
#define FETCH_RGBA_PIXEL(R, G, B, A, P) \
|
||||
R = ((*P & 0x00ff0000) >> 16); \
|
||||
G = ((*P & 0x0000ff00) >> 8); \
|
||||
B = ((*P & 0x000000ff) ); \
|
||||
A = CHAN_MAX
|
||||
#define STORE_PIXEL(P, X, Y, S) \
|
||||
*P = ( ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )
|
||||
#define FETCH_PIXEL(D, P) \
|
||||
D[RCOMP] = ((*P & 0x00ff0000) >> 16); \
|
||||
D[GCOMP] = ((*P & 0x0000ff00) >> 8); \
|
||||
D[BCOMP] = ((*P & 0x000000ff) ); \
|
||||
D[ACOMP] = 0xff
|
||||
|
||||
#include "swrast/s_spantemp.h"
|
||||
|
||||
/* ARGB */
|
||||
#define NAME(PREFIX) PREFIX##_ARGB
|
||||
#define FORMAT GL_RGBA8
|
||||
#define SPAN_VARS \
|
||||
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
|
||||
#define INIT_PIXEL_PTR(P, X, Y) \
|
||||
GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4)
|
||||
GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);
|
||||
#define INC_PIXEL_PTR(P) P += 1
|
||||
#define STORE_RGB_PIXEL(P, X, Y, R, G, B) \
|
||||
*P = ( 0xff000000 | ((R) << 16) | ((G) << 8) | (B) )
|
||||
#define STORE_RGBA_PIXEL(P, X, Y, R, G, B, A) \
|
||||
*P = ( ((A) << 24) | ((R) << 16) | ((G) << 8) | (B) )
|
||||
#define FETCH_RGBA_PIXEL(R, G, B, A, P) \
|
||||
R = ((*P & 0x00ff0000) >> 16); \
|
||||
G = ((*P & 0x0000ff00) >> 8); \
|
||||
B = ((*P & 0x000000ff) ); \
|
||||
A = ((*P & 0xff000000) >> 24)
|
||||
#define STORE_PIXEL_RGB(P, X, Y, S) \
|
||||
*P = ( 0xff000000 | ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )
|
||||
#define STORE_PIXEL(P, X, Y, S) \
|
||||
*P = ( ((S[ACOMP]) << 24) | ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )
|
||||
#define FETCH_PIXEL(D, P) \
|
||||
D[RCOMP] = ((*P & 0x00ff0000) >> 16); \
|
||||
D[GCOMP] = ((*P & 0x0000ff00) >> 8); \
|
||||
D[BCOMP] = ((*P & 0x000000ff) ); \
|
||||
D[ACOMP] = ((*P & 0xff000000) >> 24)
|
||||
|
||||
#include "swrast/s_spantemp.h"
|
||||
|
||||
/* AiRGB */
|
||||
#define NAME(PREFIX) PREFIX##_AiRGB
|
||||
#define FORMAT GL_RGBA8
|
||||
#define SPAN_VARS \
|
||||
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
|
||||
#define INIT_PIXEL_PTR(P, X, Y) \
|
||||
GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4)
|
||||
GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);
|
||||
#define INC_PIXEL_PTR(P) P += 1
|
||||
#define STORE_RGB_PIXEL(P, X, Y, R, G, B) \
|
||||
*P = ( ((R) << 16) | ((G) << 8) | (B) )
|
||||
#define STORE_RGBA_PIXEL(P, X, Y, R, G, B, A) \
|
||||
*P = ( ((0xff - (A)) << 24) | ((R) << 16) | ((G) << 8) | (B) )
|
||||
#define FETCH_RGBA_PIXEL(R, G, B, A, P) \
|
||||
R = ((*P & 0x00ff0000) >> 16); \
|
||||
G = ((*P & 0x0000ff00) >> 8); \
|
||||
B = ((*P & 0x000000ff) ); \
|
||||
A = (0xff - ((*P & 0xff000000) >> 24))
|
||||
#define STORE_PIXEL_RGB(P, X, Y, S) \
|
||||
*P = ( ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )
|
||||
#define STORE_PIXEL(P, X, Y, S) \
|
||||
*P = ( ((0xff - (S[ACOMP])) << 24) | ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )
|
||||
#define FETCH_PIXEL(D, P) \
|
||||
D[RCOMP] = ((*P & 0x00ff0000) >> 16); \
|
||||
D[GCOMP] = ((*P & 0x0000ff00) >> 8); \
|
||||
D[BCOMP] = ((*P & 0x000000ff) ); \
|
||||
D[ACOMP] = (0xff - ((*P & 0xff000000) >> 24))
|
||||
|
||||
#include "swrast/s_spantemp.h"
|
||||
|
||||
@@ -520,16 +535,12 @@ dfb_mesa_create_context( GLcontext *context,
|
||||
GLframebuffer *framebuffer,
|
||||
GLvisual *visual,
|
||||
DFBSurfacePixelFormat format,
|
||||
void *data )
|
||||
IDirectFBGL_data *data )
|
||||
{
|
||||
struct dd_function_table functions;
|
||||
struct swrast_device_driver *swdd;
|
||||
|
||||
_mesa_initialize_framebuffer( framebuffer, visual,
|
||||
visual->haveDepthBuffer,
|
||||
visual->haveStencilBuffer,
|
||||
visual->haveAccumBuffer,
|
||||
visual->accumAlphaBits > 0 );
|
||||
_mesa_initialize_framebuffer( framebuffer, visual );
|
||||
|
||||
_mesa_init_driver_functions( &functions );
|
||||
functions.GetString = get_string;
|
||||
@@ -538,7 +549,7 @@ dfb_mesa_create_context( GLcontext *context,
|
||||
functions.Viewport = set_viewport;
|
||||
|
||||
if (!_mesa_initialize_context( context, visual, NULL,
|
||||
&functions, data )) {
|
||||
&functions, (void*) data )) {
|
||||
D_DEBUG( "DirectFBGL/Mesa: _mesa_initialize_context() failed.\n" );
|
||||
_mesa_free_framebuffer_data( framebuffer );
|
||||
return false;
|
||||
@@ -552,80 +563,92 @@ dfb_mesa_create_context( GLcontext *context,
|
||||
|
||||
swdd = _swrast_GetDeviceDriverReference( context );
|
||||
swdd->SetBuffer = set_buffer;
|
||||
|
||||
_mesa_init_renderbuffer( &data->render, 0 );
|
||||
data->render.InternalFormat = GL_RGBA;
|
||||
data->render._BaseFormat = GL_RGBA;
|
||||
data->render.DataType = GL_UNSIGNED_BYTE;
|
||||
data->render.Data = data->video.start;
|
||||
data->render.Delete = delete_renderbuffer;
|
||||
data->render.AllocStorage = renderbuffer_storage;
|
||||
|
||||
switch (format) {
|
||||
case DSPF_RGB332:
|
||||
swdd->WriteRGBASpan = write_rgba_span_RGB332;
|
||||
swdd->WriteRGBSpan = write_rgb_span_RGB332;
|
||||
swdd->WriteMonoRGBASpan = write_monorgba_span_RGB332;
|
||||
swdd->WriteRGBAPixels = write_rgba_pixels_RGB332;
|
||||
swdd->WriteMonoRGBAPixels = write_monorgba_pixels_RGB332;
|
||||
swdd->ReadRGBASpan = read_rgba_span_RGB332;
|
||||
swdd->ReadRGBAPixels = read_rgba_pixels_RGB332;
|
||||
case DSPF_RGB332:
|
||||
data->render.GetRow = get_row_RGB332;
|
||||
data->render.GetValues = get_values_RGB332;
|
||||
data->render.PutRow = put_row_RGB332;
|
||||
data->render.PutMonoRow = put_mono_row_RGB332;
|
||||
data->render.PutValues = put_values_RGB332;
|
||||
data->render.PutMonoValues = put_mono_values_RGB332;
|
||||
break;
|
||||
case DSPF_ARGB1555:
|
||||
swdd->WriteRGBASpan = write_rgba_span_ARGB1555;
|
||||
swdd->WriteRGBSpan = write_rgb_span_ARGB1555;
|
||||
swdd->WriteMonoRGBASpan = write_monorgba_span_ARGB1555;
|
||||
swdd->WriteRGBAPixels = write_rgba_pixels_ARGB1555;
|
||||
swdd->WriteMonoRGBAPixels = write_monorgba_pixels_ARGB1555;
|
||||
swdd->ReadRGBASpan = read_rgba_span_ARGB1555;
|
||||
swdd->ReadRGBAPixels = read_rgba_pixels_ARGB1555;
|
||||
data->render.GetRow = get_row_ARGB1555;
|
||||
data->render.GetValues = get_values_ARGB1555;
|
||||
data->render.PutRow = put_row_ARGB1555;
|
||||
data->render.PutMonoRow = put_mono_row_ARGB1555;
|
||||
data->render.PutValues = put_values_ARGB1555;
|
||||
data->render.PutMonoValues = put_mono_values_ARGB1555;
|
||||
break;
|
||||
case DSPF_RGB16:
|
||||
swdd->WriteRGBASpan = write_rgba_span_RGB16;
|
||||
swdd->WriteRGBSpan = write_rgb_span_RGB16;
|
||||
swdd->WriteMonoRGBASpan = write_monorgba_span_RGB16;
|
||||
swdd->WriteRGBAPixels = write_rgba_pixels_RGB16;
|
||||
swdd->WriteMonoRGBAPixels = write_monorgba_pixels_RGB16;
|
||||
swdd->ReadRGBASpan = read_rgba_span_RGB16;
|
||||
swdd->ReadRGBAPixels = read_rgba_pixels_RGB16;
|
||||
data->render.GetRow = get_row_RGB16;
|
||||
data->render.GetValues = get_values_RGB16;
|
||||
data->render.PutRow = put_row_RGB16;
|
||||
data->render.PutMonoRow = put_mono_row_RGB16;
|
||||
data->render.PutValues = put_values_RGB16;
|
||||
data->render.PutMonoValues = put_mono_values_RGB16;
|
||||
break;
|
||||
case DSPF_RGB24:
|
||||
swdd->WriteRGBASpan = write_rgba_span_RGB24;
|
||||
swdd->WriteRGBSpan = write_rgb_span_RGB24;
|
||||
swdd->WriteMonoRGBASpan = write_monorgba_span_RGB24;
|
||||
swdd->WriteRGBAPixels = write_rgba_pixels_RGB24;
|
||||
swdd->WriteMonoRGBAPixels = write_monorgba_pixels_RGB24;
|
||||
swdd->ReadRGBASpan = read_rgba_span_RGB24;
|
||||
swdd->ReadRGBAPixels = read_rgba_pixels_RGB24;
|
||||
case DSPF_RGB24:
|
||||
data->render.GetRow = get_row_RGB24;
|
||||
data->render.GetValues = get_values_RGB24;
|
||||
data->render.PutRow = put_row_RGB24;
|
||||
data->render.PutMonoRow = put_mono_row_RGB24;
|
||||
data->render.PutValues = put_values_RGB24;
|
||||
data->render.PutMonoValues = put_mono_values_RGB24;
|
||||
break;
|
||||
case DSPF_RGB32:
|
||||
swdd->WriteRGBASpan = write_rgba_span_RGB32;
|
||||
swdd->WriteRGBSpan = write_rgb_span_RGB32;
|
||||
swdd->WriteMonoRGBASpan = write_monorgba_span_RGB32;
|
||||
swdd->WriteRGBAPixels = write_rgba_pixels_RGB32;
|
||||
swdd->WriteMonoRGBAPixels = write_monorgba_pixels_RGB32;
|
||||
swdd->ReadRGBASpan = read_rgba_span_RGB32;
|
||||
swdd->ReadRGBAPixels = read_rgba_pixels_RGB32;
|
||||
data->render.GetRow = get_row_RGB32;
|
||||
data->render.GetValues = get_values_RGB32;
|
||||
data->render.PutRow = put_row_RGB32;
|
||||
data->render.PutMonoRow = put_mono_row_RGB32;
|
||||
data->render.PutValues = put_values_RGB32;
|
||||
data->render.PutMonoValues = put_mono_values_RGB32;
|
||||
break;
|
||||
case DSPF_ARGB:
|
||||
swdd->WriteRGBASpan = write_rgba_span_ARGB;
|
||||
swdd->WriteRGBSpan = write_rgb_span_ARGB;
|
||||
swdd->WriteMonoRGBASpan = write_monorgba_span_ARGB;
|
||||
swdd->WriteRGBAPixels = write_rgba_pixels_ARGB;
|
||||
swdd->WriteMonoRGBAPixels = write_monorgba_pixels_ARGB;
|
||||
swdd->ReadRGBASpan = read_rgba_span_ARGB;
|
||||
swdd->ReadRGBAPixels = read_rgba_pixels_ARGB;
|
||||
data->render.GetRow = get_row_ARGB;
|
||||
data->render.GetValues = get_values_ARGB;
|
||||
data->render.PutRow = put_row_ARGB;
|
||||
data->render.PutMonoRow = put_mono_row_ARGB;
|
||||
data->render.PutValues = put_values_ARGB;
|
||||
data->render.PutMonoValues = put_mono_values_ARGB;
|
||||
break;
|
||||
case DSPF_AiRGB:
|
||||
swdd->WriteRGBASpan = write_rgba_span_AiRGB;
|
||||
swdd->WriteRGBSpan = write_rgb_span_AiRGB;
|
||||
swdd->WriteMonoRGBASpan = write_monorgba_span_AiRGB;
|
||||
swdd->WriteRGBAPixels = write_rgba_pixels_AiRGB;
|
||||
swdd->WriteMonoRGBAPixels = write_monorgba_pixels_AiRGB;
|
||||
swdd->ReadRGBASpan = read_rgba_span_AiRGB;
|
||||
swdd->ReadRGBAPixels = read_rgba_pixels_AiRGB;
|
||||
data->render.GetRow = get_row_AiRGB;
|
||||
data->render.GetValues = get_values_AiRGB;
|
||||
data->render.PutRow = put_row_AiRGB;
|
||||
data->render.PutMonoRow = put_mono_row_AiRGB;
|
||||
data->render.PutValues = put_values_AiRGB;
|
||||
data->render.PutMonoValues = put_mono_values_AiRGB;
|
||||
break;
|
||||
default:
|
||||
D_BUG( "unexpected pixelformat" );
|
||||
return false;
|
||||
}
|
||||
|
||||
_mesa_add_renderbuffer( framebuffer, BUFFER_FRONT_LEFT, &data->render );
|
||||
|
||||
_mesa_add_soft_renderbuffers( framebuffer,
|
||||
GL_FALSE,
|
||||
visual->haveDepthBuffer,
|
||||
visual->haveStencilBuffer,
|
||||
visual->haveAccumBuffer,
|
||||
GL_FALSE,
|
||||
GL_FALSE );
|
||||
|
||||
TNL_CONTEXT( context )->Driver.RunPipeline = _tnl_run_pipeline;
|
||||
|
||||
_mesa_enable_sw_extensions( context );
|
||||
|
||||
_mesa_make_current( context, framebuffer );
|
||||
_mesa_make_current( context, framebuffer, framebuffer );
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -634,7 +657,7 @@ static void
|
||||
dfb_mesa_destroy_context( GLcontext *context,
|
||||
GLframebuffer *framebuffer )
|
||||
{
|
||||
_mesa_make_current( NULL, NULL );
|
||||
_mesa_make_current( NULL, NULL, NULL );
|
||||
_mesa_free_framebuffer_data( framebuffer );
|
||||
_mesa_notifyDestroy( context );
|
||||
_mesa_free_context_data( context );
|
||||
|
||||
@@ -38,9 +38,6 @@ OBJECTS = $(C_SOURCES:.c=.o) \
|
||||
endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Include directories
|
||||
SHARED_INCLUDES = \
|
||||
-I. \
|
||||
@@ -78,9 +75,10 @@ default: depend symlinks $(LIBNAME) $(LIB_DIR)/$(LIBNAME)
|
||||
# $(TOP)/bin/mklib -o $(LIBNAME) -noprefix -install $(LIB_DIR) \
|
||||
# $(WINLIB) $(LIB_DEPS) $(WINOBJ) $(MESA_MODULES) $(OBJECTS)
|
||||
|
||||
# XXX we should use the mklib script here
|
||||
$(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(WINOBJ) Makefile $(TOP)/src/mesa/drivers/dri/Makefile.template
|
||||
rm -f $@
|
||||
gcc $(ARCH_FLAGS) -o $@ -shared $(OBJECTS) $(MESA_MODULES) $(WINOBJ) $(DRI_LIB_DEPS)
|
||||
$(CC) $(ARCH_FLAGS) -o $@ -shared $(OBJECTS) $(MESA_MODULES) $(WINOBJ) $(DRI_LIB_DEPS)
|
||||
|
||||
|
||||
$(LIB_DIR)/$(LIBNAME): $(LIBNAME)
|
||||
|
||||
@@ -7,25 +7,20 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "spantmp_common.h"
|
||||
|
||||
#ifndef DBG
|
||||
#define DBG 0
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef HAVE_HW_DEPTH_SPANS
|
||||
#define HAVE_HW_DEPTH_SPANS 0
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_HW_DEPTH_PIXELS
|
||||
#define HAVE_HW_DEPTH_PIXELS 0
|
||||
#endif
|
||||
|
||||
#ifndef HW_READ_LOCK
|
||||
#define HW_READ_LOCK() HW_LOCK()
|
||||
#endif
|
||||
#ifndef HW_READ_UNLOCK
|
||||
#define HW_READ_UNLOCK() HW_UNLOCK()
|
||||
#endif
|
||||
|
||||
static void TAG(WriteDepthSpan)( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n, GLint x, GLint y,
|
||||
|
||||
5886
src/mesa/drivers/dri/common/extension_helper.h
Normal file
5886
src/mesa/drivers/dri/common/extension_helper.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -27,26 +27,12 @@
|
||||
* Gareth Hughes <gareth@nvidia.com>
|
||||
*/
|
||||
|
||||
#include "spantmp_common.h"
|
||||
|
||||
#ifndef DBG
|
||||
#define DBG 0
|
||||
#endif
|
||||
|
||||
#ifndef HW_WRITE_LOCK
|
||||
#define HW_WRITE_LOCK() HW_LOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_WRITE_UNLOCK
|
||||
#define HW_WRITE_UNLOCK() HW_UNLOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_READ_LOCK
|
||||
#define HW_READ_LOCK() HW_LOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_READ_UNLOCK
|
||||
#define HW_READ_UNLOCK() HW_UNLOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_READ_CLIPLOOP
|
||||
#define HW_READ_CLIPLOOP() HW_CLIPLOOP()
|
||||
#endif
|
||||
|
||||
@@ -34,27 +34,12 @@
|
||||
*/
|
||||
|
||||
#include "colormac.h"
|
||||
#include "spantmp_common.h"
|
||||
|
||||
#ifndef DBG
|
||||
#define DBG 0
|
||||
#endif
|
||||
|
||||
#ifndef HW_WRITE_LOCK
|
||||
#define HW_WRITE_LOCK() HW_LOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_WRITE_UNLOCK
|
||||
#define HW_WRITE_UNLOCK() HW_UNLOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_READ_LOCK
|
||||
#define HW_READ_LOCK() HW_LOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_READ_UNLOCK
|
||||
#define HW_READ_UNLOCK() HW_UNLOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_READ_CLIPLOOP
|
||||
#define HW_READ_CLIPLOOP() HW_CLIPLOOP()
|
||||
#endif
|
||||
@@ -65,6 +50,14 @@
|
||||
|
||||
#if (SPANTMP_PIXEL_FMT == GL_RGB) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5)
|
||||
|
||||
#ifndef GET_SRC_PTR
|
||||
#define GET_SRC_PTR(_x, _y) (read_buf + (_x) * 2 + (_y) * pitch)
|
||||
#endif
|
||||
|
||||
#ifndef GET_DST_PTR
|
||||
#define GET_DST_PTR(_x, _y) ( buf + (_x) * 2 + (_y) * pitch)
|
||||
#endif
|
||||
|
||||
#define INIT_MONO_PIXEL(p, color) \
|
||||
p = PACK_COLOR_565( color[0], color[1], color[2] )
|
||||
|
||||
@@ -92,9 +85,17 @@
|
||||
|
||||
#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)
|
||||
|
||||
#ifndef GET_SRC_PTR
|
||||
#define GET_SRC_PTR(_x, _y) (read_buf + (_x) * 4 + (_y) * pitch)
|
||||
#endif
|
||||
|
||||
#ifndef GET_DST_PTR
|
||||
#define GET_DST_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch)
|
||||
#endif
|
||||
|
||||
# define INIT_MONO_PIXEL(p, color) \
|
||||
p = PACK_COLOR_8888(color[3], color[0], color[1], color[2])
|
||||
|
||||
|
||||
# define WRITE_RGBA(_x, _y, r, g, b, a) \
|
||||
do { \
|
||||
GLuint * _p = (GLuint *) GET_DST_PTR(_x, _y); \
|
||||
|
||||
81
src/mesa/drivers/dri/common/spantmp_common.h
Normal file
81
src/mesa/drivers/dri/common/spantmp_common.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright 2000-2001 VA Linux Systems, Inc.
|
||||
* (C) Copyright IBM Corporation 2004
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||
* license, and/or sell copies of the Software, and to permit persons to whom
|
||||
* the Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
* VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file spantmp_common.h
|
||||
*
|
||||
* common macros for span read / write functions to be used in the depth,
|
||||
* stencil and pixel span templates.
|
||||
*/
|
||||
|
||||
#ifndef HW_WRITE_LOCK
|
||||
#define HW_WRITE_LOCK() HW_LOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_WRITE_UNLOCK
|
||||
#define HW_WRITE_UNLOCK() HW_UNLOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_READ_LOCK
|
||||
#define HW_READ_LOCK() HW_LOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_READ_UNLOCK
|
||||
#define HW_READ_UNLOCK() HW_UNLOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_CLIPLOOP
|
||||
#define HW_CLIPLOOP() \
|
||||
do { \
|
||||
int _nc = dPriv->numClipRects; \
|
||||
while ( _nc-- ) { \
|
||||
int minx = dPriv->pClipRects[_nc].x1 - dPriv->x; \
|
||||
int miny = dPriv->pClipRects[_nc].y1 - dPriv->y; \
|
||||
int maxx = dPriv->pClipRects[_nc].x2 - dPriv->x; \
|
||||
int maxy = dPriv->pClipRects[_nc].y2 - dPriv->y;
|
||||
#endif
|
||||
|
||||
#ifndef HW_ENDCLIPLOOP
|
||||
#define HW_ENDCLIPLOOP() \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#ifndef CLIPPIXEL
|
||||
#define CLIPPIXEL( _x, _y ) \
|
||||
((_x >= minx) && (_x < maxx) && (_y >= miny) && (_y < maxy))
|
||||
#endif
|
||||
|
||||
#ifndef CLIPSPAN
|
||||
#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i ) \
|
||||
if ( _y < miny || _y >= maxy /*|| _x + n < minx || _x >=maxx*/ ) { \
|
||||
_n1 = 0, _x1 = x; \
|
||||
} else { \
|
||||
_n1 = _n; \
|
||||
_x1 = _x; \
|
||||
if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \
|
||||
if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx); \
|
||||
}
|
||||
#endif
|
||||
@@ -1,23 +1,11 @@
|
||||
/* $XFree86: xc/lib/GL/mesa/src/drv/common/stenciltmp.h,v 1.3 2001/03/21 16:14:20 dawes Exp $ */
|
||||
|
||||
#include "spantmp_common.h"
|
||||
|
||||
#ifndef DBG
|
||||
#define DBG 0
|
||||
#endif
|
||||
|
||||
#ifndef HW_WRITE_LOCK
|
||||
#define HW_WRITE_LOCK() HW_LOCK()
|
||||
#endif
|
||||
#ifndef HW_WRITE_UNLOCK
|
||||
#define HW_WRITE_UNLOCK() HW_UNLOCK()
|
||||
#endif
|
||||
|
||||
#ifndef HW_READ_LOCK
|
||||
#define HW_READ_LOCK() HW_LOCK()
|
||||
#endif
|
||||
#ifndef HW_READ_UNLOCK
|
||||
#define HW_READ_UNLOCK() HW_UNLOCK()
|
||||
#endif
|
||||
|
||||
static void TAG(WriteStencilSpan)( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n, GLint x, GLint y,
|
||||
|
||||
@@ -180,9 +180,18 @@ driGetRendererString( char * buffer, const char * hardware_name,
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Enable extensions supported by the driver.
|
||||
*
|
||||
* \bug
|
||||
* ARB_imaging isn't handled properly. In Mesa, enabling ARB_imaging also
|
||||
* enables all the sub-extensions that are folded into it. This means that
|
||||
* we need to add entry-points (via \c driInitSingleExtension) for those
|
||||
* new functions here.
|
||||
*/
|
||||
void driInitExtensions( GLcontext * ctx,
|
||||
const char * const extensions_to_enable[],
|
||||
GLboolean enable_imaging )
|
||||
const struct dri_extension * extensions_to_enable,
|
||||
GLboolean enable_imaging )
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
@@ -190,14 +199,84 @@ void driInitExtensions( GLcontext * ctx,
|
||||
_mesa_enable_imaging_extensions( ctx );
|
||||
}
|
||||
|
||||
for ( i = 0 ; extensions_to_enable[i] != NULL ; i++ ) {
|
||||
_mesa_enable_extension( ctx, extensions_to_enable[i] );
|
||||
for ( i = 0 ; extensions_to_enable[i].name != NULL ; i++ ) {
|
||||
driInitSingleExtension( ctx, & extensions_to_enable[i] );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Enable and add dispatch functions for a single extension
|
||||
*
|
||||
* \param ctx Context where extension is to be enabled.
|
||||
* \param ext Extension that is to be enabled.
|
||||
*
|
||||
* \sa driInitExtensions, _mesa_enable_extension, _glapi_add_entrypoint
|
||||
*
|
||||
* \todo
|
||||
* Determine if it would be better to use \c strlen instead of the hardcoded
|
||||
* for-loops.
|
||||
*/
|
||||
void driInitSingleExtension( GLcontext * ctx,
|
||||
const struct dri_extension * ext )
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
if ( ext->functions != NULL ) {
|
||||
for ( i = 0 ; ext->functions[i].strings != NULL ; i++ ) {
|
||||
const char * functions[16];
|
||||
const char * parameter_signature;
|
||||
const char * str = ext->functions[i].strings;
|
||||
unsigned j;
|
||||
|
||||
|
||||
/* Separate the parameter signature from the rest of the string.
|
||||
* If the parameter signature is empty (i.e., the string starts
|
||||
* with a NUL character), then the function has a void parameter
|
||||
* list.
|
||||
*/
|
||||
parameter_signature = str;
|
||||
while ( str[0] != '\0' ) {
|
||||
str++;
|
||||
}
|
||||
str++;
|
||||
|
||||
|
||||
/* Divide the string into the substrings that name each
|
||||
* entry-point for the function.
|
||||
*/
|
||||
for ( j = 0 ; j < 16 ; j++ ) {
|
||||
if ( str[0] == '\0' ) {
|
||||
functions[j] = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
functions[j] = str;
|
||||
|
||||
while ( str[0] != '\0' ) {
|
||||
str++;
|
||||
}
|
||||
str++;
|
||||
}
|
||||
|
||||
|
||||
/* Add each entry-point to the dispatch table.
|
||||
*/
|
||||
for ( j = 0 ; functions[j] != NULL ; j++ ) {
|
||||
_glapi_add_entrypoint( functions[j],
|
||||
ext->functions[i].offset );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_mesa_enable_extension( ctx, ext->name );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef DRI_NEW_INTERFACE_ONLY
|
||||
/**
|
||||
* Utility function used by drivers to test the verions of other components.
|
||||
|
||||
@@ -32,12 +32,52 @@
|
||||
#include "context.h"
|
||||
#include "dri_util.h"
|
||||
|
||||
struct dri_debug_control
|
||||
{
|
||||
struct dri_debug_control {
|
||||
const char * string;
|
||||
unsigned flag;
|
||||
};
|
||||
|
||||
/**
|
||||
* Description of the entry-points and parameters for an OpenGL function.
|
||||
*/
|
||||
struct dri_extension_function {
|
||||
/**
|
||||
* \brief
|
||||
* Packed string describing the parameter signature and the entry-point
|
||||
* names.
|
||||
*
|
||||
* The parameter signature and the names of the entry-points for this
|
||||
* function are packed into a single string. The substrings are
|
||||
* separated by NUL characters. The whole string is terminated by
|
||||
* two consecutive NUL characters.
|
||||
*/
|
||||
const char * strings;
|
||||
|
||||
|
||||
/**
|
||||
* Offset of the function in the dispatch table.
|
||||
*/
|
||||
unsigned offset;
|
||||
};
|
||||
|
||||
/**
|
||||
* Description of the API for an extension to OpenGL.
|
||||
*/
|
||||
struct dri_extension {
|
||||
/**
|
||||
* Name of the extension.
|
||||
*/
|
||||
const char * name;
|
||||
|
||||
|
||||
/**
|
||||
* Pointer to a list of \c dri_extension_function structures. The list
|
||||
* is terminated by a structure with a \c NULL
|
||||
* \c dri_extension_function::strings pointer.
|
||||
*/
|
||||
const struct dri_extension_function * functions;
|
||||
};
|
||||
|
||||
extern unsigned driParseDebugString( const char * debug,
|
||||
const struct dri_debug_control * control );
|
||||
|
||||
@@ -45,7 +85,10 @@ extern unsigned driGetRendererString( char * buffer,
|
||||
const char * hardware_name, const char * driver_date, GLuint agp_mode );
|
||||
|
||||
extern void driInitExtensions( GLcontext * ctx,
|
||||
const char * const card_extensions[], GLboolean enable_imaging );
|
||||
const struct dri_extension * card_extensions, GLboolean enable_imaging );
|
||||
|
||||
extern void driInitSingleExtension( GLcontext * ctx,
|
||||
const struct dri_extension * ext );
|
||||
|
||||
#ifndef DRI_NEW_INTERFACE_ONLY
|
||||
extern GLboolean driCheckDriDdxDrmVersions( __DRIscreenPrivate *sPriv,
|
||||
|
||||
@@ -836,7 +836,9 @@ fbSwapBuffers(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw)
|
||||
else {
|
||||
/* XXX this shouldn't be an error but we can't handle it for now */
|
||||
_mesa_problem(NULL, "fbSwapBuffers: drawable has no context!\n");
|
||||
return EGL_FALSE;
|
||||
}
|
||||
return EGL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -37,10 +37,13 @@
|
||||
|
||||
#undef DEPTH_TRACE
|
||||
|
||||
static void
|
||||
FFBWriteDepthSpan(GLcontext *ctx, GLuint n, GLint x, GLint y,
|
||||
const GLdepth depth[], const GLubyte mask[])
|
||||
static void FFBWriteDepthSpan( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n, GLint x, GLint y,
|
||||
const void *values,
|
||||
const GLubyte mask[] )
|
||||
{
|
||||
const GLuint *depth = (const GLuint *) values;
|
||||
#ifdef DEPTH_TRACE
|
||||
fprintf(stderr, "FFBWriteDepthSpan: n(%d) x(%d) y(%d)\n",
|
||||
(int) n, x, y);
|
||||
@@ -81,10 +84,28 @@ FFBWriteDepthSpan(GLcontext *ctx, GLuint n, GLint x, GLint y,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
FFBWriteDepthPixels(GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
|
||||
const GLdepth depth[], const GLubyte mask[])
|
||||
static void FFBWriteMonoDepthSpan( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n, GLint x, GLint y,
|
||||
const void *value, const GLubyte mask[] )
|
||||
{
|
||||
const GLuint depthVal = *((GLuint *) value);
|
||||
GLuint depths[MAX_WIDTH];
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++)
|
||||
depths[i] = depthVal;
|
||||
FFBWriteDepthSpan(ctx, rb, n, x, y, depths, mask);
|
||||
}
|
||||
|
||||
static void FFBWriteDepthPixels( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n,
|
||||
const GLint x[],
|
||||
const GLint y[],
|
||||
const void *values,
|
||||
const GLubyte mask[] )
|
||||
{
|
||||
const GLuint *depth = (const GLuint *) values;
|
||||
#ifdef DEPTH_TRACE
|
||||
fprintf(stderr, "FFBWriteDepthPixels: n(%d)\n", (int) n);
|
||||
#endif
|
||||
@@ -126,9 +147,12 @@ FFBWriteDepthPixels(GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
FFBReadDepthSpan(GLcontext *ctx, GLuint n, GLint x, GLint y, GLdepth depth[])
|
||||
static void FFBReadDepthSpan( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n, GLint x, GLint y,
|
||||
void *values )
|
||||
{
|
||||
GLuint *depth = (GLuint *) values;
|
||||
ffbContextPtr fmesa = FFB_CONTEXT(ctx);
|
||||
__DRIdrawablePrivate *dPriv = fmesa->driDrawable;
|
||||
GLuint *zptr;
|
||||
@@ -163,10 +187,13 @@ FFBReadDepthSpan(GLcontext *ctx, GLuint n, GLint x, GLint y, GLdepth depth[])
|
||||
UNLOCK_HARDWARE(fmesa);
|
||||
}
|
||||
|
||||
static void
|
||||
FFBReadDepthPixels(GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
|
||||
GLdepth depth[])
|
||||
static void FFBReadDepthPixels( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n,
|
||||
const GLint x[], const GLint y[],
|
||||
void *values )
|
||||
{
|
||||
GLuint *depth = (GLuint *) values;
|
||||
ffbContextPtr fmesa = FFB_CONTEXT(ctx);
|
||||
__DRIdrawablePrivate *dPriv = fmesa->driDrawable;
|
||||
char *zbase;
|
||||
@@ -202,13 +229,17 @@ FFBReadDepthPixels(GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
|
||||
UNLOCK_HARDWARE(fmesa);
|
||||
}
|
||||
|
||||
void ffbDDInitDepthFuncs(GLcontext *ctx)
|
||||
/**
|
||||
* Plug in the Get/Put routines for the given driRenderbuffer.
|
||||
*/
|
||||
void
|
||||
ffbSetDepthFunctions(driRenderbuffer *drb, const GLvisual *vis)
|
||||
{
|
||||
struct swrast_device_driver *swdd =
|
||||
_swrast_GetDeviceDriverReference(ctx);
|
||||
|
||||
swdd->WriteDepthSpan = FFBWriteDepthSpan;
|
||||
swdd->ReadDepthSpan = FFBReadDepthSpan;
|
||||
swdd->WriteDepthPixels = FFBWriteDepthPixels;
|
||||
swdd->ReadDepthPixels = FFBReadDepthPixels;
|
||||
assert(drb->Base.InternalFormat == GL_DEPTH_COMPONENT16);
|
||||
drb->Base.GetRow = FFBReadDepthSpan;
|
||||
drb->Base.GetValues = FFBReadDepthPixels;
|
||||
drb->Base.PutRow = FFBWriteDepthSpan;
|
||||
drb->Base.PutMonoRow = FFBWriteMonoDepthSpan;
|
||||
drb->Base.PutValues = FFBWriteDepthPixels;
|
||||
drb->Base.PutMonoValues = NULL;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
#ifndef _FFB_DEPTH_H
|
||||
#define _FFB_DEPTH_H
|
||||
|
||||
extern void ffbDDInitDepthFuncs(GLcontext *ctx);
|
||||
void ffbSetDepthFunctions(driRenderbuffer *drb, const GLvisual *vis);
|
||||
|
||||
#endif /* !(_FFB_DEPTH_H) */
|
||||
|
||||
@@ -116,27 +116,20 @@ do { GLuint p = *(GLuint *)(buf + ((__x)<<2) + ((__y)<<13)); \
|
||||
|
||||
#include <spantmp.h>
|
||||
|
||||
void ffbDDInitSpanFuncs(GLcontext *ctx)
|
||||
/**
|
||||
* Plug in the Get/Put routines for the given driRenderbuffer.
|
||||
*/
|
||||
void
|
||||
ffbSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis)
|
||||
{
|
||||
struct swrast_device_driver *swdd =
|
||||
_swrast_GetDeviceDriverReference(ctx);
|
||||
|
||||
swdd->WriteRGBASpan = ffbWriteRGBASpan_888;
|
||||
swdd->WriteRGBSpan = ffbWriteRGBSpan_888;
|
||||
swdd->WriteRGBAPixels = ffbWriteRGBAPixels_888;
|
||||
swdd->WriteMonoRGBASpan = ffbWriteMonoRGBASpan_888;
|
||||
swdd->WriteMonoRGBAPixels = ffbWriteMonoRGBAPixels_888;
|
||||
swdd->ReadRGBASpan = ffbReadRGBASpan_888;
|
||||
swdd->ReadRGBAPixels = ffbReadRGBAPixels_888;
|
||||
|
||||
/* We don't support color index mode yet, but it will be
|
||||
* very easy to do. -DaveM
|
||||
*/
|
||||
swdd->WriteCI8Span = NULL;
|
||||
swdd->WriteCI32Span = NULL;
|
||||
swdd->WriteMonoCISpan = NULL;
|
||||
swdd->WriteCI32Pixels = NULL;
|
||||
swdd->WriteMonoCIPixels = NULL;
|
||||
swdd->ReadCI32Span = NULL;
|
||||
swdd->ReadCI32Pixels = NULL;
|
||||
assert(vis->redBits == 8);
|
||||
assert(vis->greenBits == 8);
|
||||
assert(vis->blueBits == 8);
|
||||
drb->Base.GetRow = ffbReadRGBASpan_888;
|
||||
drb->Base.GetValues = ffbReadRGBAPixels_888;
|
||||
drb->Base.PutRow = ffbWriteRGBASpan_888;
|
||||
drb->Base.PutRowRGB = ffbWriteRGBSpan_888;
|
||||
drb->Base.PutMonoRow = ffbWriteMonoRGBASpan_888;
|
||||
drb->Base.PutValues = ffbWriteRGBAPixels_888;
|
||||
drb->Base.PutMonoValues = ffbWriteMonoRGBAPixels_888;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#ifndef _FFB_SPAN_H
|
||||
#define _FFB_SPAN_H
|
||||
|
||||
extern void ffbDDInitSpanFuncs(GLcontext *ctx);
|
||||
#include "drirenderbuffer.h"
|
||||
|
||||
void ffbSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis);
|
||||
|
||||
#endif /* !(_FFB_SPAN_H) */
|
||||
|
||||
@@ -592,6 +592,8 @@ static void ffbDDColorMask(GLcontext *ctx,
|
||||
new_pmask |= 0x0000ff00;
|
||||
if (b)
|
||||
new_pmask |= 0x00ff0000;
|
||||
if (a)
|
||||
new_pmask |= 0xff000000;
|
||||
|
||||
if (fmesa->pmask != new_pmask) {
|
||||
fmesa->pmask = new_pmask;
|
||||
|
||||
@@ -36,10 +36,12 @@
|
||||
|
||||
#undef STENCIL_TRACE
|
||||
|
||||
static void
|
||||
FFBWriteStencilSpan(GLcontext *ctx, GLuint n, GLint x, GLint y,
|
||||
const GLstencil stencil[], const GLubyte mask[])
|
||||
static void FFBWriteStencilSpan( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n, GLint x, GLint y,
|
||||
const void *values, const GLubyte mask[] )
|
||||
{
|
||||
const GLubyte *stencil = (const GLubyte *) values;
|
||||
#ifdef STENCIL_TRACE
|
||||
fprintf(stderr, "FFBWriteStencilSpan: n(%d) x(%d) y(%d)\n",
|
||||
(int) n, x, y);
|
||||
@@ -79,10 +81,13 @@ FFBWriteStencilSpan(GLcontext *ctx, GLuint n, GLint x, GLint y,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
FFBWriteStencilPixels(GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
|
||||
const GLstencil stencil[], const GLubyte mask[])
|
||||
static void FFBWriteStencilPixels( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n,
|
||||
const GLint x[], const GLint y[],
|
||||
const void *values, const GLubyte mask[] )
|
||||
{
|
||||
const GLubyte *stencil = (const GLubyte *) values;
|
||||
#ifdef STENCIL_TRACE
|
||||
fprintf(stderr, "FFBWriteStencilPixels: n(%d)\n", (int) n);
|
||||
#endif
|
||||
@@ -124,9 +129,12 @@ FFBWriteStencilPixels(GLcontext *ctx, GLuint n, const GLint x[], const GLint y[]
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
FFBReadStencilSpan(GLcontext *ctx, GLuint n, GLint x, GLint y, GLstencil stencil[])
|
||||
static void FFBReadStencilSpan( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n, GLint x, GLint y,
|
||||
void *values)
|
||||
{
|
||||
GLubyte *stencil = (GLubyte *) values;
|
||||
ffbContextPtr fmesa = FFB_CONTEXT(ctx);
|
||||
__DRIdrawablePrivate *dPriv = fmesa->driDrawable;
|
||||
GLuint *zptr;
|
||||
@@ -161,10 +169,12 @@ FFBReadStencilSpan(GLcontext *ctx, GLuint n, GLint x, GLint y, GLstencil stencil
|
||||
UNLOCK_HARDWARE(fmesa);
|
||||
}
|
||||
|
||||
static void
|
||||
FFBReadStencilPixels(GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
|
||||
GLstencil stencil[])
|
||||
static void FFBReadStencilPixels( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLuint n, const GLint x[], const GLint y[],
|
||||
void *values )
|
||||
{
|
||||
GLubyte *stencil = (GLubyte *) values;
|
||||
ffbContextPtr fmesa = FFB_CONTEXT(ctx);
|
||||
__DRIdrawablePrivate *dPriv = fmesa->driDrawable;
|
||||
char *zbase;
|
||||
@@ -200,22 +210,17 @@ FFBReadStencilPixels(GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
|
||||
UNLOCK_HARDWARE(fmesa);
|
||||
}
|
||||
|
||||
void ffbDDInitStencilFuncs(GLcontext *ctx)
|
||||
/**
|
||||
* Plug in the Get/Put routines for the given driRenderbuffer.
|
||||
*/
|
||||
void
|
||||
ffbSetStencilFunctions(driRenderbuffer *drb, const GLvisual *vis)
|
||||
{
|
||||
ffbContextPtr fmesa = FFB_CONTEXT(ctx);
|
||||
|
||||
struct swrast_device_driver *swdd =
|
||||
_swrast_GetDeviceDriverReference(ctx);
|
||||
|
||||
if (fmesa->ffb_sarea->flags & FFB_DRI_FFB2PLUS) {
|
||||
swdd->WriteStencilSpan = FFBWriteStencilSpan;
|
||||
swdd->ReadStencilSpan = FFBReadStencilSpan;
|
||||
swdd->WriteStencilPixels = FFBWriteStencilPixels;
|
||||
swdd->ReadStencilPixels = FFBReadStencilPixels;
|
||||
} else {
|
||||
swdd->WriteStencilSpan = NULL;
|
||||
swdd->ReadStencilSpan = NULL;
|
||||
swdd->WriteStencilPixels = NULL;
|
||||
swdd->ReadStencilPixels = NULL;
|
||||
}
|
||||
assert(drb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT);
|
||||
drb->Base.GetRow = FFBReadStencilSpan;
|
||||
drb->Base.GetValues = FFBReadStencilPixels;
|
||||
drb->Base.PutRow = FFBWriteStencilSpan;
|
||||
/*drb->Base.PutMonoRow = FFBWriteMonoStencilSpan;*/
|
||||
drb->Base.PutValues = FFBWriteStencilPixels;
|
||||
drb->Base.PutMonoValues = NULL;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
#ifndef _FFB_STENCIL_H
|
||||
#define _FFB_STENCIL_H
|
||||
|
||||
extern void ffbDDInitStencilFuncs(GLcontext *ctx);
|
||||
void ffbSetStencilFunctions(driRenderbuffer *drb, const GLvisual *vis);
|
||||
|
||||
#endif /* !(_FFB_STENCIL_H) */
|
||||
|
||||
@@ -146,28 +146,28 @@ static void choose_normals(void)
|
||||
}
|
||||
|
||||
if (ctx->Light.EnabledList.next == ctx->Light.EnabledList.prev) {
|
||||
ctx->Exec->Normal3f = norm_tab[index].normal3f_single;
|
||||
ctx->Exec->Normal3fv = norm_tab[index].normal3fv_single;
|
||||
SET_Normal3f(ctx->Exec, norm_tab[index].normal3f_single);
|
||||
SET_Normal3fv(ctx->Exec, norm_tab[index].normal3fv_single);
|
||||
} else {
|
||||
ctx->Exec->Normal3f = norm_tab[index].normal3f_multi;
|
||||
ctx->Exec->Normal3fv = norm_tab[index].normal3fv_multi;
|
||||
SET_Normal3f(ctx->Exec, norm_tab[index].normal3f_multi);
|
||||
SET_Normal3fv(ctx->Exec, norm_tab[index].normal3fv_multi);
|
||||
}
|
||||
} else {
|
||||
ctx->Exec->Normal3f = _mesa_noop_Normal3f;
|
||||
ctx->Exec->Normal3fv = _mesa_noop_Normal3fv;
|
||||
SET_Normal3f(ctx->Exec, _mesa_noop_Normal3f);
|
||||
SET_Normal3fv(ctx->Exec, _mesa_noop_Normal3fv);
|
||||
}
|
||||
}
|
||||
|
||||
static void ffb_choose_Normal3f(GLfloat x, GLfloat y, GLfloat z)
|
||||
{
|
||||
choose_normals();
|
||||
GL_CALL(Normal3f)(x, y, z);
|
||||
CALL_Normal3f(GET_DISPATCH(), (x, y, z));
|
||||
}
|
||||
|
||||
static void ffb_choose_Normal3fv(const GLfloat *v)
|
||||
{
|
||||
choose_normals();
|
||||
GL_CALL(Normal3fv)(v);
|
||||
CALL_Normal3fv(GET_DISPATCH(), (v));
|
||||
}
|
||||
|
||||
/* Vertex functions: */
|
||||
@@ -267,13 +267,14 @@ static void ffb_do_fallback(GLcontext *ctx)
|
||||
* correctly:
|
||||
*/
|
||||
if (fmesa->imm.prim != PRIM_OUTSIDE_BEGIN_END )
|
||||
GL_CALL(Begin)(fmesa->imm.prim);
|
||||
CALL_Begin(GET_DISPATCH(), (fmesa->imm.prim));
|
||||
|
||||
if (ctx->Light.Enabled) {
|
||||
GL_CALL(Color4fv)(ctx->Current.Color); /* Catch ColorMaterial */
|
||||
GL_CALL(Normal3fv)(current->normal);
|
||||
/* Catch ColorMaterial */
|
||||
CALL_Color4fv(GET_DISPATCH(), (ctx->Current.Color));
|
||||
CALL_Normal3fv(GET_DISPATCH(), (current->normal));
|
||||
} else {
|
||||
GL_CALL(Color4fv)(current->color);
|
||||
CALL_Color4fv(GET_DISPATCH(), (current->color));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,9 +27,12 @@
|
||||
|
||||
#include "ffb_xmesa.h"
|
||||
#include "context.h"
|
||||
#include "framebuffer.h"
|
||||
#include "matrix.h"
|
||||
#include "renderbuffer.h"
|
||||
#include "simple_list.h"
|
||||
#include "imports.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include "swrast/swrast.h"
|
||||
#include "swrast_setup/swrast_setup.h"
|
||||
@@ -276,9 +279,6 @@ ffbCreateContext(const __GLcontextModes *mesaVis,
|
||||
ffbDDExtensionsInit(ctx);
|
||||
ffbDDInitDriverFuncs(ctx);
|
||||
ffbDDInitStateFuncs(ctx);
|
||||
ffbDDInitSpanFuncs(ctx);
|
||||
ffbDDInitDepthFuncs(ctx);
|
||||
ffbDDInitStencilFuncs(ctx);
|
||||
ffbDDInitRenderFuncs(ctx);
|
||||
/*ffbDDInitTexFuncs(ctx); not needed */
|
||||
ffbDDInitBitmapFuncs(ctx);
|
||||
@@ -322,16 +322,63 @@ ffbCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
||||
const __GLcontextModes *mesaVis,
|
||||
GLboolean isPixmap )
|
||||
{
|
||||
/* Mesa checks for pitch > 0, but ffb doesn't use pitches */
|
||||
int bogusPitch = 1;
|
||||
int bpp = 4; /* we've always got a 32bpp framebuffer */
|
||||
int offset = 0; /* always at 0 for offset */
|
||||
|
||||
if (isPixmap) {
|
||||
return GL_FALSE; /* not implemented */
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
GLboolean swStencil = (mesaVis->stencilBits > 0 &&
|
||||
mesaVis->depthBits != 24);
|
||||
#if 0
|
||||
driDrawPriv->driverPrivate = (void *)
|
||||
_mesa_create_framebuffer(mesaVis,
|
||||
GL_FALSE, /* software depth buffer? */
|
||||
_mesa_create_framebuffer(mesaVis,
|
||||
GL_FALSE, /* software depth buffer? */
|
||||
mesaVis->stencilBits > 0,
|
||||
mesaVis->accumRedBits > 0,
|
||||
mesaVis->alphaBits > 0);
|
||||
#else
|
||||
struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis);
|
||||
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(GL_RGBA, bpp, offset, bogusPitch);
|
||||
ffbSetSpanFunctions(frontRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
|
||||
}
|
||||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(GL_RGBA, bpp, offset, bogusPitch);
|
||||
ffbSetSpanFunctions(backRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);
|
||||
}
|
||||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT16, bpp, offset, bogusPitch);
|
||||
ffbSetDepthFunctions(depthRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
|
||||
}
|
||||
|
||||
if (mesaVis->stencilBits > 0 && !swStencil) {
|
||||
driRenderbuffer *stencilRb
|
||||
= driNewRenderbuffer(GL_STENCIL_INDEX8_EXT, bpp, offset,bogusPitch);
|
||||
ffbSetStencilFunctions(stencilRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_STENCIL, &stencilRb->Base);
|
||||
}
|
||||
|
||||
_mesa_add_soft_renderbuffers(fb,
|
||||
GL_FALSE, /* color */
|
||||
GL_FALSE, /* depth */
|
||||
swStencil,
|
||||
mesaVis->accumRedBits > 0,
|
||||
GL_FALSE, /* alpha */
|
||||
GL_FALSE /* aux */);
|
||||
driDrawPriv->driverPrivate = (void *) fb;
|
||||
#endif
|
||||
return (driDrawPriv->driverPrivate != NULL);
|
||||
}
|
||||
}
|
||||
@@ -488,7 +535,7 @@ ffbMakeCurrent(__DRIcontextPrivate *driContextPriv,
|
||||
|
||||
fmesa->driDrawable = driDrawPriv;
|
||||
|
||||
_mesa_make_current2(fmesa->glCtx,
|
||||
_mesa_make_current(fmesa->glCtx,
|
||||
(GLframebuffer *) driDrawPriv->driverPrivate,
|
||||
(GLframebuffer *) driReadPriv->driverPrivate);
|
||||
|
||||
@@ -520,7 +567,7 @@ ffbMakeCurrent(__DRIcontextPrivate *driContextPriv,
|
||||
1, 0, 0, 0, 0);
|
||||
}
|
||||
} else {
|
||||
_mesa_make_current(NULL, NULL);
|
||||
_mesa_make_current(NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
@@ -551,30 +598,172 @@ void ffbXMesaUpdateState(ffbContextPtr fmesa)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static struct __DriverAPIRec ffbAPI = {
|
||||
ffbInitDriver,
|
||||
ffbDestroyScreen,
|
||||
ffbCreateContext,
|
||||
ffbDestroyContext,
|
||||
ffbCreateBuffer,
|
||||
ffbDestroyBuffer,
|
||||
ffbSwapBuffers,
|
||||
ffbMakeCurrent,
|
||||
ffbUnbindContext
|
||||
static const struct __DriverAPIRec ffbAPI = {
|
||||
.InitDriver = ffbInitDriver,
|
||||
.DestroyScreen = ffbDestroyScreen,
|
||||
.CreateContext = ffbCreateContext,
|
||||
.DestroyContext = ffbDestroyContext,
|
||||
.CreateBuffer = ffbCreateBuffer,
|
||||
.DestroyBuffer = ffbDestroyBuffer,
|
||||
.SwapBuffers = ffbSwapBuffers,
|
||||
.MakeCurrent = ffbMakeCurrent,
|
||||
.UnbindContext = ffbUnbindContext,
|
||||
.GetSwapInfo = NULL,
|
||||
.GetMSC = NULL,
|
||||
.WaitForMSC = NULL,
|
||||
.WaitForSBC = NULL,
|
||||
.SwapBuffersMSC = NULL
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* This is the bootstrap function for the driver.
|
||||
* The __driCreateScreen name is the symbol that libGL.so fetches.
|
||||
* Return: pointer to a __DRIscreenPrivate.
|
||||
*/
|
||||
#if !defined(DRI_NEW_INTERFACE_ONLY)
|
||||
void *__driCreateScreen(Display *dpy, int scrn, __DRIscreen *psc,
|
||||
int numConfigs, __GLXvisualConfig *config)
|
||||
int numConfigs, __GLXvisualConfig *config)
|
||||
{
|
||||
__DRIscreenPrivate *psp;
|
||||
psp = __driUtilCreateScreen(dpy, scrn, psc, numConfigs, config, &ffbAPI);
|
||||
return (void *) psp;
|
||||
}
|
||||
#endif /* !defined(DRI_NEW_INTERFACE_ONLY) */
|
||||
|
||||
|
||||
#ifdef USE_NEW_INTERFACE
|
||||
static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
|
||||
|
||||
static __GLcontextModes *
|
||||
ffbFillInModes( unsigned pixel_bits, unsigned depth_bits,
|
||||
unsigned stencil_bits, GLboolean have_back_buffer )
|
||||
{
|
||||
__GLcontextModes * modes;
|
||||
__GLcontextModes * m;
|
||||
unsigned num_modes;
|
||||
unsigned depth_buffer_factor;
|
||||
unsigned back_buffer_factor;
|
||||
GLenum fb_format;
|
||||
GLenum fb_type;
|
||||
|
||||
/* GLX_SWAP_COPY_OML is only supported because the FFB driver doesn't
|
||||
* support pageflipping at all.
|
||||
*/
|
||||
static const GLenum back_buffer_modes[] = {
|
||||
GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML
|
||||
};
|
||||
|
||||
u_int8_t depth_bits_array[3];
|
||||
u_int8_t stencil_bits_array[3];
|
||||
|
||||
|
||||
depth_bits_array[0] = 0;
|
||||
depth_bits_array[1] = depth_bits;
|
||||
depth_bits_array[2] = depth_bits;
|
||||
|
||||
/* Just like with the accumulation buffer, always provide some modes
|
||||
* with a stencil buffer. It will be a sw fallback, but some apps won't
|
||||
* care about that.
|
||||
*/
|
||||
stencil_bits_array[0] = 0;
|
||||
stencil_bits_array[1] = 0;
|
||||
stencil_bits_array[2] = (stencil_bits == 0) ? 8 : stencil_bits;
|
||||
|
||||
depth_buffer_factor = ((depth_bits != 0) || (stencil_bits != 0)) ? 3 : 1;
|
||||
back_buffer_factor = (have_back_buffer) ? 3 : 1;
|
||||
|
||||
num_modes = depth_buffer_factor * back_buffer_factor * 4;
|
||||
|
||||
if ( pixel_bits == 16 ) {
|
||||
fb_format = GL_RGB;
|
||||
fb_type = GL_UNSIGNED_SHORT_5_6_5;
|
||||
}
|
||||
else {
|
||||
fb_format = GL_BGRA;
|
||||
fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
||||
}
|
||||
|
||||
modes = (*create_context_modes)( num_modes, sizeof( __GLcontextModes ) );
|
||||
m = modes;
|
||||
if ( ! driFillInModes( & m, fb_format, fb_type,
|
||||
depth_bits_array, stencil_bits_array, depth_buffer_factor,
|
||||
back_buffer_modes, back_buffer_factor,
|
||||
GLX_TRUE_COLOR ) ) {
|
||||
fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",
|
||||
__func__, __LINE__ );
|
||||
return NULL;
|
||||
}
|
||||
if ( ! driFillInModes( & m, fb_format, fb_type,
|
||||
depth_bits_array, stencil_bits_array, depth_buffer_factor,
|
||||
back_buffer_modes, back_buffer_factor,
|
||||
GLX_DIRECT_COLOR ) ) {
|
||||
fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",
|
||||
__func__, __LINE__ );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* Mark the visual as slow if there are "fake" stencil bits.
|
||||
*/
|
||||
for ( m = modes ; m != NULL ; m = m->next ) {
|
||||
if ( (m->stencilBits != 0) && (m->stencilBits != stencil_bits) ) {
|
||||
m->visualRating = GLX_SLOW_CONFIG;
|
||||
}
|
||||
}
|
||||
|
||||
return modes;
|
||||
}
|
||||
#endif /* USE_NEW_INTERFACE */
|
||||
|
||||
|
||||
/**
|
||||
* This is the bootstrap function for the driver. libGL supplies all of the
|
||||
* requisite information about the system, and the driver initializes itself.
|
||||
* This routine also fills in the linked list pointed to by \c driver_modes
|
||||
* with the \c __GLcontextModes that the driver can support for windows or
|
||||
* pbuffers.
|
||||
*
|
||||
* \return A pointer to a \c __DRIscreenPrivate on success, or \c NULL on
|
||||
* failure.
|
||||
*/
|
||||
#ifdef USE_NEW_INTERFACE
|
||||
PUBLIC
|
||||
void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc,
|
||||
const __GLcontextModes * modes,
|
||||
const __DRIversion * ddx_version,
|
||||
const __DRIversion * dri_version,
|
||||
const __DRIversion * drm_version,
|
||||
const __DRIframebuffer * frame_buffer,
|
||||
drmAddress pSAREA, int fd,
|
||||
int internal_api_version,
|
||||
__GLcontextModes ** driver_modes )
|
||||
|
||||
{
|
||||
__DRIscreenPrivate *psp;
|
||||
static const __DRIversion ddx_expected = { 0, 0, 1 };
|
||||
static const __DRIversion dri_expected = { 4, 0, 0 };
|
||||
static const __DRIversion drm_expected = { 0, 0, 1 };
|
||||
|
||||
if ( ! driCheckDriDdxDrmVersions2( "ffb",
|
||||
dri_version, & dri_expected,
|
||||
ddx_version, & ddx_expected,
|
||||
drm_version, & drm_expected ) ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
|
||||
ddx_version, dri_version, drm_version,
|
||||
frame_buffer, pSAREA, fd,
|
||||
internal_api_version, &ffbAPI);
|
||||
if ( psp != NULL ) {
|
||||
create_context_modes = (PFNGLXCREATECONTEXTMODES)
|
||||
glXGetProcAddress( (const GLubyte *) "__glXCreateContextModes" );
|
||||
if ( create_context_modes != NULL ) {
|
||||
*driver_modes = ffbFillInModes( 32, 16, 0, GL_TRUE );
|
||||
}
|
||||
}
|
||||
|
||||
return (void *) psp;
|
||||
}
|
||||
#endif /* USE_NEW_INTERFACE */
|
||||
|
||||
@@ -40,21 +40,6 @@
|
||||
|
||||
#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
|
||||
|
||||
|
||||
#define CLIPPIXEL( _x, _y ) \
|
||||
((_x >= minx) && (_x < maxx) && (_y >= miny) && (_y < maxy))
|
||||
|
||||
|
||||
#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i ) \
|
||||
if ( _y < miny || _y >= maxy ) { \
|
||||
_n1 = 0, _x1 = x; \
|
||||
} else { \
|
||||
_n1 = _n; \
|
||||
_x1 = _x; \
|
||||
if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \
|
||||
if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx); \
|
||||
}
|
||||
|
||||
#define Y_FLIP( _y ) (height - _y - 1)
|
||||
|
||||
#define HW_LOCK() \
|
||||
@@ -63,21 +48,6 @@
|
||||
gammaGetLock( gmesa, DRM_LOCK_FLUSH | DRM_LOCK_QUIESCENT ); \
|
||||
GAMMAHW_LOCK( gmesa );
|
||||
|
||||
#define HW_CLIPLOOP() \
|
||||
do { \
|
||||
__DRIdrawablePrivate *dPriv = gmesa->driDrawable; \
|
||||
int _nc = dPriv->numClipRects; \
|
||||
\
|
||||
while ( _nc-- ) { \
|
||||
int minx = dPriv->pClipRects[_nc].x1 - dPriv->x; \
|
||||
int miny = dPriv->pClipRects[_nc].y1 - dPriv->y; \
|
||||
int maxx = dPriv->pClipRects[_nc].x2 - dPriv->x; \
|
||||
int maxy = dPriv->pClipRects[_nc].y2 - dPriv->y;
|
||||
|
||||
#define HW_ENDCLIPLOOP() \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define HW_UNLOCK() GAMMAHW_UNLOCK( gmesa )
|
||||
|
||||
|
||||
@@ -156,7 +126,6 @@ do { \
|
||||
#include "depthtmp.h"
|
||||
|
||||
|
||||
|
||||
#if 0 /* Unused */
|
||||
/* 32 bit depthbuffer functions.
|
||||
*/
|
||||
|
||||
@@ -61,6 +61,10 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#include "i810ioctl.h"
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
#define need_GL_ARB_multisample
|
||||
#include "extension_helper.h"
|
||||
|
||||
#ifndef I810_DEBUG
|
||||
int I810_DEBUG = (0);
|
||||
#endif
|
||||
@@ -97,17 +101,18 @@ static void i810BufferSize(GLframebuffer *buffer, GLuint *width, GLuint *height)
|
||||
|
||||
/* Extension strings exported by the i810 driver.
|
||||
*/
|
||||
static const char * const card_extensions[] =
|
||||
static const struct dri_extension card_extensions[] =
|
||||
{
|
||||
"GL_ARB_multitexture",
|
||||
"GL_ARB_texture_env_add",
|
||||
"GL_ARB_texture_mirrored_repeat",
|
||||
"GL_EXT_stencil_wrap",
|
||||
"GL_EXT_texture_edge_clamp",
|
||||
"GL_EXT_texture_lod_bias",
|
||||
"GL_MESA_ycbcr_texture",
|
||||
"GL_SGIS_generate_mipmap",
|
||||
NULL
|
||||
{ "GL_ARB_multisample", GL_ARB_multisample_functions },
|
||||
{ "GL_ARB_multitexture", NULL },
|
||||
{ "GL_ARB_texture_env_add", NULL },
|
||||
{ "GL_ARB_texture_mirrored_repeat", NULL },
|
||||
{ "GL_EXT_stencil_wrap", NULL },
|
||||
{ "GL_EXT_texture_edge_clamp", NULL },
|
||||
{ "GL_EXT_texture_lod_bias", NULL },
|
||||
{ "GL_MESA_ycbcr_texture", NULL },
|
||||
{ "GL_SGIS_generate_mipmap", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
extern const struct tnl_pipeline_stage _i810_render_stage;
|
||||
|
||||
@@ -41,39 +41,10 @@
|
||||
#define INIT_MONO_PIXEL(p, color) \
|
||||
p = PACK_COLOR_565( color[0], color[1], color[2] )
|
||||
|
||||
#define CLIPPIXEL(_x,_y) (_x >= minx && _x < maxx && \
|
||||
_y >= miny && _y < maxy)
|
||||
|
||||
|
||||
#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i ) \
|
||||
if ( _y < miny || _y >= maxy ) { \
|
||||
_n1 = 0, _x1 = x; \
|
||||
} else { \
|
||||
_n1 = _n; \
|
||||
_x1 = _x; \
|
||||
if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \
|
||||
if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx); \
|
||||
}
|
||||
|
||||
#define Y_FLIP(_y) (height - _y - 1)
|
||||
|
||||
#define HW_LOCK()
|
||||
|
||||
#define HW_CLIPLOOP() \
|
||||
do { \
|
||||
__DRIdrawablePrivate *dPriv = imesa->driDrawable; \
|
||||
int _nc = dPriv->numClipRects; \
|
||||
while (_nc--) { \
|
||||
int minx = dPriv->pClipRects[_nc].x1 - dPriv->x; \
|
||||
int miny = dPriv->pClipRects[_nc].y1 - dPriv->y; \
|
||||
int maxx = dPriv->pClipRects[_nc].x2 - dPriv->x; \
|
||||
int maxy = dPriv->pClipRects[_nc].y2 - dPriv->y;
|
||||
|
||||
|
||||
#define HW_ENDCLIPLOOP() \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define HW_UNLOCK()
|
||||
|
||||
/* 16 bit, 565 rgb color spanline and pixel functions
|
||||
@@ -97,8 +68,6 @@ do { \
|
||||
#define TAG(x) i810##x##_565
|
||||
#include "spantmp.h"
|
||||
|
||||
|
||||
|
||||
/* 16 bit depthbuffer functions.
|
||||
*/
|
||||
#define WRITE_DEPTH( _x, _y, d ) \
|
||||
|
||||
@@ -65,6 +65,17 @@
|
||||
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
#define need_GL_ARB_multisample
|
||||
#define need_GL_ARB_texture_compression
|
||||
#define need_GL_EXT_blend_color
|
||||
#define need_GL_EXT_blend_equation_separate
|
||||
#define need_GL_EXT_blend_func_separate
|
||||
#define need_GL_EXT_blend_minmax
|
||||
#define need_GL_EXT_fog_coord
|
||||
#define need_GL_EXT_secondary_color
|
||||
#include "extension_helper.h"
|
||||
|
||||
#include "xmlpool.h" /* for symbolic values of enum-type options */
|
||||
#ifndef I830_DEBUG
|
||||
int I830_DEBUG = (0);
|
||||
@@ -138,35 +149,35 @@ static void i830BufferSize(GLframebuffer *buffer,
|
||||
|
||||
/* Extension strings exported by the i830 driver.
|
||||
*/
|
||||
static const char * const card_extensions[] =
|
||||
static const struct dri_extension card_extensions[] =
|
||||
{
|
||||
"GL_ARB_multisample",
|
||||
"GL_ARB_multitexture",
|
||||
"GL_ARB_texture_border_clamp",
|
||||
"GL_ARB_texture_compression",
|
||||
"GL_ARB_texture_env_add",
|
||||
"GL_ARB_texture_env_combine",
|
||||
"GL_ARB_texture_env_crossbar",
|
||||
"GL_ARB_texture_env_dot3",
|
||||
"GL_ARB_texture_mirrored_repeat",
|
||||
"GL_EXT_blend_color",
|
||||
"GL_EXT_blend_equation_separate",
|
||||
"GL_EXT_blend_func_separate",
|
||||
"GL_EXT_blend_minmax",
|
||||
"GL_EXT_blend_subtract",
|
||||
"GL_EXT_fog_coord",
|
||||
"GL_EXT_secondary_color",
|
||||
"GL_EXT_stencil_wrap",
|
||||
"GL_EXT_texture_edge_clamp",
|
||||
"GL_EXT_texture_env_combine",
|
||||
"GL_EXT_texture_env_dot3",
|
||||
"GL_EXT_texture_filter_anisotropic",
|
||||
"GL_EXT_texture_lod_bias",
|
||||
"GL_EXT_texture_rectangle",
|
||||
"GL_NV_blend_square",
|
||||
"GL_MESA_ycbcr_texture",
|
||||
"GL_SGIS_generate_mipmap",
|
||||
NULL
|
||||
{ "GL_ARB_multisample", GL_ARB_multisample_functions },
|
||||
{ "GL_ARB_multitexture", NULL },
|
||||
{ "GL_ARB_texture_border_clamp", NULL },
|
||||
{ "GL_ARB_texture_compression", GL_ARB_texture_compression_functions },
|
||||
{ "GL_ARB_texture_env_add", NULL },
|
||||
{ "GL_ARB_texture_env_combine", NULL },
|
||||
{ "GL_ARB_texture_env_crossbar", NULL },
|
||||
{ "GL_ARB_texture_env_dot3", NULL },
|
||||
{ "GL_ARB_texture_mirrored_repeat", NULL },
|
||||
{ "GL_EXT_blend_color", GL_EXT_blend_color_functions },
|
||||
{ "GL_EXT_blend_equation_separate", GL_EXT_blend_equation_separate_functions },
|
||||
{ "GL_EXT_blend_func_separate", GL_EXT_blend_func_separate_functions },
|
||||
{ "GL_EXT_blend_minmax", GL_EXT_blend_minmax_functions },
|
||||
{ "GL_EXT_blend_subtract", NULL },
|
||||
{ "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
|
||||
{ "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
|
||||
{ "GL_EXT_stencil_wrap", NULL },
|
||||
{ "GL_EXT_texture_edge_clamp", NULL },
|
||||
{ "GL_EXT_texture_env_combine", NULL },
|
||||
{ "GL_EXT_texture_env_dot3", NULL },
|
||||
{ "GL_EXT_texture_filter_anisotropic", NULL },
|
||||
{ "GL_EXT_texture_lod_bias", NULL },
|
||||
{ "GL_EXT_texture_rectangle", NULL },
|
||||
{ "GL_MESA_ycbcr_texture", NULL },
|
||||
{ "GL_NV_blend_square", NULL },
|
||||
{ "GL_SGIS_generate_mipmap", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -81,39 +81,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#define INIT_MONO_PIXEL(p,color)\
|
||||
p = PACK_COLOR_565(color[0],color[1],color[2])
|
||||
|
||||
#define CLIPPIXEL(_x,_y) (_x >= minx && _x < maxx && \
|
||||
_y >= miny && _y < maxy)
|
||||
|
||||
#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i ) \
|
||||
if ( _y < miny || _y >= maxy ) { \
|
||||
_n1 = 0, _x1 = x; \
|
||||
} else { \
|
||||
_n1 = _n; \
|
||||
_x1 = _x; \
|
||||
if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \
|
||||
if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx); \
|
||||
}
|
||||
|
||||
#define Y_FLIP(_y) (height - _y - 1)
|
||||
|
||||
|
||||
#define HW_LOCK()
|
||||
|
||||
#define HW_CLIPLOOP() \
|
||||
do { \
|
||||
__DRIdrawablePrivate *dPriv = imesa->driDrawable; \
|
||||
int _nc = dPriv->numClipRects; \
|
||||
while (_nc--) { \
|
||||
int minx = dPriv->pClipRects[_nc].x1 - dPriv->x; \
|
||||
int miny = dPriv->pClipRects[_nc].y1 - dPriv->y; \
|
||||
int maxx = dPriv->pClipRects[_nc].x2 - dPriv->x; \
|
||||
int maxy = dPriv->pClipRects[_nc].y2 - dPriv->y;
|
||||
|
||||
|
||||
#define HW_ENDCLIPLOOP() \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define HW_UNLOCK()
|
||||
|
||||
/* 16 bit, 565 rgb color spanline and pixel functions
|
||||
@@ -137,9 +108,6 @@ do { \
|
||||
#define TAG(x) i830##x##_565
|
||||
#include "spantmp.h"
|
||||
|
||||
|
||||
|
||||
|
||||
/* 15 bit, 555 rgb color spanline and pixel functions
|
||||
*/
|
||||
#define WRITE_RGBA( _x, _y, r, g, b, a ) \
|
||||
|
||||
@@ -38,10 +38,10 @@
|
||||
* Mesa's Driver Functions
|
||||
***************************************/
|
||||
|
||||
static const char * const card_extensions[] =
|
||||
static const struct dri_extension card_extensions[] =
|
||||
{
|
||||
"GL_ARB_texture_env_crossbar",
|
||||
NULL
|
||||
{ "GL_ARB_texture_env_crossbar", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -45,14 +45,15 @@
|
||||
* Mesa's Driver Functions
|
||||
***************************************/
|
||||
|
||||
static const char * const card_extensions[] =
|
||||
static const struct dri_extension card_extensions[] =
|
||||
{
|
||||
"GL_ARB_depth_texture", /* New: alanh 06-Jan-2005 */
|
||||
"GL_ARB_fragment_program",
|
||||
"GL_ARB_shadow", /* New: alanh 06-Jan-2005 */
|
||||
"GL_EXT_shadow_funcs", /* New: alanh 06-Jan-2005 */
|
||||
"GL_SGIX_depth_texture", /* ARB extn won't work if not enabled */
|
||||
NULL
|
||||
{ "GL_ARB_depth_texture", NULL },
|
||||
{ "GL_ARB_fragment_program", NULL },
|
||||
{ "GL_ARB_shadow", NULL },
|
||||
{ "GL_EXT_shadow_funcs", NULL },
|
||||
/* ARB extn won't work if not enabled */
|
||||
{ "GL_SGIX_depth_texture", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
/* Override intel default.
|
||||
|
||||
@@ -60,6 +60,23 @@
|
||||
int INTEL_DEBUG = (0);
|
||||
#endif
|
||||
|
||||
#define need_GL_ARB_multisample
|
||||
#define need_GL_ARB_point_parameters
|
||||
#define need_GL_ARB_texture_compression
|
||||
#define need_GL_ARB_vertex_buffer_object
|
||||
#define need_GL_ARB_vertex_program
|
||||
#define need_GL_ARB_window_pos
|
||||
#define need_GL_EXT_blend_color
|
||||
#define need_GL_EXT_blend_equation_separate
|
||||
#define need_GL_EXT_blend_func_separate
|
||||
#define need_GL_EXT_blend_minmax
|
||||
#define need_GL_EXT_cull_vertex
|
||||
#define need_GL_EXT_fog_coord
|
||||
#define need_GL_EXT_multi_draw_arrays
|
||||
#define need_GL_EXT_secondary_color
|
||||
#define need_GL_NV_vertex_program
|
||||
#include "extension_helper.h"
|
||||
|
||||
#ifndef VERBOSE
|
||||
int VERBOSE = 0;
|
||||
#endif
|
||||
@@ -136,48 +153,46 @@ static void intelBufferSize(GLframebuffer *buffer,
|
||||
* It appears that ARB_texture_env_crossbar has "disappeared" compared to the
|
||||
* old i830-specific driver.
|
||||
*/
|
||||
static const char * const card_extensions[] =
|
||||
static const struct dri_extension card_extensions[] =
|
||||
{
|
||||
"GL_ARB_multisample",
|
||||
"GL_ARB_multitexture",
|
||||
"GL_ARB_point_parameters",
|
||||
"GL_ARB_texture_border_clamp",
|
||||
"GL_ARB_texture_compression",
|
||||
"GL_ARB_texture_cube_map",
|
||||
"GL_ARB_texture_env_add",
|
||||
"GL_ARB_texture_env_combine",
|
||||
"GL_ARB_texture_env_dot3",
|
||||
"GL_ARB_texture_mirrored_repeat",
|
||||
"GL_ARB_texture_rectangle",
|
||||
"GL_ARB_vertex_buffer_object",
|
||||
"GL_ARB_vertex_program",
|
||||
"GL_ARB_window_pos",
|
||||
"GL_EXT_abgr",
|
||||
"GL_EXT_bgra",
|
||||
"GL_EXT_blend_color",
|
||||
"GL_EXT_blend_equation_separate",
|
||||
"GL_EXT_blend_func_separate",
|
||||
"GL_EXT_blend_minmax",
|
||||
"GL_EXT_blend_subtract",
|
||||
"GL_EXT_cull_vertex", /* New: alanh 06-Jan-2005 */
|
||||
"GL_EXT_fog_coord",
|
||||
"GL_EXT_multi_draw_arrays",
|
||||
"GL_EXT_secondary_color",
|
||||
"GL_EXT_stencil_wrap",
|
||||
"GL_EXT_texture_edge_clamp",
|
||||
"GL_EXT_texture_env_combine",
|
||||
"GL_EXT_texture_env_dot3",
|
||||
"GL_EXT_texture_filter_anisotropic",
|
||||
"GL_EXT_texture_lod_bias",
|
||||
"GL_3DFX_texture_compression_FXT1",
|
||||
"GL_APPLE_client_storage",
|
||||
"GL_MESA_pack_invert",
|
||||
"GL_MESA_ycbcr_texture",
|
||||
"GL_NV_blend_square",
|
||||
"GL_NV_vertex_program",
|
||||
"GL_NV_vertex_program1_1",
|
||||
"GL_SGIS_generate_mipmap",
|
||||
NULL
|
||||
{ "GL_ARB_multisample", GL_ARB_multisample_functions },
|
||||
{ "GL_ARB_multitexture", NULL },
|
||||
{ "GL_ARB_point_parameters", GL_ARB_point_parameters_functions },
|
||||
{ "GL_ARB_texture_border_clamp", NULL },
|
||||
{ "GL_ARB_texture_compression", GL_ARB_texture_compression_functions },
|
||||
{ "GL_ARB_texture_cube_map", NULL },
|
||||
{ "GL_ARB_texture_env_add", NULL },
|
||||
{ "GL_ARB_texture_env_combine", NULL },
|
||||
{ "GL_ARB_texture_env_dot3", NULL },
|
||||
{ "GL_ARB_texture_mirrored_repeat", NULL },
|
||||
{ "GL_ARB_texture_rectangle", NULL },
|
||||
{ "GL_ARB_vertex_buffer_object", GL_ARB_vertex_buffer_object_functions },
|
||||
{ "GL_ARB_vertex_program", GL_ARB_vertex_program_functions },
|
||||
{ "GL_ARB_window_pos", GL_ARB_window_pos_functions },
|
||||
{ "GL_EXT_blend_color", GL_EXT_blend_color_functions },
|
||||
{ "GL_EXT_blend_equation_separate", GL_EXT_blend_equation_separate_functions },
|
||||
{ "GL_EXT_blend_func_separate", GL_EXT_blend_func_separate_functions },
|
||||
{ "GL_EXT_blend_minmax", GL_EXT_blend_minmax_functions },
|
||||
{ "GL_EXT_blend_subtract", NULL },
|
||||
{ "GL_EXT_cull_vertex", GL_EXT_cull_vertex_functions },
|
||||
{ "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
|
||||
{ "GL_EXT_multi_draw_arrays", GL_EXT_multi_draw_arrays_functions },
|
||||
{ "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
|
||||
{ "GL_EXT_stencil_wrap", NULL },
|
||||
{ "GL_EXT_texture_edge_clamp", NULL },
|
||||
{ "GL_EXT_texture_env_combine", NULL },
|
||||
{ "GL_EXT_texture_env_dot3", NULL },
|
||||
{ "GL_EXT_texture_filter_anisotropic", NULL },
|
||||
{ "GL_EXT_texture_lod_bias", NULL },
|
||||
{ "GL_3DFX_texture_compression_FXT1", NULL },
|
||||
{ "GL_APPLE_client_storage", NULL },
|
||||
{ "GL_MESA_pack_invert", NULL },
|
||||
{ "GL_MESA_ycbcr_texture", NULL },
|
||||
{ "GL_NV_blend_square", NULL },
|
||||
{ "GL_NV_vertex_program", GL_NV_vertex_program_functions },
|
||||
{ "GL_NV_vertex_program1_1", NULL },
|
||||
{ "GL_SGIS_generate_mipmap", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
extern const struct tnl_pipeline_stage _intel_render_stage;
|
||||
|
||||
@@ -69,39 +69,10 @@
|
||||
#define INIT_MONO_PIXEL(p,color)\
|
||||
p = INTEL_PACKCOLOR565(color[0],color[1],color[2])
|
||||
|
||||
#define CLIPPIXEL(_x,_y) (_x >= minx && _x < maxx && \
|
||||
_y >= miny && _y < maxy)
|
||||
|
||||
#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i ) \
|
||||
if ( _y < miny || _y >= maxy ) { \
|
||||
_n1 = 0, _x1 = x; \
|
||||
} else { \
|
||||
_n1 = _n; \
|
||||
_x1 = _x; \
|
||||
if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \
|
||||
if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx); \
|
||||
}
|
||||
|
||||
#define Y_FLIP(_y) (height - _y - 1)
|
||||
|
||||
|
||||
#define HW_LOCK()
|
||||
|
||||
#define HW_CLIPLOOP() \
|
||||
do { \
|
||||
__DRIdrawablePrivate *dPriv = intel->driDrawable; \
|
||||
int _nc = dPriv->numClipRects; \
|
||||
while (_nc--) { \
|
||||
int minx = dPriv->pClipRects[_nc].x1 - dPriv->x; \
|
||||
int miny = dPriv->pClipRects[_nc].y1 - dPriv->y; \
|
||||
int maxx = dPriv->pClipRects[_nc].x2 - dPriv->x; \
|
||||
int maxy = dPriv->pClipRects[_nc].y2 - dPriv->y;
|
||||
|
||||
|
||||
#define HW_ENDCLIPLOOP() \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define HW_UNLOCK()
|
||||
|
||||
/* 16 bit, 565 rgb color spanline and pixel functions
|
||||
@@ -125,9 +96,6 @@ do { \
|
||||
#define TAG(x) intel##x##_565
|
||||
#include "spantmp.h"
|
||||
|
||||
|
||||
|
||||
|
||||
/* 15 bit, 555 rgb color spanline and pixel functions
|
||||
*/
|
||||
#define WRITE_RGBA( _x, _y, r, g, b, a ) \
|
||||
|
||||
@@ -57,6 +57,9 @@
|
||||
#include "utils.h"
|
||||
#include "vblank.h"
|
||||
|
||||
#define need_GL_ARB_multisample
|
||||
#include "extension_helper.h"
|
||||
|
||||
#ifndef MACH64_DEBUG
|
||||
int MACH64_DEBUG = (0);
|
||||
#endif
|
||||
@@ -76,14 +79,14 @@ static const struct dri_debug_control debug_control[] =
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static const char * const card_extensions[] =
|
||||
static const struct dri_extension card_extensions[] =
|
||||
{
|
||||
"GL_ARB_multitexture",
|
||||
"GL_EXT_texture_edge_clamp",
|
||||
"GL_MESA_ycbcr_texture",
|
||||
"GL_SGIS_generate_mipmap",
|
||||
"GL_SGIS_texture_edge_clamp",
|
||||
NULL
|
||||
{ "GL_ARB_multisample", GL_ARB_multisample_functions },
|
||||
{ "GL_ARB_multitexture", NULL },
|
||||
{ "GL_EXT_texture_edge_clamp", NULL },
|
||||
{ "GL_MESA_ycbcr_texture", NULL },
|
||||
{ "GL_SGIS_generate_mipmap", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -26,14 +26,13 @@
|
||||
* Authors:
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
* Leif Delgass <ldelgass@retinalburn.net>
|
||||
* Jos<6F> Fonseca <j_r_fonseca@yahoo.co.uk>
|
||||
* Jos<6F>Fonseca <j_r_fonseca@yahoo.co.uk>
|
||||
*/
|
||||
|
||||
#include "mach64_context.h"
|
||||
#include "mach64_ioctl.h"
|
||||
#include "mach64_state.h"
|
||||
#include "mach64_span.h"
|
||||
#include "mach64_tex.h"
|
||||
|
||||
#include "swrast/swrast.h"
|
||||
|
||||
@@ -71,25 +70,11 @@
|
||||
|
||||
#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
|
||||
|
||||
#define CLIPPIXEL( _x, _y ) \
|
||||
((_x >= minx) && (_x < maxx) && (_y >= miny) && (_y < maxy))
|
||||
|
||||
|
||||
#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i ) \
|
||||
if (( _y < miny) || (_y >= maxy)) { \
|
||||
_n1 = 0, _x1 = x; \
|
||||
} else { \
|
||||
_n1 = _n; \
|
||||
_x1 = _x; \
|
||||
if (_x1 < minx) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \
|
||||
if (_x1 + _n1 >= maxx) n1 -= (_x1 + n1 - maxx); \
|
||||
}
|
||||
|
||||
#define Y_FLIP( _y ) (height - _y - 1)
|
||||
|
||||
|
||||
#define HW_LOCK()
|
||||
|
||||
/* FIXME could/should we use dPriv->numClipRects like the other drivers? */
|
||||
#define HW_CLIPLOOP() \
|
||||
do { \
|
||||
int _nc = mmesa->numClipRects; \
|
||||
@@ -114,8 +99,6 @@
|
||||
|
||||
/* 16 bit, RGB565 color spanline and pixel functions
|
||||
*/
|
||||
#define GET_SRC_PTR(_x, _y) (read_buf + _x * 2 + _y * pitch)
|
||||
#define GET_DST_PTR(_x, _y) ( buf + _x * 2 + _y * pitch)
|
||||
#define SPANTMP_PIXEL_FMT GL_RGB
|
||||
#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
|
||||
|
||||
@@ -126,8 +109,8 @@
|
||||
|
||||
/* 32 bit, ARGB8888 color spanline and pixel functions
|
||||
*/
|
||||
#define GET_SRC_PTR(_x, _y) (read_buf + _x * 4 + _y * pitch)
|
||||
#define GET_DST_PTR(_x, _y) ( buf + _x * 4 + _y * pitch)
|
||||
/* FIXME the old code always read back alpha as 0xff, i.e. fully opaque.
|
||||
Was there a reason to do so ? If so that'll won't work with that template... */
|
||||
#define SPANTMP_PIXEL_FMT GL_BGRA
|
||||
#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
|
||||
|
||||
@@ -197,63 +180,9 @@ static void mach64SpanRenderFinish( GLcontext *ctx )
|
||||
|
||||
void mach64DDInitSpanFuncs( GLcontext *ctx )
|
||||
{
|
||||
#if 0
|
||||
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
|
||||
#endif
|
||||
struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
|
||||
|
||||
swdd->SetBuffer = mach64DDSetBuffer;
|
||||
|
||||
#if 0
|
||||
switch ( mmesa->mach64Screen->cpp ) {
|
||||
case 2:
|
||||
swdd->WriteRGBASpan = mach64WriteRGBASpan_RGB565;
|
||||
swdd->WriteRGBSpan = mach64WriteRGBSpan_RGB565;
|
||||
swdd->WriteMonoRGBASpan = mach64WriteMonoRGBASpan_RGB565;
|
||||
swdd->WriteRGBAPixels = mach64WriteRGBAPixels_RGB565;
|
||||
swdd->WriteMonoRGBAPixels = mach64WriteMonoRGBAPixels_RGB565;
|
||||
swdd->ReadRGBASpan = mach64ReadRGBASpan_RGB565;
|
||||
swdd->ReadRGBAPixels = mach64ReadRGBAPixels_RGB565;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
swdd->WriteRGBASpan = mach64WriteRGBASpan_ARGB8888;
|
||||
swdd->WriteRGBSpan = mach64WriteRGBSpan_ARGB8888;
|
||||
swdd->WriteMonoRGBASpan = mach64WriteMonoRGBASpan_ARGB8888;
|
||||
swdd->WriteRGBAPixels = mach64WriteRGBAPixels_ARGB8888;
|
||||
swdd->WriteMonoRGBAPixels = mach64WriteMonoRGBAPixels_ARGB8888;
|
||||
swdd->ReadRGBASpan = mach64ReadRGBASpan_ARGB8888;
|
||||
swdd->ReadRGBAPixels = mach64ReadRGBAPixels_ARGB8888;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Depth buffer is always 16 bit */
|
||||
#if 0
|
||||
swdd->ReadDepthSpan = mach64ReadDepthSpan_16;
|
||||
swdd->WriteDepthSpan = mach64WriteDepthSpan_16;
|
||||
swdd->ReadDepthPixels = mach64ReadDepthPixels_16;
|
||||
swdd->WriteDepthPixels = mach64WriteDepthPixels_16;
|
||||
#endif
|
||||
#if 0
|
||||
/* No hardware stencil buffer */
|
||||
swdd->ReadStencilSpan = NULL;
|
||||
swdd->WriteStencilSpan = NULL;
|
||||
swdd->ReadStencilPixels = NULL;
|
||||
swdd->WriteStencilPixels = NULL;
|
||||
|
||||
swdd->WriteCI8Span = NULL;
|
||||
swdd->WriteCI32Span = NULL;
|
||||
swdd->WriteMonoCISpan = NULL;
|
||||
swdd->WriteCI32Pixels = NULL;
|
||||
swdd->WriteMonoCIPixels = NULL;
|
||||
swdd->ReadCI32Span = NULL;
|
||||
swdd->ReadCI32Pixels = NULL;
|
||||
#endif
|
||||
swdd->SpanRenderStart = mach64SpanRenderStart;
|
||||
swdd->SpanRenderFinish = mach64SpanRenderFinish;
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include "drm.h"
|
||||
#include "mga_drm.h"
|
||||
#include "mga_xmesa.h"
|
||||
@@ -68,6 +69,18 @@
|
||||
|
||||
#include "GL/internal/dri_interface.h"
|
||||
|
||||
#define need_GL_ARB_multisample
|
||||
#define need_GL_ARB_texture_compression
|
||||
#define need_GL_ARB_vertex_program
|
||||
#define need_GL_EXT_fog_coord
|
||||
#define need_GL_EXT_multi_draw_arrays
|
||||
#define need_GL_EXT_secondary_color
|
||||
#if 0
|
||||
#define need_GL_EXT_paletted_texture
|
||||
#endif
|
||||
#define need_GL_NV_vertex_program
|
||||
#include "extension_helper.h"
|
||||
|
||||
/* MGA configuration
|
||||
*/
|
||||
#include "xmlpool.h"
|
||||
@@ -264,22 +277,30 @@ mgaInitDriver(__DRIscreenPrivate *sPriv)
|
||||
* primary DMA region base address needs to be known is so that the driver
|
||||
* can busy wait for certain DMA operations to complete (see
|
||||
* mgaWaitForFrameCompletion in mgaioctl.c).
|
||||
*
|
||||
* Starting with MGA DRM version 3.2, these are completely unneeded as
|
||||
* there is a new, in-kernel mechanism for handling the wait.
|
||||
*/
|
||||
|
||||
mgaScreen->mmio.handle = serverInfo->registers.handle;
|
||||
mgaScreen->mmio.size = serverInfo->registers.size;
|
||||
if ( drmMap( sPriv->fd,
|
||||
mgaScreen->mmio.handle, mgaScreen->mmio.size,
|
||||
&mgaScreen->mmio.map ) < 0 ) {
|
||||
FREE( mgaScreen );
|
||||
sPriv->private = NULL;
|
||||
__driUtilMessage( "Couldn't map MMIO registers" );
|
||||
return GL_FALSE;
|
||||
if (mgaScreen->sPriv->drmMinor < 2) {
|
||||
mgaScreen->mmio.handle = serverInfo->registers.handle;
|
||||
mgaScreen->mmio.size = serverInfo->registers.size;
|
||||
if ( drmMap( sPriv->fd,
|
||||
mgaScreen->mmio.handle, mgaScreen->mmio.size,
|
||||
&mgaScreen->mmio.map ) < 0 ) {
|
||||
FREE( mgaScreen );
|
||||
sPriv->private = NULL;
|
||||
__driUtilMessage( "Couldn't map MMIO registers" );
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
mgaScreen->primary.handle = serverInfo->primary.handle;
|
||||
mgaScreen->primary.size = serverInfo->primary.size;
|
||||
}
|
||||
else {
|
||||
(void) memset( & mgaScreen->primary, 0, sizeof( mgaScreen->primary ) );
|
||||
(void) memset( & mgaScreen->mmio, 0, sizeof( mgaScreen->mmio ) );
|
||||
}
|
||||
|
||||
mgaScreen->primary.handle = serverInfo->primary.handle;
|
||||
mgaScreen->primary.size = serverInfo->primary.size;
|
||||
|
||||
|
||||
mgaScreen->textureOffset[MGA_CARD_HEAP] = serverInfo->textureOffset;
|
||||
mgaScreen->textureOffset[MGA_AGP_HEAP] = (serverInfo->agpTextureOffset |
|
||||
@@ -371,39 +392,47 @@ static const struct tnl_pipeline_stage *mga_pipeline[] = {
|
||||
};
|
||||
|
||||
|
||||
static const char * const g400_extensions[] =
|
||||
static const struct dri_extension g400_extensions[] =
|
||||
{
|
||||
"GL_ARB_multitexture",
|
||||
"GL_ARB_texture_env_add",
|
||||
"GL_ARB_texture_env_combine",
|
||||
"GL_ARB_texture_env_crossbar",
|
||||
"GL_EXT_texture_env_combine",
|
||||
"GL_EXT_texture_edge_clamp",
|
||||
"GL_ATI_texture_env_combine3",
|
||||
#if defined (MESA_packed_depth_stencil)
|
||||
"GL_MESA_packed_depth_stencil",
|
||||
#endif
|
||||
NULL
|
||||
{ "GL_ARB_multitexture", NULL },
|
||||
{ "GL_ARB_texture_env_add", NULL },
|
||||
{ "GL_ARB_texture_env_combine", NULL },
|
||||
{ "GL_ARB_texture_env_crossbar", NULL },
|
||||
{ "GL_EXT_texture_env_combine", NULL },
|
||||
{ "GL_EXT_texture_edge_clamp", NULL },
|
||||
{ "GL_ATI_texture_env_combine3", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static const char * const card_extensions[] =
|
||||
static const struct dri_extension card_extensions[] =
|
||||
{
|
||||
"GL_ARB_multisample",
|
||||
"GL_ARB_texture_compression",
|
||||
"GL_ARB_texture_rectangle",
|
||||
"GL_EXT_blend_logic_op",
|
||||
"GL_EXT_fog_coord",
|
||||
"GL_EXT_multi_draw_arrays",
|
||||
{ "GL_ARB_multisample", GL_ARB_multisample_functions },
|
||||
{ "GL_ARB_texture_compression", GL_ARB_texture_compression_functions },
|
||||
{ "GL_ARB_texture_rectangle", NULL },
|
||||
{ "GL_EXT_blend_logic_op", NULL },
|
||||
{ "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
|
||||
{ "GL_EXT_multi_draw_arrays", GL_EXT_multi_draw_arrays_functions },
|
||||
/* paletted_textures currently doesn't work, but we could fix them later */
|
||||
#if 0
|
||||
"GL_EXT_shared_texture_palette",
|
||||
"GL_EXT_paletted_texture",
|
||||
#if defined( need_GL_EXT_paletted_texture )
|
||||
{ "GL_EXT_shared_texture_palette", NULL },
|
||||
{ "GL_EXT_paletted_texture", GL_EXT_paletted_texture_functions },
|
||||
#endif
|
||||
"GL_EXT_secondary_color",
|
||||
"GL_EXT_stencil_wrap",
|
||||
"GL_MESA_ycbcr_texture",
|
||||
"GL_SGIS_generate_mipmap",
|
||||
NULL
|
||||
{ "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
|
||||
{ "GL_EXT_stencil_wrap", NULL },
|
||||
{ "GL_MESA_ycbcr_texture", NULL },
|
||||
{ "GL_SGIS_generate_mipmap", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static const struct dri_extension ARB_vp_extension[] = {
|
||||
{ "GL_ARB_vertex_program", GL_ARB_vertex_program_functions },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static const struct dri_extension NV_vp_extensions[] = {
|
||||
{ "GL_NV_vertex_program", GL_NV_vertex_program_functions },
|
||||
{ "GL_NV_vertex_program1_1", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static const struct dri_debug_control debug_control[] =
|
||||
@@ -608,12 +637,11 @@ mgaCreateContext( const __GLcontextModes *mesaVis,
|
||||
}
|
||||
|
||||
if ( driQueryOptionb( &mmesa->optionCache, "arb_vertex_program" ) ) {
|
||||
_mesa_enable_extension( ctx, "GL_ARB_vertex_program" );
|
||||
driInitSingleExtension( ctx, ARB_vp_extension );
|
||||
}
|
||||
|
||||
if ( driQueryOptionb( &mmesa->optionCache, "nv_vertex_program" ) ) {
|
||||
_mesa_enable_extension( ctx, "GL_NV_vertex_program" );
|
||||
_mesa_enable_extension( ctx, "GL_NV_vertex_program1_1" );
|
||||
driInitExtensions( ctx, NV_vp_extensions, GL_FALSE );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#ifndef MGALIB_INC
|
||||
#define MGALIB_INC
|
||||
|
||||
#include <stdint.h>
|
||||
#include "drm.h"
|
||||
#include "mga_drm.h"
|
||||
#include "dri_util.h"
|
||||
@@ -268,6 +269,8 @@ struct mga_context_t {
|
||||
GLuint swap_count;
|
||||
GLuint swap_missed_count;
|
||||
|
||||
uint32_t last_frame_fence;
|
||||
|
||||
PFNGLXGETUSTPROC get_ust;
|
||||
|
||||
/* Drawable, cliprect and scissor information
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
#include "mga_xmesa.h"
|
||||
#include "utils.h"
|
||||
|
||||
#define DRIVER_DATE "20030328"
|
||||
#define DRIVER_DATE "20050609"
|
||||
|
||||
|
||||
/***************************************
|
||||
|
||||
@@ -50,6 +50,49 @@
|
||||
#include "vblank.h"
|
||||
|
||||
|
||||
int
|
||||
mgaSetFence( mgaContextPtr mmesa, uint32_t * fence )
|
||||
{
|
||||
int ret = ENOSYS;
|
||||
|
||||
if ( mmesa->driScreen->drmMinor >= 2 ) {
|
||||
ret = drmCommandWriteRead( mmesa->driScreen->fd, DRM_MGA_SET_FENCE,
|
||||
fence, sizeof( uint32_t ));
|
||||
if (ret) {
|
||||
fprintf(stderr, "drmMgaSetFence: %d\n", ret);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
mgaWaitFence( mgaContextPtr mmesa, uint32_t fence, uint32_t * curr_fence )
|
||||
{
|
||||
int ret = ENOSYS;
|
||||
|
||||
if ( mmesa->driScreen->drmMinor >= 2 ) {
|
||||
uint32_t temp = fence;
|
||||
|
||||
ret = drmCommandWriteRead( mmesa->driScreen->fd,
|
||||
DRM_MGA_WAIT_FENCE,
|
||||
& temp, sizeof( uint32_t ));
|
||||
if (ret) {
|
||||
fprintf(stderr, "drmMgaSetFence: %d\n", ret);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ( curr_fence ) {
|
||||
*curr_fence = temp;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static void mga_iload_dma_ioctl(mgaContextPtr mmesa,
|
||||
unsigned long dest,
|
||||
int length)
|
||||
@@ -294,58 +337,64 @@ mgaClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
|
||||
* \bug
|
||||
* The loop in this function should have some sort of a timeout mechanism.
|
||||
*
|
||||
* \todo
|
||||
* This routine should be modified to wait on a semaphore. To do this,
|
||||
* the DRM would have to queue an interrupt when the swap command was
|
||||
* put in the DMA buffer. When the interrupt occured, the DRM would UP
|
||||
* the semaphore. This function would then just DOWN the semaphore.
|
||||
* \warning
|
||||
* This routine used to assume that the hardware lock was held on entry. It
|
||||
* now assumes that the lock is \b not held on entry.
|
||||
*/
|
||||
|
||||
static void mgaWaitForFrameCompletion( mgaContextPtr mmesa )
|
||||
{
|
||||
unsigned wait = 0;
|
||||
const GLuint last_frame = mmesa->sarea->last_frame.head;
|
||||
const GLuint last_wrap = mmesa->sarea->last_frame.wrap;
|
||||
if ( mgaWaitFence( mmesa, mmesa->last_frame_fence, NULL ) == ENOSYS ) {
|
||||
unsigned wait = 0;
|
||||
GLuint last_frame;
|
||||
GLuint last_wrap;
|
||||
|
||||
|
||||
/* The DMA routines in the kernel track a couple values in the SAREA that
|
||||
* we use here. The number of times that the primary DMA buffer has
|
||||
* "wrapped" around is tracked in last_wrap. In addition, the wrap count
|
||||
* and the buffer position at the end of the last frame are stored in
|
||||
* last_frame.wrap and last_frame.head.
|
||||
*
|
||||
* By comparing the wrap counts and the current DMA pointer value (read
|
||||
* directly from the hardware) to last_frame.head, we can determine when
|
||||
* the graphics processor has processed all of the commands for the last
|
||||
* frame.
|
||||
*
|
||||
* In this case "last frame" means the frame of the *previous* swap-
|
||||
* buffers call. This is done to prevent queuing a second buffer swap
|
||||
* before the previous swap is executed.
|
||||
*/
|
||||
while ( 1 ) {
|
||||
if ( last_wrap < mmesa->sarea->last_wrap ||
|
||||
( last_wrap == mmesa->sarea->last_wrap &&
|
||||
last_frame <= (MGA_READ( MGAREG_PRIMADDRESS ) -
|
||||
mmesa->primary_offset) ) ) {
|
||||
break;
|
||||
}
|
||||
if ( 0 ) {
|
||||
wait++;
|
||||
fprintf( stderr, " last: head=0x%06x wrap=%d\n",
|
||||
last_frame, last_wrap );
|
||||
fprintf( stderr, " head: head=0x%06lx wrap=%d\n",
|
||||
(long)(MGA_READ( MGAREG_PRIMADDRESS ) - mmesa->primary_offset),
|
||||
mmesa->sarea->last_wrap );
|
||||
}
|
||||
UPDATE_LOCK( mmesa, DRM_LOCK_FLUSH );
|
||||
LOCK_HARDWARE( mmesa );
|
||||
last_frame = mmesa->sarea->last_frame.head;
|
||||
last_wrap = mmesa->sarea->last_frame.wrap;
|
||||
|
||||
UNLOCK_HARDWARE( mmesa );
|
||||
DO_USLEEP( 1 );
|
||||
LOCK_HARDWARE( mmesa );
|
||||
}
|
||||
if ( wait )
|
||||
fprintf( stderr, "\n" );
|
||||
/* The DMA routines in the kernel track a couple values in the SAREA
|
||||
* that we use here. The number of times that the primary DMA buffer
|
||||
* has "wrapped" around is tracked in last_wrap. In addition, the
|
||||
* wrap count and the buffer position at the end of the last frame are
|
||||
* stored in last_frame.wrap and last_frame.head.
|
||||
*
|
||||
* By comparing the wrap counts and the current DMA pointer value
|
||||
* (read directly from the hardware) to last_frame.head, we can
|
||||
* determine when the graphics processor has processed all of the
|
||||
* commands for the last frame.
|
||||
*
|
||||
* In this case "last frame" means the frame of the *previous* swap-
|
||||
* buffers call. This is done to prevent queuing a second buffer swap
|
||||
* before the previous swap is executed.
|
||||
*/
|
||||
while ( 1 ) {
|
||||
if ( last_wrap < mmesa->sarea->last_wrap ||
|
||||
( last_wrap == mmesa->sarea->last_wrap &&
|
||||
last_frame <= (MGA_READ( MGAREG_PRIMADDRESS ) -
|
||||
mmesa->primary_offset) ) ) {
|
||||
break;
|
||||
}
|
||||
if ( 0 ) {
|
||||
wait++;
|
||||
fprintf( stderr, " last: head=0x%06x wrap=%d\n",
|
||||
last_frame, last_wrap );
|
||||
fprintf( stderr, " head: head=0x%06lx wrap=%d\n",
|
||||
(long)(MGA_READ( MGAREG_PRIMADDRESS ) - mmesa->primary_offset),
|
||||
mmesa->sarea->last_wrap );
|
||||
}
|
||||
UPDATE_LOCK( mmesa, DRM_LOCK_FLUSH );
|
||||
|
||||
UNLOCK_HARDWARE( mmesa );
|
||||
DO_USLEEP( 1 );
|
||||
LOCK_HARDWARE( mmesa );
|
||||
}
|
||||
if ( wait )
|
||||
fprintf( stderr, "\n" );
|
||||
|
||||
UNLOCK_HARDWARE( mmesa );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -370,9 +419,7 @@ void mgaCopyBuffer( const __DRIdrawablePrivate *dPriv )
|
||||
|
||||
FLUSH_BATCH( mmesa );
|
||||
|
||||
LOCK_HARDWARE( mmesa );
|
||||
mgaWaitForFrameCompletion( mmesa );
|
||||
UNLOCK_HARDWARE( mmesa );
|
||||
driWaitForVBlank( dPriv, & mmesa->vbl_seq, mmesa->vblank_flags,
|
||||
& missed_target );
|
||||
if ( missed_target ) {
|
||||
@@ -410,6 +457,7 @@ void mgaCopyBuffer( const __DRIdrawablePrivate *dPriv )
|
||||
}
|
||||
}
|
||||
|
||||
(void) mgaSetFence( mmesa, & mmesa->last_frame_fence );
|
||||
UNLOCK_HARDWARE( mmesa );
|
||||
|
||||
mmesa->dirty |= MGA_UPLOAD_CLIPRECTS;
|
||||
@@ -425,17 +473,12 @@ void mgaCopyBuffer( const __DRIdrawablePrivate *dPriv )
|
||||
*
|
||||
* \param ctx Context where the \c glFinish command was issued.
|
||||
*
|
||||
* \todo
|
||||
* This is overkill. The lock, update-lock, unlock sequence grabs the
|
||||
* hardware, waits for \b all hardware activity to finish, then releases the
|
||||
* hardware. A better way would be to flush the pending DMA buffers, emit
|
||||
* a SOFTRAP, and wait for the SOFTRAP.
|
||||
*
|
||||
* \sa glFinish, mgaFlush, mgaFlushDMA
|
||||
*/
|
||||
static void mgaFinish( GLcontext *ctx )
|
||||
{
|
||||
mgaContextPtr mmesa = MGA_CONTEXT(ctx);
|
||||
uint32_t fence;
|
||||
|
||||
|
||||
LOCK_HARDWARE( mmesa );
|
||||
@@ -443,12 +486,18 @@ static void mgaFinish( GLcontext *ctx )
|
||||
mgaFlushVerticesLocked( mmesa );
|
||||
}
|
||||
|
||||
if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL) {
|
||||
fprintf(stderr, "mgaRegetLockQuiescent\n");
|
||||
if ( mgaSetFence( mmesa, & fence ) == 0 ) {
|
||||
UNLOCK_HARDWARE( mmesa );
|
||||
(void) mgaWaitFence( mmesa, fence, NULL );
|
||||
}
|
||||
else {
|
||||
if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL) {
|
||||
fprintf(stderr, "mgaRegetLockQuiescent\n");
|
||||
}
|
||||
|
||||
UPDATE_LOCK( mmesa, DRM_LOCK_QUIESCENT | DRM_LOCK_FLUSH );
|
||||
UNLOCK_HARDWARE( mmesa );
|
||||
UPDATE_LOCK( mmesa, DRM_LOCK_QUIESCENT | DRM_LOCK_FLUSH );
|
||||
UNLOCK_HARDWARE( mmesa );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
dPriv->y * pitch); \
|
||||
GLuint p; \
|
||||
(void) read_buf; (void) buf; (void) p
|
||||
|
||||
|
||||
|
||||
|
||||
#define LOCAL_DEPTH_VARS \
|
||||
@@ -69,22 +69,9 @@
|
||||
|
||||
#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
|
||||
|
||||
#define CLIPPIXEL(_x,_y) (_x >= minx && _x < maxx && \
|
||||
_y >= miny && _y < maxy)
|
||||
|
||||
#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i ) \
|
||||
if ( _y < miny || _y >= maxy ) { \
|
||||
_n1 = 0, _x1 = x; \
|
||||
} else { \
|
||||
_n1 = _n; \
|
||||
_x1 = _x; \
|
||||
if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \
|
||||
if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx); \
|
||||
}
|
||||
|
||||
|
||||
#define HW_LOCK()
|
||||
|
||||
/* FIXME could/should we use dPriv->numClipRects like the other drivers? */
|
||||
#define HW_CLIPLOOP() \
|
||||
do { \
|
||||
int _nc = mmesa->numClipRects; \
|
||||
@@ -102,14 +89,10 @@
|
||||
|
||||
|
||||
|
||||
|
||||
#define Y_FLIP(_y) (height - _y - 1)
|
||||
|
||||
/* 16 bit, RGB565 color spanline and pixel functions
|
||||
*/
|
||||
|
||||
#define GET_SRC_PTR(_x, _y) (read_buf + _x * 2 + _y * pitch)
|
||||
#define GET_DST_PTR(_x, _y) ( buf + _x * 2 + _y * pitch)
|
||||
#define SPANTMP_PIXEL_FMT GL_RGB
|
||||
#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
|
||||
|
||||
@@ -119,9 +102,6 @@
|
||||
|
||||
/* 32 bit, ARGB8888 color spanline and pixel functions
|
||||
*/
|
||||
|
||||
#define GET_SRC_PTR(_x, _y) (read_buf + _x * 4 + _y * pitch)
|
||||
#define GET_DST_PTR(_x, _y) ( buf + _x * 4 + _y * pitch)
|
||||
#define SPANTMP_PIXEL_FMT GL_BGRA
|
||||
#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
|
||||
|
||||
@@ -258,7 +238,7 @@ void mgaDDInitSpanFuncs( GLcontext *ctx )
|
||||
case 4:
|
||||
#if 0
|
||||
mgaInitPointers_8888( swdd );
|
||||
|
||||
|
||||
if (!mmesa->hw_stencil) {
|
||||
swdd->ReadDepthSpan = mgaReadDepthSpan_32;
|
||||
swdd->WriteDepthSpan = mgaWriteDepthSpan_32;
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "driver.h"
|
||||
#include "drm.h"
|
||||
|
||||
@@ -66,19 +66,24 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
int R128_DEBUG = 0;
|
||||
#endif
|
||||
|
||||
static const char * const card_extensions[] =
|
||||
#define need_GL_ARB_multisample
|
||||
#define need_GL_ARB_texture_compression
|
||||
#define need_GL_EXT_blend_minmax
|
||||
#include "extension_helper.h"
|
||||
|
||||
static const struct dri_extension card_extensions[] =
|
||||
{
|
||||
"GL_ARB_multisample",
|
||||
"GL_ARB_multitexture",
|
||||
"GL_ARB_texture_compression",
|
||||
"GL_ARB_texture_env_add",
|
||||
"GL_ARB_texture_mirrored_repeat",
|
||||
"GL_EXT_blend_subtract",
|
||||
"GL_EXT_texture_edge_clamp",
|
||||
"GL_MESA_ycbcr_texture",
|
||||
"GL_NV_blend_square",
|
||||
"GL_SGIS_generate_mipmap",
|
||||
NULL
|
||||
{ "GL_ARB_multisample", GL_ARB_multisample_functions },
|
||||
{ "GL_ARB_multitexture", NULL },
|
||||
{ "GL_ARB_texture_compression", GL_ARB_texture_compression_functions },
|
||||
{ "GL_ARB_texture_env_add", NULL },
|
||||
{ "GL_ARB_texture_mirrored_repeat", NULL },
|
||||
{ "GL_EXT_blend_subtract", GL_EXT_blend_minmax_functions },
|
||||
{ "GL_EXT_texture_edge_clamp", NULL },
|
||||
{ "GL_MESA_ycbcr_texture", NULL },
|
||||
{ "GL_NV_blend_square", NULL },
|
||||
{ "GL_SGIS_generate_mipmap", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static const struct dri_debug_control debug_control[] =
|
||||
|
||||
@@ -75,41 +75,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
|
||||
|
||||
|
||||
#define CLIPPIXEL( _x, _y ) \
|
||||
((_x >= minx) && (_x < maxx) && (_y >= miny) && (_y < maxy))
|
||||
|
||||
|
||||
#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i ) \
|
||||
if ( _y < miny || _y >= maxy ) { \
|
||||
_n1 = 0, _x1 = x; \
|
||||
} else { \
|
||||
_n1 = _n; \
|
||||
_x1 = _x; \
|
||||
if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \
|
||||
if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx); \
|
||||
}
|
||||
|
||||
#define Y_FLIP( _y ) (height - _y - 1)
|
||||
|
||||
|
||||
#define HW_LOCK()
|
||||
|
||||
#define HW_CLIPLOOP() \
|
||||
do { \
|
||||
__DRIdrawablePrivate *dPriv = rmesa->driDrawable; \
|
||||
int _nc = dPriv->numClipRects; \
|
||||
\
|
||||
while ( _nc-- ) { \
|
||||
int minx = dPriv->pClipRects[_nc].x1 - dPriv->x; \
|
||||
int miny = dPriv->pClipRects[_nc].y1 - dPriv->y; \
|
||||
int maxx = dPriv->pClipRects[_nc].x2 - dPriv->x; \
|
||||
int maxy = dPriv->pClipRects[_nc].y2 - dPriv->y;
|
||||
|
||||
#define HW_ENDCLIPLOOP() \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define HW_UNLOCK()
|
||||
|
||||
|
||||
@@ -120,8 +89,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
/* 16 bit, RGB565 color spanline and pixel functions
|
||||
*/
|
||||
#define GET_SRC_PTR(_x, _y) (read_buf + _x * 2 + _y * pitch)
|
||||
#define GET_DST_PTR(_x, _y) ( buf + _x * 2 + _y * pitch)
|
||||
#define SPANTMP_PIXEL_FMT GL_RGB
|
||||
#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
|
||||
|
||||
@@ -132,8 +99,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
/* 32 bit, ARGB8888 color spanline and pixel functions
|
||||
*/
|
||||
#define GET_SRC_PTR(_x, _y) (read_buf + _x * 4 + _y * pitch)
|
||||
#define GET_DST_PTR(_x, _y) ( buf + _x * 4 + _y * pitch)
|
||||
#define SPANTMP_PIXEL_FMT GL_BGRA
|
||||
#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
|
||||
|
||||
|
||||
@@ -63,6 +63,18 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#include "r200_vtxfmt.h"
|
||||
#include "r200_maos.h"
|
||||
|
||||
#define need_GL_ARB_multisample
|
||||
#define need_GL_ARB_texture_compression
|
||||
#define need_GL_ARB_vertex_buffer_object
|
||||
#define need_GL_ARB_vertex_program
|
||||
#define need_GL_EXT_blend_minmax
|
||||
#define need_GL_EXT_fog_coord
|
||||
#define need_GL_EXT_secondary_color
|
||||
#define need_GL_EXT_blend_equation_separate
|
||||
#define need_GL_EXT_blend_func_separate
|
||||
#define need_GL_NV_vertex_program
|
||||
#include "extension_helper.h"
|
||||
|
||||
#define DRIVER_DATE "20041207"
|
||||
|
||||
#include "vblank.h"
|
||||
@@ -119,35 +131,49 @@ static const GLubyte *r200GetString( GLcontext *ctx, GLenum name )
|
||||
|
||||
/* Extension strings exported by the R200 driver.
|
||||
*/
|
||||
static const char * const card_extensions[] =
|
||||
static const struct dri_extension card_extensions[] =
|
||||
{
|
||||
"GL_ARB_multisample",
|
||||
"GL_ARB_multitexture",
|
||||
"GL_ARB_texture_border_clamp",
|
||||
"GL_ARB_texture_compression",
|
||||
"GL_ARB_texture_env_add",
|
||||
"GL_ARB_texture_env_combine",
|
||||
"GL_ARB_texture_env_dot3",
|
||||
"GL_ARB_texture_mirrored_repeat",
|
||||
"GL_ARB_vertex_buffer_object",
|
||||
"GL_EXT_blend_minmax",
|
||||
"GL_EXT_blend_subtract",
|
||||
"GL_EXT_fog_coord",
|
||||
"GL_EXT_secondary_color",
|
||||
"GL_EXT_stencil_wrap",
|
||||
"GL_EXT_texture_edge_clamp",
|
||||
"GL_EXT_texture_env_combine",
|
||||
"GL_EXT_texture_env_dot3",
|
||||
"GL_EXT_texture_filter_anisotropic",
|
||||
"GL_EXT_texture_lod_bias",
|
||||
"GL_EXT_texture_mirror_clamp",
|
||||
"GL_EXT_texture_rectangle",
|
||||
"GL_ATI_texture_env_combine3",
|
||||
"GL_ATI_texture_mirror_once",
|
||||
"GL_MESA_pack_invert",
|
||||
"GL_NV_blend_square",
|
||||
"GL_SGIS_generate_mipmap",
|
||||
NULL
|
||||
{ "GL_ARB_multisample", GL_ARB_multisample_functions },
|
||||
{ "GL_ARB_multitexture", NULL },
|
||||
{ "GL_ARB_texture_border_clamp", NULL },
|
||||
{ "GL_ARB_texture_compression", GL_ARB_texture_compression_functions },
|
||||
{ "GL_ARB_texture_env_add", NULL },
|
||||
{ "GL_ARB_texture_env_combine", NULL },
|
||||
{ "GL_ARB_texture_env_dot3", NULL },
|
||||
{ "GL_ARB_texture_mirrored_repeat", NULL },
|
||||
{ "GL_ARB_vertex_buffer_object", GL_ARB_vertex_buffer_object_functions },
|
||||
{ "GL_EXT_blend_minmax", GL_EXT_blend_minmax_functions },
|
||||
{ "GL_EXT_blend_subtract", NULL },
|
||||
{ "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
|
||||
{ "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
|
||||
{ "GL_EXT_stencil_wrap", NULL },
|
||||
{ "GL_EXT_texture_edge_clamp", NULL },
|
||||
{ "GL_EXT_texture_env_combine", NULL },
|
||||
{ "GL_EXT_texture_env_dot3", NULL },
|
||||
{ "GL_EXT_texture_filter_anisotropic", NULL },
|
||||
{ "GL_EXT_texture_lod_bias", NULL },
|
||||
{ "GL_EXT_texture_mirror_clamp", NULL },
|
||||
{ "GL_EXT_texture_rectangle", NULL },
|
||||
{ "GL_ATI_texture_env_combine3", NULL },
|
||||
{ "GL_ATI_texture_mirror_once", NULL },
|
||||
{ "GL_MESA_pack_invert", NULL },
|
||||
{ "GL_NV_blend_square", NULL },
|
||||
{ "GL_SGIS_generate_mipmap", NULL },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static const struct dri_extension blend_extensions[] = {
|
||||
{ "GL_EXT_blend_equation_separate", GL_EXT_blend_equation_separate_functions },
|
||||
{ "GL_EXT_blend_func_separate", GL_EXT_blend_func_separate_functions },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static const struct dri_extension ARB_vp_extension[] = {
|
||||
{ "GL_ARB_vertex_program", GL_ARB_vertex_program_functions }
|
||||
};
|
||||
|
||||
static const struct dri_extension NV_vp_extension[] = {
|
||||
{ "GL_NV_vertex_program", GL_NV_vertex_program_functions }
|
||||
};
|
||||
|
||||
extern const struct tnl_pipeline_stage _r200_render_stage;
|
||||
@@ -439,13 +465,12 @@ GLboolean r200CreateContext( const __GLcontextModes *glVisual,
|
||||
if (rmesa->r200Screen->drmSupportsCubeMaps)
|
||||
_mesa_enable_extension( ctx, "GL_ARB_texture_cube_map" );
|
||||
if (rmesa->r200Screen->drmSupportsBlendColor) {
|
||||
_mesa_enable_extension( ctx, "GL_EXT_blend_equation_separate" );
|
||||
_mesa_enable_extension( ctx, "GL_EXT_blend_func_separate" );
|
||||
driInitExtensions( ctx, blend_extensions, GL_FALSE );
|
||||
}
|
||||
if(driQueryOptionb(&rmesa->optionCache, "arb_vertex_program"))
|
||||
_mesa_enable_extension( ctx, "GL_ARB_vertex_program");
|
||||
driInitSingleExtension( ctx, ARB_vp_extension );
|
||||
if(driQueryOptionb(&rmesa->optionCache, "nv_vertex_program"))
|
||||
_mesa_enable_extension( ctx, "GL_NV_vertex_program");
|
||||
driInitSingleExtension( ctx, NV_vp_extension );
|
||||
|
||||
#if 0
|
||||
r200InitDriverFuncs( ctx );
|
||||
@@ -456,9 +481,7 @@ GLboolean r200CreateContext( const __GLcontextModes *glVisual,
|
||||
/* plug in a few more device driver functions */
|
||||
/* XXX these should really go right after _mesa_init_driver_functions() */
|
||||
r200InitPixelFuncs( ctx );
|
||||
#if 0
|
||||
r200InitSpanFuncs( ctx );
|
||||
#endif
|
||||
r200InitTnlFuncs( ctx );
|
||||
r200InitState( rmesa );
|
||||
r200InitSwtcl( ctx );
|
||||
|
||||
@@ -77,41 +77,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
|
||||
|
||||
|
||||
#define CLIPPIXEL( _x, _y ) \
|
||||
((_x >= minx) && (_x < maxx) && (_y >= miny) && (_y < maxy))
|
||||
|
||||
|
||||
#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i ) \
|
||||
if ( _y < miny || _y >= maxy ) { \
|
||||
_n1 = 0, _x1 = x; \
|
||||
} else { \
|
||||
_n1 = _n; \
|
||||
_x1 = _x; \
|
||||
if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \
|
||||
if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx); \
|
||||
}
|
||||
|
||||
#define Y_FLIP( _y ) (height - _y - 1)
|
||||
|
||||
|
||||
#define HW_LOCK()
|
||||
|
||||
#define HW_CLIPLOOP() \
|
||||
do { \
|
||||
__DRIdrawablePrivate *dPriv = rmesa->dri.drawable; \
|
||||
int _nc = dPriv->numClipRects; \
|
||||
\
|
||||
while ( _nc-- ) { \
|
||||
int minx = dPriv->pClipRects[_nc].x1 - dPriv->x; \
|
||||
int miny = dPriv->pClipRects[_nc].y1 - dPriv->y; \
|
||||
int maxx = dPriv->pClipRects[_nc].x2 - dPriv->x; \
|
||||
int maxy = dPriv->pClipRects[_nc].y2 - dPriv->y;
|
||||
|
||||
#define HW_ENDCLIPLOOP() \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define HW_UNLOCK()
|
||||
|
||||
|
||||
@@ -122,9 +91,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
/* 16 bit, RGB565 color spanline and pixel functions
|
||||
*/
|
||||
|
||||
#define GET_SRC_PTR(_x, _y) (read_buf + _x * 2 + _y * pitch)
|
||||
#define GET_DST_PTR(_x, _y) ( buf + _x * 2 + _y * pitch)
|
||||
#define SPANTMP_PIXEL_FMT GL_RGB
|
||||
#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
|
||||
|
||||
@@ -134,9 +100,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
/* 32 bit, ARGB8888 color spanline and pixel functions
|
||||
*/
|
||||
|
||||
#define GET_SRC_PTR(_x, _y) (read_buf + _x * 4 + _y * pitch)
|
||||
#define GET_DST_PTR(_x, _y) ( buf + _x * 4 + _y * pitch)
|
||||
#define SPANTMP_PIXEL_FMT GL_BGRA
|
||||
#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
|
||||
|
||||
@@ -354,55 +317,9 @@ static void r200SpanRenderFinish( GLcontext *ctx )
|
||||
|
||||
void r200InitSpanFuncs( GLcontext *ctx )
|
||||
{
|
||||
r200ContextPtr rmesa = R200_CONTEXT(ctx);
|
||||
struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
|
||||
|
||||
swdd->SetBuffer = r200SetBuffer;
|
||||
|
||||
switch ( rmesa->r200Screen->cpp ) {
|
||||
case 2:
|
||||
#if 0
|
||||
r200InitPointers_RGB565( swdd );
|
||||
#endif
|
||||
break;
|
||||
|
||||
case 4:
|
||||
#if 0
|
||||
r200InitPointers_ARGB8888( swdd );
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch ( rmesa->glCtx->Visual.depthBits ) {
|
||||
case 16:
|
||||
#if 0
|
||||
swdd->ReadDepthSpan = r200ReadDepthSpan_16;
|
||||
swdd->WriteDepthSpan = r200WriteDepthSpan_16;
|
||||
swdd->ReadDepthPixels = r200ReadDepthPixels_16;
|
||||
swdd->WriteDepthPixels = r200WriteDepthPixels_16;
|
||||
#endif
|
||||
break;
|
||||
|
||||
case 24:
|
||||
#if 0
|
||||
swdd->ReadDepthSpan = r200ReadDepthSpan_24_8;
|
||||
swdd->WriteDepthSpan = r200WriteDepthSpan_24_8;
|
||||
swdd->ReadDepthPixels = r200ReadDepthPixels_24_8;
|
||||
swdd->WriteDepthPixels = r200WriteDepthPixels_24_8;
|
||||
swdd->ReadStencilSpan = r200ReadStencilSpan_24_8;
|
||||
swdd->WriteStencilSpan = r200WriteStencilSpan_24_8;
|
||||
swdd->ReadStencilPixels = r200ReadStencilPixels_24_8;
|
||||
swdd->WriteStencilPixels = r200WriteStencilPixels_24_8;
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
swdd->SpanRenderStart = r200SpanRenderStart;
|
||||
swdd->SpanRenderFinish = r200SpanRenderFinish;
|
||||
}
|
||||
|
||||
@@ -220,6 +220,13 @@ void r200ChooseVertexState( GLcontext *ctx )
|
||||
r200ContextPtr rmesa = R200_CONTEXT( ctx );
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
|
||||
/* We must ensure that we don't do _tnl_need_projected_coords while in a
|
||||
* rasterization fallback. As this function will be called again when we
|
||||
* leave a rasterization fallback, we can just skip it for now.
|
||||
*/
|
||||
if (rmesa->Fallback != 0)
|
||||
return;
|
||||
|
||||
GLuint vte = rmesa->hw.vte.cmd[VTE_SE_VTE_CNTL];
|
||||
GLuint vap = rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL];
|
||||
|
||||
@@ -675,7 +682,6 @@ void r200Fallback( GLcontext *ctx, GLuint bit, GLboolean mode )
|
||||
R200_FIREVERTICES( rmesa );
|
||||
TCL_FALLBACK( ctx, R200_TCL_FALLBACK_RASTER, GL_TRUE );
|
||||
_swsetup_Wakeup( ctx );
|
||||
_tnl_need_projected_coords( ctx, GL_TRUE );
|
||||
rmesa->swtcl.RenderIndex = ~0;
|
||||
if (R200_DEBUG & DEBUG_FALLBACKS) {
|
||||
fprintf(stderr, "R200 begin rasterization fallback: 0x%x %s\n",
|
||||
|
||||
@@ -58,6 +58,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#include "tnl/t_context.h"
|
||||
#include "tnl/t_array_api.h"
|
||||
|
||||
#include "dispatch.h"
|
||||
|
||||
static void r200VtxFmtFlushVertices( GLcontext *, GLuint );
|
||||
|
||||
static void count_func( const char *name, struct dynfn *l )
|
||||
@@ -411,13 +413,13 @@ static void dispatch_multitexcoord( GLuint count, GLuint unit, GLfloat * f )
|
||||
{
|
||||
switch( count ) {
|
||||
case 3:
|
||||
GL_CALL(MultiTexCoord3fvARB)( GL_TEXTURE0+unit, f );
|
||||
CALL_MultiTexCoord3fvARB(GET_DISPATCH(), (GL_TEXTURE0+unit, f));
|
||||
break;
|
||||
case 2:
|
||||
GL_CALL(MultiTexCoord2fvARB)( GL_TEXTURE0+unit, f );
|
||||
CALL_MultiTexCoord2fvARB(GET_DISPATCH(), (GL_TEXTURE0+unit, f));
|
||||
break;
|
||||
case 1:
|
||||
GL_CALL(MultiTexCoord1fvARB)( GL_TEXTURE0+unit, f );
|
||||
CALL_MultiTexCoord1fvARB(GET_DISPATCH(), (GL_TEXTURE0+unit, f));
|
||||
break;
|
||||
default:
|
||||
assert( count == 0 );
|
||||
@@ -465,7 +467,7 @@ void VFMT_FALLBACK( const char *caller )
|
||||
assert(rmesa->dma.flush == 0);
|
||||
rmesa->vb.fell_back = GL_TRUE;
|
||||
rmesa->vb.installed = GL_FALSE;
|
||||
GL_CALL(Begin)( prim );
|
||||
CALL_Begin(GET_DISPATCH(), (prim));
|
||||
|
||||
if (rmesa->vb.installed_color_3f_sz == 4)
|
||||
alpha = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3];
|
||||
@@ -476,30 +478,30 @@ void VFMT_FALLBACK( const char *caller )
|
||||
GLuint offset = 3;
|
||||
|
||||
if (ind0 & R200_VTX_N0) {
|
||||
GL_CALL(Normal3fv)( &tmp[i][offset] );
|
||||
CALL_Normal3fv(GET_DISPATCH(), (&tmp[i][offset]));
|
||||
offset += 3;
|
||||
}
|
||||
|
||||
if (ind0 & R200_VTX_DISCRETE_FOG) {
|
||||
GL_CALL(FogCoordfvEXT)( &tmp[i][offset] );
|
||||
CALL_FogCoordfvEXT(GET_DISPATCH(), (&tmp[i][offset]));
|
||||
offset++;
|
||||
}
|
||||
|
||||
if (VTX_COLOR(ind0, 0) == R200_VTX_PK_RGBA) {
|
||||
GL_CALL(Color4ubv)( (GLubyte *)&tmp[i][offset] );
|
||||
CALL_Color4ubv(GET_DISPATCH(), ((GLubyte *)&tmp[i][offset]));
|
||||
offset++;
|
||||
}
|
||||
else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGBA) {
|
||||
GL_CALL(Color4fv)( &tmp[i][offset] );
|
||||
CALL_Color4fv(GET_DISPATCH(), (&tmp[i][offset]));
|
||||
offset+=4;
|
||||
}
|
||||
else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGB) {
|
||||
GL_CALL(Color3fv)( &tmp[i][offset] );
|
||||
CALL_Color3fv(GET_DISPATCH(), (&tmp[i][offset]));
|
||||
offset+=3;
|
||||
}
|
||||
|
||||
if (VTX_COLOR(ind0, 1) == R200_VTX_PK_RGBA) {
|
||||
GL_CALL(SecondaryColor3ubvEXT)( (GLubyte *)&tmp[i][offset] );
|
||||
CALL_SecondaryColor3ubvEXT(GET_DISPATCH(), ((GLubyte *)&tmp[i][offset]));
|
||||
offset++;
|
||||
}
|
||||
|
||||
@@ -509,42 +511,42 @@ void VFMT_FALLBACK( const char *caller )
|
||||
offset += count;
|
||||
}
|
||||
|
||||
GL_CALL(Vertex3fv)( &tmp[i][0] );
|
||||
CALL_Vertex3fv(GET_DISPATCH(), (&tmp[i][0]));
|
||||
}
|
||||
|
||||
/* Replay current vertex
|
||||
*/
|
||||
if (ind0 & R200_VTX_N0)
|
||||
GL_CALL(Normal3fv)( rmesa->vb.normalptr );
|
||||
CALL_Normal3fv(GET_DISPATCH(), (rmesa->vb.normalptr));
|
||||
if (ind0 & R200_VTX_DISCRETE_FOG) {
|
||||
GL_CALL(FogCoordfvEXT)( rmesa->vb.fogptr );
|
||||
CALL_FogCoordfvEXT(GET_DISPATCH(), (rmesa->vb.fogptr));
|
||||
}
|
||||
|
||||
if (VTX_COLOR(ind0, 0) == R200_VTX_PK_RGBA) {
|
||||
GL_CALL(Color4ub)( rmesa->vb.colorptr->red,
|
||||
rmesa->vb.colorptr->green,
|
||||
rmesa->vb.colorptr->blue,
|
||||
rmesa->vb.colorptr->alpha );
|
||||
CALL_Color4ub(GET_DISPATCH(), (rmesa->vb.colorptr->red,
|
||||
rmesa->vb.colorptr->green,
|
||||
rmesa->vb.colorptr->blue,
|
||||
rmesa->vb.colorptr->alpha));
|
||||
}
|
||||
else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGBA) {
|
||||
GL_CALL(Color4fv)( rmesa->vb.floatcolorptr );
|
||||
CALL_Color4fv(GET_DISPATCH(), (rmesa->vb.floatcolorptr));
|
||||
}
|
||||
else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGB) {
|
||||
if (rmesa->vb.installed_color_3f_sz == 4 && alpha != 1.0) {
|
||||
GL_CALL(Color4f)( rmesa->vb.floatcolorptr[0],
|
||||
rmesa->vb.floatcolorptr[1],
|
||||
rmesa->vb.floatcolorptr[2],
|
||||
alpha );
|
||||
CALL_Color4f(GET_DISPATCH(), (rmesa->vb.floatcolorptr[0],
|
||||
rmesa->vb.floatcolorptr[1],
|
||||
rmesa->vb.floatcolorptr[2],
|
||||
alpha));
|
||||
}
|
||||
else {
|
||||
GL_CALL(Color3fv)( rmesa->vb.floatcolorptr );
|
||||
CALL_Color3fv(GET_DISPATCH(), (rmesa->vb.floatcolorptr));
|
||||
}
|
||||
}
|
||||
|
||||
if (VTX_COLOR(ind0, 1) == R200_VTX_PK_RGBA)
|
||||
GL_CALL(SecondaryColor3ubEXT)( rmesa->vb.specptr->red,
|
||||
rmesa->vb.specptr->green,
|
||||
rmesa->vb.specptr->blue );
|
||||
CALL_SecondaryColor3ubEXT(GET_DISPATCH(), (rmesa->vb.specptr->red,
|
||||
rmesa->vb.specptr->green,
|
||||
rmesa->vb.specptr->blue));
|
||||
|
||||
for ( unit = 0 ; unit < ctx->Const.MaxTextureUnits ; unit++ ) {
|
||||
count = VTX_TEXn_COUNT( ind1, unit );
|
||||
@@ -882,7 +884,7 @@ static void r200_Materialfv( GLenum face, GLenum pname,
|
||||
|
||||
if (rmesa->vb.prim[0] != GL_POLYGON+1) {
|
||||
VFMT_FALLBACK( __FUNCTION__ );
|
||||
GL_CALL(Materialfv)( face, pname, params );
|
||||
CALL_Materialfv(GET_DISPATCH(), (face, pname, params));
|
||||
return;
|
||||
}
|
||||
_mesa_noop_Materialfv( face, pname, params );
|
||||
@@ -921,7 +923,7 @@ static void r200_Begin( GLenum mode )
|
||||
r200VtxfmtValidate( ctx );
|
||||
|
||||
if (!rmesa->vb.installed) {
|
||||
GL_CALL(Begin)( mode );
|
||||
CALL_Begin(GET_DISPATCH(), (mode));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,6 +44,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#include "r200_vtxfmt.h"
|
||||
#include "r200_tcl.h"
|
||||
|
||||
#include "dispatch.h"
|
||||
|
||||
/* Fallback versions of all the entrypoints for situations where
|
||||
* codegen isn't available. This is still a lot faster than the
|
||||
* vb/pipeline implementation in Mesa.
|
||||
@@ -578,7 +580,7 @@ static void r200_MultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t)
|
||||
break;
|
||||
default:
|
||||
VFMT_FALLBACK(__FUNCTION__);
|
||||
GL_CALL(MultiTexCoord2fARB)(target, s, t);
|
||||
CALL_MultiTexCoord2fARB(GET_DISPATCH(), (target, s, t));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -599,7 +601,7 @@ static void r200_MultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat
|
||||
break;
|
||||
default:
|
||||
VFMT_FALLBACK(__FUNCTION__);
|
||||
GL_CALL(MultiTexCoord3fARB)(target, s, t, r);
|
||||
CALL_MultiTexCoord3fARB(GET_DISPATCH(), (target, s, t, r));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -683,15 +685,15 @@ static void choose_##FN ARGS1 \
|
||||
fprintf(stderr, "%s -- cached codegen\n", __FUNCTION__ ); \
|
||||
\
|
||||
if (dfn) \
|
||||
ctx->Exec->FN = (FNTYPE)(dfn->code); \
|
||||
SET_ ## FN (ctx->Exec, (FNTYPE)(dfn->code)); \
|
||||
else { \
|
||||
if (R200_DEBUG & DEBUG_CODEGEN) \
|
||||
fprintf(stderr, "%s -- generic version\n", __FUNCTION__ ); \
|
||||
ctx->Exec->FN = r200_##FN; \
|
||||
SET_ ## FN (ctx->Exec, r200_##FN); \
|
||||
} \
|
||||
\
|
||||
ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT; \
|
||||
ctx->Exec->FN ARGS2; \
|
||||
CALL_ ## FN (ctx->Exec, ARGS2); \
|
||||
}
|
||||
|
||||
|
||||
@@ -715,7 +717,7 @@ static void choose_##FN ARGS1 \
|
||||
key[1] = rmesa->vb.vtxfmt_1 & MASK1; \
|
||||
\
|
||||
if (VTX_COLOR(rmesa->vb.vtxfmt_0,0) == R200_VTX_PK_RGBA) { \
|
||||
ctx->Exec->FN = r200_##FN##_ub; \
|
||||
SET_ ## FN (ctx->Exec, r200_##FN##_ub); \
|
||||
} \
|
||||
else if (VTX_COLOR(rmesa->vb.vtxfmt_0,0) == R200_VTX_FP_RGB) { \
|
||||
\
|
||||
@@ -725,15 +727,15 @@ static void choose_##FN ARGS1 \
|
||||
if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) { \
|
||||
r200_copy_to_current( ctx ); \
|
||||
_mesa_install_exec_vtxfmt( ctx, &rmesa->vb.vtxfmt ); \
|
||||
ctx->Exec->FN ARGS2; \
|
||||
CALL_ ## FN (ctx->Exec, ARGS2); \
|
||||
return; \
|
||||
} \
|
||||
} \
|
||||
\
|
||||
ctx->Exec->FN = r200_##FN##_3f; \
|
||||
SET_ ## FN (ctx->Exec, r200_##FN##_3f); \
|
||||
} \
|
||||
else { \
|
||||
ctx->Exec->FN = r200_##FN##_4f; \
|
||||
SET_ ## FN (ctx->Exec, r200_##FN##_4f); \
|
||||
} \
|
||||
\
|
||||
\
|
||||
@@ -743,13 +745,13 @@ static void choose_##FN ARGS1 \
|
||||
if (dfn) { \
|
||||
if (R200_DEBUG & DEBUG_CODEGEN) \
|
||||
fprintf(stderr, "%s -- codegen version\n", __FUNCTION__ ); \
|
||||
ctx->Exec->FN = (FNTYPE)dfn->code; \
|
||||
SET_ ## FN (ctx->Exec, (FNTYPE)dfn->code); \
|
||||
} \
|
||||
else if (R200_DEBUG & DEBUG_CODEGEN) \
|
||||
fprintf(stderr, "%s -- 'c' version\n", __FUNCTION__ ); \
|
||||
\
|
||||
ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT; \
|
||||
ctx->Exec->FN ARGS2; \
|
||||
CALL_ ## FN (ctx->Exec, ARGS2); \
|
||||
}
|
||||
|
||||
|
||||
@@ -778,16 +780,16 @@ static void choose_##FN ARGS1 \
|
||||
fprintf(stderr, "%s -- cached version\n", __FUNCTION__ ); \
|
||||
\
|
||||
if (dfn) \
|
||||
ctx->Exec->FN = (FNTYPE)(dfn->code); \
|
||||
SET_ ## FN (ctx->Exec, (FNTYPE)(dfn->code)); \
|
||||
else { \
|
||||
if (R200_DEBUG & DEBUG_CODEGEN) \
|
||||
fprintf(stderr, "%s -- generic version\n", __FUNCTION__ ); \
|
||||
ctx->Exec->FN = (VTX_COLOR(rmesa->vb.vtxfmt_0,1) == R200_VTX_PK_RGBA) \
|
||||
? r200_##FN##_ub : r200_##FN##_3f; \
|
||||
SET_ ## FN (ctx->Exec, (VTX_COLOR(rmesa->vb.vtxfmt_0,1) == R200_VTX_PK_RGBA) \
|
||||
? r200_##FN##_ub : r200_##FN##_3f); \
|
||||
} \
|
||||
\
|
||||
ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT; \
|
||||
ctx->Exec->FN ARGS2; \
|
||||
CALL_ ## FN (ctx->Exec, ARGS2); \
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -66,9 +66,10 @@ int r300FlushCmdBufLocked(r300ContextPtr r300, const char* caller)
|
||||
drm_radeon_cmd_buffer_t cmd;
|
||||
int start;
|
||||
|
||||
if (r300->radeon.lost_context)
|
||||
if (r300->radeon.lost_context) {
|
||||
start = 0;
|
||||
else
|
||||
r300->radeon.lost_context = GL_FALSE;
|
||||
} else
|
||||
start = r300->cmdbuf.count_reemit;
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_IOCTL) {
|
||||
@@ -169,6 +170,19 @@ static __inline__ void r300DoEmitState(r300ContextPtr r300, GLboolean dirty)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Emit WAIT */
|
||||
*dest = cmdwait(R300_WAIT_3D | R300_WAIT_3D_CLEAN);
|
||||
dest ++;
|
||||
r300->cmdbuf.count_used ++;
|
||||
|
||||
/* Emit END3D */
|
||||
*dest = cmdpacify();
|
||||
dest ++;
|
||||
r300->cmdbuf.count_used ++;
|
||||
|
||||
/* Emit actual atoms */
|
||||
|
||||
foreach(atom, &r300->hw.atomlist) {
|
||||
if ((atom->dirty || r300->hw.all_dirty) == dirty) {
|
||||
int dwords = (*atom->check)(r300, atom);
|
||||
@@ -222,33 +236,6 @@ void r300EmitState(r300ContextPtr r300)
|
||||
r300->hw.all_dirty = GL_FALSE;
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
static __inline__ uint32_t cmducs(int reg, int count)
|
||||
{
|
||||
drm_r300_cmd_header_t cmd;
|
||||
|
||||
cmd.unchecked_state.cmd_type = R300_CMD_UNCHECKED_STATE;
|
||||
cmd.unchecked_state.count = count;
|
||||
cmd.unchecked_state.reghi = ((unsigned int)reg & 0xFF00) >> 8;
|
||||
cmd.unchecked_state.reglo = ((unsigned int)reg & 0x00FF);
|
||||
|
||||
return cmd.u;
|
||||
}
|
||||
|
||||
static __inline__ uint32_t cmdvpu(int addr, int count)
|
||||
{
|
||||
drm_r300_cmd_header_t cmd;
|
||||
|
||||
cmd.vpu.cmd_type = R300_CMD_VPU;
|
||||
cmd.vpu.count = count;
|
||||
cmd.vpu.adrhi = ((unsigned int)addr & 0xFF00) >> 8;
|
||||
cmd.vpu.adrlo = ((unsigned int)addr & 0x00FF);
|
||||
|
||||
return cmd.u;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define CHECK( NM, COUNT ) \
|
||||
static int check_##NM( r300ContextPtr r300, \
|
||||
struct r300_state_atom* atom ) \
|
||||
@@ -257,15 +244,16 @@ static int check_##NM( r300ContextPtr r300, \
|
||||
return (COUNT); \
|
||||
}
|
||||
|
||||
#define ucscount(ptr) (((drm_r300_cmd_header_t*)(ptr))->unchecked_state.count)
|
||||
#define vpucount(ptr) (((drm_r300_cmd_header_t*)(ptr))->vpu.count)
|
||||
#define packet0_count(ptr) (((drm_r300_cmd_header_t*)(ptr))->packet0.count)
|
||||
#define vpu_count(ptr) (((drm_r300_cmd_header_t*)(ptr))->vpu.count)
|
||||
|
||||
CHECK( always, atom->cmd_size )
|
||||
CHECK( never, 0 )
|
||||
CHECK( variable, ucscount(atom->cmd) ? (1 + ucscount(atom->cmd)) : 0 )
|
||||
CHECK( vpu, vpucount(atom->cmd) ? (1 + vpucount(atom->cmd)*4) : 0 )
|
||||
CHECK( variable, packet0_count(atom->cmd) ? (1 + packet0_count(atom->cmd)) : 0 )
|
||||
CHECK( vpu, vpu_count(atom->cmd) ? (1 + vpu_count(atom->cmd)*4) : 0 )
|
||||
|
||||
#undef ucscount
|
||||
#undef packet0_count
|
||||
#undef vpu_count
|
||||
|
||||
#define ALLOC_STATE( ATOM, CHK, SZ, NM, IDX ) \
|
||||
do { \
|
||||
@@ -286,8 +274,8 @@ CHECK( vpu, vpucount(atom->cmd) ? (1 + vpucount(atom->cmd)*4) : 0 )
|
||||
void r300InitCmdBuf(r300ContextPtr r300)
|
||||
{
|
||||
int size, i, mtu;
|
||||
|
||||
r300->hw.max_state_size = 0;
|
||||
|
||||
r300->hw.max_state_size = 2; /* reserve extra space for WAIT_IDLE */
|
||||
|
||||
mtu = r300->radeon.glCtx->Const.MaxTextureUnits;
|
||||
if (RADEON_DEBUG & DEBUG_TEXTURE) {
|
||||
@@ -296,131 +284,131 @@ void r300InitCmdBuf(r300ContextPtr r300)
|
||||
|
||||
/* Initialize state atoms */
|
||||
ALLOC_STATE( vpt, always, R300_VPT_CMDSIZE, "vpt", 0 );
|
||||
r300->hw.vpt.cmd[R300_VPT_CMD_0] = cmducs(R300_SE_VPORT_XSCALE, 6);
|
||||
r300->hw.vpt.cmd[R300_VPT_CMD_0] = cmdpacket0(R300_SE_VPORT_XSCALE, 6);
|
||||
ALLOC_STATE( unk2080, always, 2, "unk2080", 0 );
|
||||
r300->hw.unk2080.cmd[0] = cmducs(0x2080, 1);
|
||||
r300->hw.unk2080.cmd[0] = cmdpacket0(0x2080, 1);
|
||||
ALLOC_STATE( vte, always, 3, "vte", 0 );
|
||||
r300->hw.vte.cmd[0] = cmducs(R300_SE_VTE_CNTL, 2);
|
||||
r300->hw.vte.cmd[0] = cmdpacket0(R300_SE_VTE_CNTL, 2);
|
||||
ALLOC_STATE( unk2134, always, 3, "unk2134", 0 );
|
||||
r300->hw.unk2134.cmd[0] = cmducs(0x2134, 2);
|
||||
r300->hw.unk2134.cmd[0] = cmdpacket0(0x2134, 2);
|
||||
ALLOC_STATE( unk2140, always, 2, "unk2140", 0 );
|
||||
r300->hw.unk2140.cmd[0] = cmducs(0x2140, 1);
|
||||
r300->hw.unk2140.cmd[0] = cmdpacket0(0x2140, 1);
|
||||
ALLOC_STATE( vir[0], variable, R300_VIR_CMDSIZE, "vir/0", 0 );
|
||||
r300->hw.vir[0].cmd[R300_VIR_CMD_0] = cmducs(R300_VAP_INPUT_ROUTE_0_0, 1);
|
||||
r300->hw.vir[0].cmd[R300_VIR_CMD_0] = cmdpacket0(R300_VAP_INPUT_ROUTE_0_0, 1);
|
||||
ALLOC_STATE( vir[1], variable, R300_VIR_CMDSIZE, "vir/1", 1 );
|
||||
r300->hw.vir[1].cmd[R300_VIR_CMD_0] = cmducs(R300_VAP_INPUT_ROUTE_1_0, 1);
|
||||
r300->hw.vir[1].cmd[R300_VIR_CMD_0] = cmdpacket0(R300_VAP_INPUT_ROUTE_1_0, 1);
|
||||
ALLOC_STATE( vic, always, R300_VIC_CMDSIZE, "vic", 0 );
|
||||
r300->hw.vic.cmd[R300_VIC_CMD_0] = cmducs(R300_VAP_INPUT_CNTL_0, 2);
|
||||
r300->hw.vic.cmd[R300_VIC_CMD_0] = cmdpacket0(R300_VAP_INPUT_CNTL_0, 2);
|
||||
ALLOC_STATE( unk21DC, always, 2, "unk21DC", 0 );
|
||||
r300->hw.unk21DC.cmd[0] = cmducs(0x21DC, 1);
|
||||
r300->hw.unk21DC.cmd[0] = cmdpacket0(0x21DC, 1);
|
||||
ALLOC_STATE( unk221C, always, 2, "unk221C", 0 );
|
||||
r300->hw.unk221C.cmd[0] = cmducs(0x221C, 1);
|
||||
r300->hw.unk221C.cmd[0] = cmdpacket0(0x221C, 1);
|
||||
ALLOC_STATE( unk2220, always, 5, "unk2220", 0 );
|
||||
r300->hw.unk2220.cmd[0] = cmducs(0x2220, 4);
|
||||
r300->hw.unk2220.cmd[0] = cmdpacket0(0x2220, 4);
|
||||
ALLOC_STATE( unk2288, always, 2, "unk2288", 0 );
|
||||
r300->hw.unk2288.cmd[0] = cmducs(0x2288, 1);
|
||||
r300->hw.unk2288.cmd[0] = cmdpacket0(0x2288, 1);
|
||||
ALLOC_STATE( vof, always, R300_VOF_CMDSIZE, "vof", 0 );
|
||||
r300->hw.vof.cmd[R300_VOF_CMD_0] = cmducs(R300_VAP_OUTPUT_VTX_FMT_0, 2);
|
||||
r300->hw.vof.cmd[R300_VOF_CMD_0] = cmdpacket0(R300_VAP_OUTPUT_VTX_FMT_0, 2);
|
||||
ALLOC_STATE( pvs, always, R300_PVS_CMDSIZE, "pvs", 0 );
|
||||
r300->hw.pvs.cmd[R300_PVS_CMD_0] = cmducs(R300_VAP_PVS_CNTL_1, 3);
|
||||
r300->hw.pvs.cmd[R300_PVS_CMD_0] = cmdpacket0(R300_VAP_PVS_CNTL_1, 3);
|
||||
ALLOC_STATE( gb_enable, always, 2, "gb_enable", 0 );
|
||||
r300->hw.gb_enable.cmd[0] = cmducs(R300_GB_ENABLE, 1);
|
||||
r300->hw.gb_enable.cmd[0] = cmdpacket0(R300_GB_ENABLE, 1);
|
||||
ALLOC_STATE( gb_misc, always, R300_GB_MISC_CMDSIZE, "gb_misc", 0 );
|
||||
r300->hw.gb_misc.cmd[0] = cmducs(R300_GB_MSPOS0, 5);
|
||||
r300->hw.gb_misc.cmd[0] = cmdpacket0(R300_GB_MSPOS0, 5);
|
||||
ALLOC_STATE( txe, always, R300_TXE_CMDSIZE, "txe", 0 );
|
||||
r300->hw.txe.cmd[R300_TXE_CMD_0] = cmducs(R300_TX_ENABLE, 1);
|
||||
r300->hw.txe.cmd[R300_TXE_CMD_0] = cmdpacket0(R300_TX_ENABLE, 1);
|
||||
ALLOC_STATE( unk4200, always, 5, "unk4200", 0 );
|
||||
r300->hw.unk4200.cmd[0] = cmducs(0x4200, 4);
|
||||
r300->hw.unk4200.cmd[0] = cmdpacket0(0x4200, 4);
|
||||
ALLOC_STATE( unk4214, always, 2, "unk4214", 0 );
|
||||
r300->hw.unk4214.cmd[0] = cmducs(0x4214, 1);
|
||||
r300->hw.unk4214.cmd[0] = cmdpacket0(0x4214, 1);
|
||||
ALLOC_STATE( ps, always, R300_PS_CMDSIZE, "ps", 0 );
|
||||
r300->hw.ps.cmd[0] = cmducs(R300_RE_POINTSIZE, 1);
|
||||
r300->hw.ps.cmd[0] = cmdpacket0(R300_RE_POINTSIZE, 1);
|
||||
ALLOC_STATE( unk4230, always, 4, "unk4230", 0 );
|
||||
r300->hw.unk4230.cmd[0] = cmducs(0x4230, 3);
|
||||
r300->hw.unk4230.cmd[0] = cmdpacket0(0x4230, 3);
|
||||
ALLOC_STATE( lcntl, always, 2, "lcntl", 0 );
|
||||
r300->hw.lcntl.cmd[0] = cmducs(R300_RE_LINE_CNT, 1);
|
||||
r300->hw.lcntl.cmd[0] = cmdpacket0(R300_RE_LINE_CNT, 1);
|
||||
ALLOC_STATE( unk4260, always, 4, "unk4260", 0 );
|
||||
r300->hw.unk4260.cmd[0] = cmducs(0x4260, 3);
|
||||
r300->hw.unk4260.cmd[0] = cmdpacket0(0x4260, 3);
|
||||
ALLOC_STATE( unk4274, always, 5, "unk4274", 0 );
|
||||
r300->hw.unk4274.cmd[0] = cmducs(0x4274, 4);
|
||||
r300->hw.unk4274.cmd[0] = cmdpacket0(0x4274, 4);
|
||||
ALLOC_STATE( unk4288, always, 6, "unk4288", 0 );
|
||||
r300->hw.unk4288.cmd[0] = cmducs(0x4288, 5);
|
||||
r300->hw.unk4288.cmd[0] = cmdpacket0(0x4288, 5);
|
||||
ALLOC_STATE( unk42A0, always, 2, "unk42A0", 0 );
|
||||
r300->hw.unk42A0.cmd[0] = cmducs(0x42A0, 1);
|
||||
r300->hw.unk42A0.cmd[0] = cmdpacket0(0x42A0, 1);
|
||||
ALLOC_STATE( zbs, always, R300_ZBS_CMDSIZE, "zbs", 0 );
|
||||
r300->hw.zbs.cmd[R300_ZBS_CMD_0] = cmducs(R300_RE_ZBIAS_T_FACTOR, 4);
|
||||
r300->hw.zbs.cmd[R300_ZBS_CMD_0] = cmdpacket0(R300_RE_ZBIAS_T_FACTOR, 4);
|
||||
ALLOC_STATE( unk42B4, always, 2, "unk42B4", 0 );
|
||||
r300->hw.unk42B4.cmd[0] = cmducs(0x42B4, 1);
|
||||
r300->hw.unk42B4.cmd[0] = cmdpacket0(0x42B4, 1);
|
||||
ALLOC_STATE( cul, always, R300_CUL_CMDSIZE, "cul", 0 );
|
||||
r300->hw.cul.cmd[R300_CUL_CMD_0] = cmducs(R300_RE_CULL_CNTL, 1);
|
||||
r300->hw.cul.cmd[R300_CUL_CMD_0] = cmdpacket0(R300_RE_CULL_CNTL, 1);
|
||||
ALLOC_STATE( unk42C0, always, 3, "unk42C0", 0 );
|
||||
r300->hw.unk42C0.cmd[0] = cmducs(0x42C0, 2);
|
||||
r300->hw.unk42C0.cmd[0] = cmdpacket0(0x42C0, 2);
|
||||
ALLOC_STATE( rc, always, R300_RC_CMDSIZE, "rc", 0 );
|
||||
r300->hw.rc.cmd[R300_RC_CMD_0] = cmducs(R300_RS_CNTL_0, 2);
|
||||
r300->hw.rc.cmd[R300_RC_CMD_0] = cmdpacket0(R300_RS_CNTL_0, 2);
|
||||
ALLOC_STATE( ri, always, R300_RI_CMDSIZE, "ri", 0 );
|
||||
r300->hw.ri.cmd[R300_RI_CMD_0] = cmducs(R300_RS_INTERP_0, 8);
|
||||
r300->hw.ri.cmd[R300_RI_CMD_0] = cmdpacket0(R300_RS_INTERP_0, 8);
|
||||
ALLOC_STATE( rr, variable, R300_RR_CMDSIZE, "rr", 0 );
|
||||
r300->hw.rr.cmd[R300_RR_CMD_0] = cmducs(R300_RS_ROUTE_0, 1);
|
||||
r300->hw.rr.cmd[R300_RR_CMD_0] = cmdpacket0(R300_RS_ROUTE_0, 1);
|
||||
ALLOC_STATE( unk43A4, always, 3, "unk43A4", 0 );
|
||||
r300->hw.unk43A4.cmd[0] = cmducs(0x43A4, 2);
|
||||
r300->hw.unk43A4.cmd[0] = cmdpacket0(0x43A4, 2);
|
||||
ALLOC_STATE( unk43E8, always, 2, "unk43E8", 0 );
|
||||
r300->hw.unk43E8.cmd[0] = cmducs(0x43E8, 1);
|
||||
r300->hw.unk43E8.cmd[0] = cmdpacket0(0x43E8, 1);
|
||||
ALLOC_STATE( fp, always, R300_FP_CMDSIZE, "fp", 0 );
|
||||
r300->hw.fp.cmd[R300_FP_CMD_0] = cmducs(R300_PFS_CNTL_0, 3);
|
||||
r300->hw.fp.cmd[R300_FP_CMD_1] = cmducs(R300_PFS_NODE_0, 4);
|
||||
r300->hw.fp.cmd[R300_FP_CMD_0] = cmdpacket0(R300_PFS_CNTL_0, 3);
|
||||
r300->hw.fp.cmd[R300_FP_CMD_1] = cmdpacket0(R300_PFS_NODE_0, 4);
|
||||
ALLOC_STATE( fpt, variable, R300_FPT_CMDSIZE, "fpt", 0 );
|
||||
r300->hw.fpt.cmd[R300_FPT_CMD_0] = cmducs(R300_PFS_TEXI_0, 0);
|
||||
r300->hw.fpt.cmd[R300_FPT_CMD_0] = cmdpacket0(R300_PFS_TEXI_0, 0);
|
||||
ALLOC_STATE( unk46A4, always, 6, "unk46A4", 0 );
|
||||
r300->hw.unk46A4.cmd[0] = cmducs(0x46A4, 5);
|
||||
r300->hw.unk46A4.cmd[0] = cmdpacket0(0x46A4, 5);
|
||||
ALLOC_STATE( fpi[0], variable, R300_FPI_CMDSIZE, "fpi/0", 0 );
|
||||
r300->hw.fpi[0].cmd[R300_FPI_CMD_0] = cmducs(R300_PFS_INSTR0_0, 1);
|
||||
r300->hw.fpi[0].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_PFS_INSTR0_0, 1);
|
||||
ALLOC_STATE( fpi[1], variable, R300_FPI_CMDSIZE, "fpi/1", 1 );
|
||||
r300->hw.fpi[1].cmd[R300_FPI_CMD_0] = cmducs(R300_PFS_INSTR1_0, 1);
|
||||
r300->hw.fpi[1].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_PFS_INSTR1_0, 1);
|
||||
ALLOC_STATE( fpi[2], variable, R300_FPI_CMDSIZE, "fpi/2", 2 );
|
||||
r300->hw.fpi[2].cmd[R300_FPI_CMD_0] = cmducs(R300_PFS_INSTR2_0, 1);
|
||||
r300->hw.fpi[2].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_PFS_INSTR2_0, 1);
|
||||
ALLOC_STATE( fpi[3], variable, R300_FPI_CMDSIZE, "fpi/3", 3 );
|
||||
r300->hw.fpi[3].cmd[R300_FPI_CMD_0] = cmducs(R300_PFS_INSTR3_0, 1);
|
||||
r300->hw.fpi[3].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_PFS_INSTR3_0, 1);
|
||||
ALLOC_STATE( unk4BC0, always, 2, "unk4BC0", 0 );
|
||||
r300->hw.unk4BC0.cmd[0] = cmducs(0x4BC0, 1);
|
||||
r300->hw.unk4BC0.cmd[0] = cmdpacket0(0x4BC0, 1);
|
||||
ALLOC_STATE( unk4BC8, always, 4, "unk4BC8", 0 );
|
||||
r300->hw.unk4BC8.cmd[0] = cmducs(0x4BC8, 3);
|
||||
r300->hw.unk4BC8.cmd[0] = cmdpacket0(0x4BC8, 3);
|
||||
ALLOC_STATE( at, always, R300_AT_CMDSIZE, "at", 0 );
|
||||
r300->hw.at.cmd[R300_AT_CMD_0] = cmducs(R300_PP_ALPHA_TEST, 2);
|
||||
r300->hw.at.cmd[R300_AT_CMD_0] = cmdpacket0(R300_PP_ALPHA_TEST, 2);
|
||||
ALLOC_STATE( unk4BD8, always, 2, "unk4BD8", 0 );
|
||||
r300->hw.unk4BD8.cmd[0] = cmducs(0x4BD8, 1);
|
||||
r300->hw.unk4BD8.cmd[0] = cmdpacket0(0x4BD8, 1);
|
||||
ALLOC_STATE( fpp, variable, R300_FPP_CMDSIZE, "fpp", 0 );
|
||||
r300->hw.fpp.cmd[R300_FPP_CMD_0] = cmducs(R300_PFS_PARAM_0_X, 0);
|
||||
r300->hw.fpp.cmd[R300_FPP_CMD_0] = cmdpacket0(R300_PFS_PARAM_0_X, 0);
|
||||
ALLOC_STATE( unk4E00, always, 2, "unk4E00", 0 );
|
||||
r300->hw.unk4E00.cmd[0] = cmducs(0x4E00, 1);
|
||||
r300->hw.unk4E00.cmd[0] = cmdpacket0(0x4E00, 1);
|
||||
ALLOC_STATE( bld, always, R300_BLD_CMDSIZE, "bld", 0 );
|
||||
r300->hw.bld.cmd[R300_BLD_CMD_0] = cmducs(R300_RB3D_CBLEND, 2);
|
||||
r300->hw.bld.cmd[R300_BLD_CMD_0] = cmdpacket0(R300_RB3D_CBLEND, 2);
|
||||
ALLOC_STATE( cmk, always, R300_CMK_CMDSIZE, "cmk", 0 );
|
||||
r300->hw.cmk.cmd[R300_CMK_CMD_0] = cmducs(R300_RB3D_COLORMASK, 1);
|
||||
r300->hw.cmk.cmd[R300_CMK_CMD_0] = cmdpacket0(R300_RB3D_COLORMASK, 1);
|
||||
ALLOC_STATE( unk4E10, always, 4, "unk4E10", 0 );
|
||||
r300->hw.unk4E10.cmd[0] = cmducs(0x4E10, 3);
|
||||
r300->hw.unk4E10.cmd[0] = cmdpacket0(0x4E10, 3);
|
||||
ALLOC_STATE( cb, always, R300_CB_CMDSIZE, "cb", 0 );
|
||||
r300->hw.cb.cmd[R300_CB_CMD_0] = cmducs(R300_RB3D_COLOROFFSET0, 1);
|
||||
r300->hw.cb.cmd[R300_CB_CMD_1] = cmducs(R300_RB3D_COLORPITCH0, 1);
|
||||
r300->hw.cb.cmd[R300_CB_CMD_0] = cmdpacket0(R300_RB3D_COLOROFFSET0, 1);
|
||||
r300->hw.cb.cmd[R300_CB_CMD_1] = cmdpacket0(R300_RB3D_COLORPITCH0, 1);
|
||||
ALLOC_STATE( unk4E50, always, 10, "unk4E50", 0 );
|
||||
r300->hw.unk4E50.cmd[0] = cmducs(0x4E50, 9);
|
||||
r300->hw.unk4E50.cmd[0] = cmdpacket0(0x4E50, 9);
|
||||
ALLOC_STATE( unk4E88, always, 2, "unk4E88", 0 );
|
||||
r300->hw.unk4E88.cmd[0] = cmducs(0x4E88, 1);
|
||||
r300->hw.unk4E88.cmd[0] = cmdpacket0(0x4E88, 1);
|
||||
ALLOC_STATE( unk4EA0, always, 3, "unk4EA0 R350 only", 0 );
|
||||
r300->hw.unk4EA0.cmd[0] = cmducs(0x4EA0, 2);
|
||||
r300->hw.unk4EA0.cmd[0] = cmdpacket0(0x4EA0, 2);
|
||||
ALLOC_STATE( zs, always, R300_ZS_CMDSIZE, "zstencil", 0 );
|
||||
r300->hw.zs.cmd[R300_ZS_CMD_0] = cmducs(R300_RB3D_ZSTENCIL_CNTL_0, 3);
|
||||
r300->hw.zs.cmd[R300_ZS_CMD_0] = cmdpacket0(R300_RB3D_ZSTENCIL_CNTL_0, 3);
|
||||
ALLOC_STATE( unk4F10, always, 5, "unk4F10", 0 );
|
||||
r300->hw.unk4F10.cmd[0] = cmducs(0x4F10, 4);
|
||||
r300->hw.unk4F10.cmd[0] = cmdpacket0(0x4F10, 4);
|
||||
ALLOC_STATE( zb, always, R300_ZB_CMDSIZE, "zb", 0 );
|
||||
r300->hw.zb.cmd[R300_ZB_CMD_0] = cmducs(R300_RB3D_DEPTHOFFSET, 2);
|
||||
r300->hw.zb.cmd[R300_ZB_CMD_0] = cmdpacket0(R300_RB3D_DEPTHOFFSET, 2);
|
||||
ALLOC_STATE( unk4F28, always, 2, "unk4F28", 0 );
|
||||
r300->hw.unk4F28.cmd[0] = cmducs(0x4F28, 1);
|
||||
r300->hw.unk4F28.cmd[0] = cmdpacket0(0x4F28, 1);
|
||||
ALLOC_STATE( unk4F30, always, 3, "unk4F30", 0 );
|
||||
r300->hw.unk4F30.cmd[0] = cmducs(0x4F30, 2);
|
||||
r300->hw.unk4F30.cmd[0] = cmdpacket0(0x4F30, 2);
|
||||
ALLOC_STATE( unk4F44, always, 2, "unk4F44", 0 );
|
||||
r300->hw.unk4F44.cmd[0] = cmducs(0x4F44, 1);
|
||||
r300->hw.unk4F44.cmd[0] = cmdpacket0(0x4F44, 1);
|
||||
ALLOC_STATE( unk4F54, always, 2, "unk4F54", 0 );
|
||||
r300->hw.unk4F54.cmd[0] = cmducs(0x4F54, 1);
|
||||
r300->hw.unk4F54.cmd[0] = cmdpacket0(0x4F54, 1);
|
||||
|
||||
ALLOC_STATE( vpi, vpu, R300_VPI_CMDSIZE, "vpi", 0 );
|
||||
r300->hw.vpi.cmd[R300_VPI_CMD_0] = cmdvpu(R300_PVS_UPLOAD_PROGRAM, 0);
|
||||
@@ -431,25 +419,25 @@ void r300InitCmdBuf(r300ContextPtr r300)
|
||||
|
||||
/* Textures */
|
||||
ALLOC_STATE( tex.filter, variable, mtu+1, "tex_filter", 0 );
|
||||
r300->hw.tex.filter.cmd[R300_TEX_CMD_0] = cmducs(R300_TX_FILTER_0, 0);
|
||||
r300->hw.tex.filter.cmd[R300_TEX_CMD_0] = cmdpacket0(R300_TX_FILTER_0, 0);
|
||||
|
||||
ALLOC_STATE( tex.unknown1, variable, mtu+1, "tex_unknown1", 0 );
|
||||
r300->hw.tex.unknown1.cmd[R300_TEX_CMD_0] = cmducs(R300_TX_UNK1_0, 0);
|
||||
r300->hw.tex.unknown1.cmd[R300_TEX_CMD_0] = cmdpacket0(R300_TX_UNK1_0, 0);
|
||||
|
||||
ALLOC_STATE( tex.size, variable, mtu+1, "tex_size", 0 );
|
||||
r300->hw.tex.size.cmd[R300_TEX_CMD_0] = cmducs(R300_TX_SIZE_0, 0);
|
||||
r300->hw.tex.size.cmd[R300_TEX_CMD_0] = cmdpacket0(R300_TX_SIZE_0, 0);
|
||||
|
||||
ALLOC_STATE( tex.format, variable, mtu+1, "tex_format", 0 );
|
||||
r300->hw.tex.format.cmd[R300_TEX_CMD_0] = cmducs(R300_TX_FORMAT_0, 0);
|
||||
r300->hw.tex.format.cmd[R300_TEX_CMD_0] = cmdpacket0(R300_TX_FORMAT_0, 0);
|
||||
|
||||
ALLOC_STATE( tex.offset, variable, mtu+1, "tex_offset", 0 );
|
||||
r300->hw.tex.offset.cmd[R300_TEX_CMD_0] = cmducs(R300_TX_OFFSET_0, 0);
|
||||
r300->hw.tex.offset.cmd[R300_TEX_CMD_0] = cmdpacket0(R300_TX_OFFSET_0, 0);
|
||||
|
||||
ALLOC_STATE( tex.unknown4, variable, mtu+1, "tex_unknown4", 0 );
|
||||
r300->hw.tex.unknown4.cmd[R300_TEX_CMD_0] = cmducs(R300_TX_UNK4_0, 0);
|
||||
r300->hw.tex.unknown4.cmd[R300_TEX_CMD_0] = cmdpacket0(R300_TX_UNK4_0, 0);
|
||||
|
||||
ALLOC_STATE( tex.border_color, variable, mtu+1, "tex_border_color", 0 );
|
||||
r300->hw.tex.border_color.cmd[R300_TEX_CMD_0] = cmducs(R300_TX_BORDER_COLOR_0, 0);
|
||||
r300->hw.tex.border_color.cmd[R300_TEX_CMD_0] = cmdpacket0(R300_TX_BORDER_COLOR_0, 0);
|
||||
|
||||
|
||||
/* Setup the atom linked list */
|
||||
|
||||
@@ -66,6 +66,53 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
int future_hw_tcl_on=0;
|
||||
int hw_tcl_on=0;
|
||||
|
||||
#if 1
|
||||
#define need_GL_ARB_multisample
|
||||
#define need_GL_ARB_texture_compression
|
||||
#define need_GL_EXT_blend_minmax
|
||||
#include "extension_helper.h"
|
||||
|
||||
static const struct dri_extension card_extensions[] = {
|
||||
{"GL_ARB_multisample", GL_ARB_multisample_functions},
|
||||
{"GL_ARB_multitexture", NULL},
|
||||
{"GL_ARB_texture_border_clamp", NULL},
|
||||
{"GL_ARB_texture_compression", GL_ARB_texture_compression_functions},
|
||||
/* disable until we support it, fixes a few things in ut2004 */
|
||||
/* {"GL_ARB_texture_cube_map", NULL}, */
|
||||
{"GL_ARB_texture_env_add", NULL},
|
||||
{"GL_ARB_texture_env_combine", NULL},
|
||||
{"GL_ARB_texture_env_crossbar", NULL},
|
||||
{"GL_ARB_texture_env_dot3", NULL},
|
||||
{"GL_ARB_texture_mirrored_repeat", NULL},
|
||||
{"GL_ARB_vertex_buffer_object", NULL},
|
||||
{"GL_ARB_vertex_program", NULL},
|
||||
#if USE_ARB_F_P == 1
|
||||
{"GL_ARB_fragment_program", NULL},
|
||||
#endif
|
||||
{"GL_EXT_blend_equation_separate", NULL},
|
||||
{"GL_EXT_blend_func_separate", NULL},
|
||||
{"GL_EXT_blend_minmax", GL_EXT_blend_minmax_functions},
|
||||
{"GL_EXT_blend_subtract", NULL},
|
||||
{"GL_EXT_secondary_color", NULL},
|
||||
{"GL_EXT_stencil_wrap", NULL},
|
||||
{"GL_EXT_texture_edge_clamp", NULL},
|
||||
{"GL_EXT_texture_env_combine", NULL},
|
||||
{"GL_EXT_texture_env_dot3", NULL},
|
||||
{"GL_EXT_texture_filter_anisotropic", NULL},
|
||||
{"GL_EXT_texture_lod_bias", NULL},
|
||||
{"GL_EXT_texture_mirror_clamp", NULL},
|
||||
{"GL_EXT_texture_rectangle", NULL},
|
||||
{"GL_ATI_texture_env_combine3", NULL},
|
||||
{"GL_ATI_texture_mirror_once", NULL},
|
||||
{"GL_MESA_pack_invert", NULL},
|
||||
{"GL_MESA_ycbcr_texture", NULL},
|
||||
{"GL_NV_blend_square", NULL},
|
||||
{"GL_NV_vertex_program", NULL},
|
||||
{"GL_SGIS_generate_mipmap", NULL},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
#else
|
||||
/* Extension strings exported by the R300 driver.
|
||||
*/
|
||||
static const char *const card_extensions[] = {
|
||||
@@ -107,7 +154,7 @@ static const char *const card_extensions[] = {
|
||||
"GL_SGIS_generate_mipmap",
|
||||
NULL
|
||||
};
|
||||
|
||||
#endif
|
||||
extern struct tnl_pipeline_stage _r300_render_stage;
|
||||
extern struct tnl_pipeline_stage _r300_tcl_stage;
|
||||
|
||||
@@ -151,21 +198,42 @@ void r300BufferData(GLcontext *ctx, GLenum target, GLsizeiptrARB size,
|
||||
drm_radeon_mem_alloc_t alloc;
|
||||
int offset, ret;
|
||||
|
||||
/* Free previous buffer */
|
||||
if (obj->OnCard) {
|
||||
drm_radeon_mem_free_t memfree;
|
||||
|
||||
memfree.region = RADEON_MEM_REGION_GART;
|
||||
memfree.region_offset = (char *)obj->Data - (char *)rmesa->radeon.radeonScreen->gartTextures.map;
|
||||
|
||||
ret = drmCommandWrite(rmesa->radeon.radeonScreen->driScreen->fd,
|
||||
DRM_RADEON_FREE, &memfree, sizeof(memfree));
|
||||
|
||||
if (ret) {
|
||||
WARN_ONCE("Failed to free GART memroy!\n");
|
||||
}
|
||||
obj->OnCard = GL_FALSE;
|
||||
}
|
||||
|
||||
alloc.region = RADEON_MEM_REGION_GART;
|
||||
alloc.alignment = 4;
|
||||
alloc.size = size;
|
||||
alloc.region_offset = &offset;
|
||||
|
||||
ret = drmCommandWriteRead( rmesa->radeon.dri.fd, DRM_RADEON_ALLOC, &alloc, sizeof(alloc));
|
||||
if(ret){
|
||||
if (ret) {
|
||||
WARN_ONCE("Ran out of GART memory!\n");
|
||||
obj->Data = NULL;
|
||||
_mesa_buffer_data(ctx, target, size, data, usage, obj);
|
||||
return ;
|
||||
}
|
||||
obj->Data = ((char *)rmesa->radeon.radeonScreen->gartTextures.map) + offset;
|
||||
memcpy(obj->Data, data, size);
|
||||
|
||||
if (data)
|
||||
memcpy(obj->Data, data, size);
|
||||
|
||||
obj->Size = size;
|
||||
obj->Usage = usage;
|
||||
obj->OnCard = GL_TRUE;
|
||||
#if 0
|
||||
fprintf(stderr, "allocated %d bytes at %p, offset=%d\n", size, obj->Data, offset);
|
||||
#endif
|
||||
@@ -230,10 +298,13 @@ GLboolean r300CreateContext(const __GLcontextModes * glVisual,
|
||||
r300InitStateFuncs(&functions);
|
||||
r300InitTextureFuncs(&functions);
|
||||
r300InitShaderFuncs(&functions);
|
||||
if(hw_tcl_on){
|
||||
|
||||
#if 0 /* Needs various Mesa changes... */
|
||||
if (hw_tcl_on) {
|
||||
functions.BufferData = r300BufferData;
|
||||
functions.DeleteBuffer = r300DeleteBuffer;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!radeonInitContext(&r300->radeon, &functions,
|
||||
glVisual, driContextPriv, sharedContextPrivate)) {
|
||||
|
||||
@@ -174,7 +174,7 @@ struct r300_tex_obj {
|
||||
GLuint pitch; /* one of the unknown registers.. unknown 1 ?*/
|
||||
GLuint size; /* npot only */
|
||||
GLuint format;
|
||||
GLuint offset; /* Image location in texmem.
|
||||
GLuint offset; /* Image location in the card's address space.
|
||||
All cube faces follow. */
|
||||
GLuint unknown4;
|
||||
GLuint unknown5;
|
||||
|
||||
@@ -64,14 +64,14 @@ void static inline check_space(int dwords)
|
||||
{
|
||||
}
|
||||
|
||||
static __inline__ uint32_t cmducs(int reg, int count)
|
||||
static __inline__ uint32_t cmdpacket0(int reg, int count)
|
||||
{
|
||||
drm_r300_cmd_header_t cmd;
|
||||
|
||||
cmd.unchecked_state.cmd_type = R300_CMD_UNCHECKED_STATE;
|
||||
cmd.unchecked_state.count = count;
|
||||
cmd.unchecked_state.reghi = ((unsigned int)reg & 0xFF00) >> 8;
|
||||
cmd.unchecked_state.reglo = ((unsigned int)reg & 0x00FF);
|
||||
cmd.packet0.cmd_type = R300_CMD_PACKET0;
|
||||
cmd.packet0.count = count;
|
||||
cmd.packet0.reghi = ((unsigned int)reg & 0xFF00) >> 8;
|
||||
cmd.packet0.reglo = ((unsigned int)reg & 0x00FF);
|
||||
|
||||
return cmd.u;
|
||||
}
|
||||
@@ -139,7 +139,7 @@ static __inline__ uint32_t cmdpacify(void)
|
||||
__FUNCTION__); \
|
||||
cmd_reserved=_n+2; \
|
||||
cmd_written=1; \
|
||||
cmd[0].i=cmducs((reg), _n+1); \
|
||||
cmd[0].i=cmdpacket0((reg), _n+1); \
|
||||
}
|
||||
|
||||
/* Prepare to write a register value to register at address reg.
|
||||
@@ -201,14 +201,14 @@ static __inline__ uint32_t cmdpacify(void)
|
||||
}
|
||||
|
||||
/* must be sent to switch to 2d commands */
|
||||
/*
|
||||
|
||||
void static inline end_3d(PREFIX_VOID)
|
||||
{
|
||||
LOCAL_VARS
|
||||
(void)cmd_reserved; (void)cmd_written;
|
||||
|
||||
cmd=(drm_radeon_cmd_header_t *) r300AllocCmdBuf(rmesa, \
|
||||
0, \ // ??!
|
||||
1, \
|
||||
__FUNCTION__); \
|
||||
|
||||
cmd[0].header.cmd_type=R300_CMD_END3D;
|
||||
@@ -220,12 +220,23 @@ LOCAL_VARS
|
||||
(void)cmd_reserved; (void)cmd_written;
|
||||
|
||||
cmd=(drm_radeon_cmd_header_t *) r300AllocCmdBuf(rmesa, \
|
||||
0, \ // ??!
|
||||
1, \
|
||||
__FUNCTION__); \
|
||||
|
||||
cmd[0].i=cmdcpdelay(count);
|
||||
}
|
||||
*/
|
||||
|
||||
void static inline cp_wait(PREFIX unsigned char flags)
|
||||
{
|
||||
LOCAL_VARS
|
||||
(void)cmd_reserved; (void)cmd_written;
|
||||
|
||||
cmd=(drm_radeon_cmd_header_t *) r300AllocCmdBuf(rmesa, \
|
||||
1, \
|
||||
__FUNCTION__); \
|
||||
|
||||
cmd[0].i=cmdwait(flags);
|
||||
}
|
||||
|
||||
/* fire vertex buffer */
|
||||
static void inline fire_AOS(PREFIX int vertex_count, int type)
|
||||
|
||||
@@ -91,11 +91,11 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
|
||||
|
||||
#ifndef CB_DPATH
|
||||
R300_STATECHANGE(r300, vir[0]);
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[0].cmd)->unchecked_state.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[0].cmd)->packet0.count = 1;
|
||||
r300->hw.vir[0].cmd[1] = 0x21030003;
|
||||
|
||||
R300_STATECHANGE(r300, vir[1]);
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[1].cmd)->unchecked_state.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[1].cmd)->packet0.count = 1;
|
||||
r300->hw.vir[1].cmd[1] = 0xF688F688;
|
||||
|
||||
R300_STATECHANGE(r300, vic);
|
||||
@@ -125,9 +125,17 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
|
||||
r300->hw.bld.cmd[R300_BLD_CBLEND] = 0;
|
||||
r300->hw.bld.cmd[R300_BLD_ABLEND] = 0;
|
||||
|
||||
if (r300->radeon.radeonScreen->cpp == 4)
|
||||
cbpitch |= R300_COLOR_FORMAT_ARGB8888;
|
||||
else
|
||||
cbpitch |= R300_COLOR_FORMAT_RGB565;
|
||||
|
||||
if (r300->radeon.sarea->tiling_enabled)
|
||||
cbpitch |= R300_COLOR_TILE_ENABLE;
|
||||
|
||||
R300_STATECHANGE(r300, cb);
|
||||
r300->hw.cb.cmd[R300_CB_OFFSET] = cboffset;
|
||||
r300->hw.cb.cmd[R300_CB_PITCH] = cbpitch | R300_COLOR_UNKNOWN_22_23;
|
||||
r300->hw.cb.cmd[R300_CB_PITCH] = cbpitch;
|
||||
|
||||
R300_STATECHANGE(r300, unk221C);
|
||||
r300->hw.unk221C.cmd[1] = R300_221C_CLEAR;
|
||||
@@ -147,7 +155,7 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
|
||||
r300->hw.rc.cmd[2] = 0;
|
||||
|
||||
R300_STATECHANGE(r300, rr);
|
||||
((drm_r300_cmd_header_t*)r300->hw.rr.cmd)->unchecked_state.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.rr.cmd)->packet0.count = 1;
|
||||
r300->hw.rr.cmd[1] = 0x00004000;
|
||||
|
||||
R300_STATECHANGE(r300, cmk);
|
||||
@@ -174,10 +182,10 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
|
||||
R300_STATECHANGE(r300, fpi[1]);
|
||||
R300_STATECHANGE(r300, fpi[2]);
|
||||
R300_STATECHANGE(r300, fpi[3]);
|
||||
((drm_r300_cmd_header_t*)r300->hw.fpi[0].cmd)->unchecked_state.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.fpi[1].cmd)->unchecked_state.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.fpi[2].cmd)->unchecked_state.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.fpi[3].cmd)->unchecked_state.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.fpi[0].cmd)->packet0.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.fpi[1].cmd)->packet0.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.fpi[2].cmd)->packet0.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.fpi[3].cmd)->packet0.count = 1;
|
||||
|
||||
/* MOV o0, t0 */
|
||||
r300->hw.fpi[0].cmd[1] = FP_INSTRC(MAD, FP_ARGC(SRC0C_XYZ), FP_ARGC(ONE), FP_ARGC(ZERO));
|
||||
@@ -195,7 +203,7 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
|
||||
(1 << R300_PVS_CNTL_3_PROGRAM_UNKNOWN_SHIFT);
|
||||
|
||||
R300_STATECHANGE(r300, vpi);
|
||||
((drm_r300_cmd_header_t*)r300->hw.vpi.cmd)->unchecked_state.count = 8;
|
||||
((drm_r300_cmd_header_t*)r300->hw.vpi.cmd)->packet0.count = 8;
|
||||
|
||||
/* MOV o0, i0; */
|
||||
r300->hw.vpi.cmd[1] = VP_OUT(ADD,OUT,0,XYZW);
|
||||
@@ -257,8 +265,13 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
|
||||
reg_start(R300_RB3D_COLOROFFSET0, 0);
|
||||
e32(cboffset);
|
||||
|
||||
if (r300->radeon.radeonScreen->cpp == 4)
|
||||
cbpitch |= R300_COLOR_FORMAT_ARGB8888;
|
||||
else
|
||||
cbpitch |= R300_COLOR_FORMAT_RGB565;
|
||||
|
||||
reg_start(R300_RB3D_COLORPITCH0, 0);
|
||||
e32(cbpitch | R300_COLOR_UNKNOWN_22_23);
|
||||
e32(cbpitch);
|
||||
|
||||
R300_STATECHANGE(r300, cmk);
|
||||
reg_start(R300_RB3D_COLORMASK, 0);
|
||||
@@ -338,6 +351,7 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
|
||||
cmd2[6].u = r300PackFloat32(ctx->Color.ClearColor[1]);
|
||||
cmd2[7].u = r300PackFloat32(ctx->Color.ClearColor[2]);
|
||||
cmd2[8].u = r300PackFloat32(ctx->Color.ClearColor[3]);
|
||||
|
||||
}
|
||||
|
||||
#ifdef CB_DPATH
|
||||
|
||||
@@ -438,7 +438,7 @@ void r300EmitArrays(GLcontext * ctx, GLboolean immd)
|
||||
}
|
||||
/* Set the rest of INPUT_ROUTE_0 to 0 */
|
||||
//for(i=((count+1)>>1); i<8; i++)r300->hw.vir[0].cmd[R300_VIR_CNTL_0+i]=(0x0);
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[0].cmd)->unchecked_state.count = (nr+1)>>1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[0].cmd)->packet0.count = (nr+1)>>1;
|
||||
|
||||
|
||||
/* Mesa assumes that all missing components are from (0, 0, 0, 1) */
|
||||
@@ -481,7 +481,7 @@ void r300EmitArrays(GLcontext * ctx, GLboolean immd)
|
||||
}
|
||||
/* Set the rest of INPUT_ROUTE_1 to 0 */
|
||||
//for(i=((count+1)>>1); i<8; i++)r300->hw.vir[1].cmd[R300_VIR_CNTL_0+i]=0x0;
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[1].cmd)->unchecked_state.count = (nr+1)>>1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[1].cmd)->packet0.count = (nr+1)>>1;
|
||||
|
||||
/* Set up input_cntl */
|
||||
/* I don't think this is needed for vertex buffers, but it doesn't hurt anything */
|
||||
|
||||
@@ -1,6 +1,27 @@
|
||||
#ifndef _R300_REG_H
|
||||
#define _R300_REG_H
|
||||
|
||||
#define R300_MC_INIT_MISC_LAT_TIMER 0x180
|
||||
# define R300_MC_MISC__MC_CPR_INIT_LAT_SHIFT 0
|
||||
# define R300_MC_MISC__MC_VF_INIT_LAT_SHIFT 4
|
||||
# define R300_MC_MISC__MC_DISP0R_INIT_LAT_SHIFT 8
|
||||
# define R300_MC_MISC__MC_DISP1R_INIT_LAT_SHIFT 12
|
||||
# define R300_MC_MISC__MC_FIXED_INIT_LAT_SHIFT 16
|
||||
# define R300_MC_MISC__MC_E2R_INIT_LAT_SHIFT 20
|
||||
# define R300_MC_MISC__MC_SAME_PAGE_PRIO_SHIFT 24
|
||||
# define R300_MC_MISC__MC_GLOBW_INIT_LAT_SHIFT 28
|
||||
|
||||
|
||||
#define R300_MC_INIT_GFX_LAT_TIMER 0x154
|
||||
# define R300_MC_MISC__MC_G3D0R_INIT_LAT_SHIFT 0
|
||||
# define R300_MC_MISC__MC_G3D1R_INIT_LAT_SHIFT 4
|
||||
# define R300_MC_MISC__MC_G3D2R_INIT_LAT_SHIFT 8
|
||||
# define R300_MC_MISC__MC_G3D3R_INIT_LAT_SHIFT 12
|
||||
# define R300_MC_MISC__MC_TX0R_INIT_LAT_SHIFT 16
|
||||
# define R300_MC_MISC__MC_TX1R_INIT_LAT_SHIFT 20
|
||||
# define R300_MC_MISC__MC_GLOBR_INIT_LAT_SHIFT 24
|
||||
# define R300_MC_MISC__MC_GLOBW_FULL_LAT_SHIFT 28
|
||||
|
||||
/*
|
||||
This file contains registers and constants for the R300. They have been
|
||||
found mostly by examining command buffers captured using glxtest, as well
|
||||
@@ -1126,7 +1147,8 @@ I am fairly certain that they are correct unless stated otherwise in comments.
|
||||
# define R300_COLOR_ENDIAN_NO_SWAP (0 << 18) /* GUESS */
|
||||
# define R300_COLOR_ENDIAN_WORD_SWAP (1 << 18) /* GUESS */
|
||||
# define R300_COLOR_ENDIAN_DWORD_SWAP (2 << 18) /* GUESS */
|
||||
# define R300_COLOR_UNKNOWN_22_23 (3 << 22) /* GUESS: Format? - (6<<21) for RGBA? */
|
||||
# define R300_COLOR_FORMAT_RGB565 (2 << 22)
|
||||
# define R300_COLOR_FORMAT_ARGB8888 (3 << 22)
|
||||
#define R300_RB3D_COLORPITCH1 0x4E3C /* GUESS */
|
||||
#define R300_RB3D_COLORPITCH2 0x4E40 /* GUESS */
|
||||
#define R300_RB3D_COLORPITCH3 0x4E44 /* GUESS */
|
||||
@@ -1194,6 +1216,12 @@ I am fairly certain that they are correct unless stated otherwise in comments.
|
||||
# define R300_RB3D_ZS2_STENCIL_MASK_SHIFT 8
|
||||
# define R300_RB3D_ZS2_STENCIL_WRITE_MASK_SHIFT 16
|
||||
|
||||
/* gap */
|
||||
|
||||
#define R300_RB3D_ZSTENCIL_FORMAT 0x4F10
|
||||
# define R300_DEPTH_FORMAT_16BIT_INT_Z (0 << 0)
|
||||
# define R300_DEPTH_FORMAT_24BIT_INT_Z (2 << 0)
|
||||
|
||||
/* gap */
|
||||
#define R300_RB3D_DEPTHOFFSET 0x4F20
|
||||
#define R300_RB3D_DEPTHPITCH 0x4F24
|
||||
|
||||
@@ -211,16 +211,19 @@ static int r300_get_num_verts(r300ContextPtr rmesa,
|
||||
|
||||
static GLfloat default_vector[4]={0.0, 0.0, 0.0, 1.0};
|
||||
|
||||
#define output_vector(v, i) \
|
||||
{ \
|
||||
#define output_vector(v, i) { \
|
||||
int _i; \
|
||||
for(_i=0;_i<v->size;_i++){ \
|
||||
efloat(VEC_ELT(v, GLfloat, i)[_i]); \
|
||||
if(VB->Elts){ \
|
||||
efloat(VEC_ELT(v, GLfloat, VB->Elts[i])[_i]); \
|
||||
}else{ \
|
||||
efloat(VEC_ELT(v, GLfloat, i)[_i]); \
|
||||
} \
|
||||
} \
|
||||
for(_i=v->size;_i<4;_i++){ \
|
||||
efloat(default_vector[_i]); \
|
||||
} \
|
||||
}
|
||||
efloat(default_vector[_i]); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* Immediate implementation - vertex data is sent via command stream */
|
||||
|
||||
@@ -506,9 +509,6 @@ static GLboolean r300_run_vb_render(GLcontext *ctx,
|
||||
e32(0x00000003);
|
||||
r300EmitState(rmesa);
|
||||
|
||||
if(hw_tcl_on) /* FIXME */
|
||||
r300FlushCmdBuf(rmesa, __FUNCTION__);
|
||||
|
||||
rmesa->state.Elts = VB->Elts;
|
||||
|
||||
for(i=0; i < VB->PrimitiveCount; i++){
|
||||
@@ -613,6 +613,8 @@ static void r300_check_render(GLcontext *ctx, struct tnl_pipeline_stage *stage)
|
||||
//FALLBACK_IF(ctx->Polygon.SmoothFlag); // GL_POLYGON_SMOOTH disabling to get blender going
|
||||
FALLBACK_IF(ctx->Polygon.StippleFlag); // GL_POLYGON_STIPPLE
|
||||
FALLBACK_IF(ctx->Multisample.Enabled); // GL_MULTISAMPLE_ARB
|
||||
|
||||
FALLBACK_IF(ctx->RenderMode != GL_RENDER); // We do not do SELECT or FEEDBACK (yet ?)
|
||||
|
||||
#if 0 /* ut2k3 fails to start if this is on */
|
||||
/* One step at a time - let one texture pass.. */
|
||||
|
||||
@@ -1077,19 +1077,19 @@ void r300_setup_textures(GLcontext *ctx)
|
||||
r300->hw.tex.size.cmd[R300_TEX_VALUE_0+i]=t->size;
|
||||
r300->hw.tex.format.cmd[R300_TEX_VALUE_0+i]=t->format;
|
||||
//fprintf(stderr, "t->format=%08x\n", t->format);
|
||||
r300->hw.tex.offset.cmd[R300_TEX_VALUE_0+i]=r300->radeon.radeonScreen->fbLocation+t->offset;
|
||||
r300->hw.tex.offset.cmd[R300_TEX_VALUE_0+i]=t->offset;
|
||||
r300->hw.tex.unknown4.cmd[R300_TEX_VALUE_0+i]=0x0;
|
||||
r300->hw.tex.border_color.cmd[R300_TEX_VALUE_0+i]=t->pp_border_color;
|
||||
}
|
||||
}
|
||||
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.filter.cmd)->unchecked_state.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.unknown1.cmd)->unchecked_state.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.size.cmd)->unchecked_state.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.format.cmd)->unchecked_state.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.offset.cmd)->unchecked_state.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.unknown4.cmd)->unchecked_state.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.border_color.cmd)->unchecked_state.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.filter.cmd)->packet0.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.unknown1.cmd)->packet0.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.size.cmd)->packet0.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.format.cmd)->packet0.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.offset.cmd)->packet0.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.unknown4.cmd)->packet0.count = max_texture_unit+1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.tex.border_color.cmd)->packet0.count = max_texture_unit+1;
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_STATE)
|
||||
fprintf(stderr, "TX_ENABLE: %08x max_texture_unit=%d\n", r300->hw.txe.cmd[R300_TXE_ENABLE], max_texture_unit);
|
||||
@@ -1146,7 +1146,7 @@ void r300_setup_rs_unit(GLcontext *ctx)
|
||||
| interp_magic[i];
|
||||
|
||||
if (InputsRead & (FRAG_BIT_TEX0<<i)) {
|
||||
assert(r300->state.texture.tc_count != 0);
|
||||
//assert(r300->state.texture.tc_count != 0);
|
||||
r300->hw.rr.cmd[R300_RR_ROUTE_0 + fp_reg] = 0
|
||||
| R300_RS_ROUTE_ENABLE
|
||||
| i /* source INTERP */
|
||||
@@ -1195,7 +1195,7 @@ void r300_setup_rs_unit(GLcontext *ctx)
|
||||
| R300_RS_CNTL_0_UNKNOWN_18;
|
||||
|
||||
assert(high_rr >= 0);
|
||||
r300->hw.rr.cmd[R300_RR_CMD_0] = cmducs(R300_RS_ROUTE_0, high_rr+1);
|
||||
r300->hw.rr.cmd[R300_RR_CMD_0] = cmdpacket0(R300_RS_ROUTE_0, high_rr+1);
|
||||
r300->hw.rc.cmd[2] = 0xC0 | high_rr;
|
||||
|
||||
if (InputsRead)
|
||||
@@ -1261,10 +1261,10 @@ void r300_setup_rs_unit(GLcontext *ctx)
|
||||
| R300_RS_CNTL_0_UNKNOWN_18;
|
||||
|
||||
if (r300->state.texture.tc_count > 0) {
|
||||
r300->hw.rr.cmd[R300_RR_CMD_0] = cmducs(R300_RS_ROUTE_0, cur_reg);
|
||||
r300->hw.rr.cmd[R300_RR_CMD_0] = cmdpacket0(R300_RS_ROUTE_0, cur_reg);
|
||||
r300->hw.rc.cmd[2] = 0xC0 | (cur_reg-1); /* index of highest */
|
||||
} else {
|
||||
r300->hw.rr.cmd[R300_RR_CMD_0] = cmducs(R300_RS_ROUTE_0, 1);
|
||||
r300->hw.rr.cmd[R300_RR_CMD_0] = cmdpacket0(R300_RS_ROUTE_0, 1);
|
||||
r300->hw.rc.cmd[2] = 0x0;
|
||||
}
|
||||
|
||||
@@ -1602,13 +1602,13 @@ void r300SetupPixelShader(r300ContextPtr rmesa)
|
||||
R300_STATECHANGE(rmesa, fpt);
|
||||
for(i=0;i<rp->tex.length;i++)
|
||||
rmesa->hw.fpt.cmd[R300_FPT_INSTR_0+i]=rp->tex.inst[i];
|
||||
rmesa->hw.fpt.cmd[R300_FPT_CMD_0]=cmducs(R300_PFS_TEXI_0, rp->tex.length);
|
||||
rmesa->hw.fpt.cmd[R300_FPT_CMD_0]=cmdpacket0(R300_PFS_TEXI_0, rp->tex.length);
|
||||
|
||||
#define OUTPUT_FIELD(st, reg, field) \
|
||||
R300_STATECHANGE(rmesa, st); \
|
||||
for(i=0;i<=rp->alu_end;i++) \
|
||||
rmesa->hw.st.cmd[R300_FPI_INSTR_0+i]=rp->alu.inst[i].field;\
|
||||
rmesa->hw.st.cmd[R300_FPI_CMD_0]=cmducs(reg, rp->alu_end+1);
|
||||
rmesa->hw.st.cmd[R300_FPI_CMD_0]=cmdpacket0(reg, rp->alu_end+1);
|
||||
|
||||
OUTPUT_FIELD(fpi[0], R300_PFS_INSTR0_0, inst0);
|
||||
OUTPUT_FIELD(fpi[1], R300_PFS_INSTR1_0, inst1);
|
||||
@@ -1651,7 +1651,7 @@ void r300SetupPixelShader(r300ContextPtr rmesa)
|
||||
rmesa->hw.fpp.cmd[R300_FPP_PARAM_0+4*i+2]=r300PackFloat24(rp->constant[i][2]);
|
||||
rmesa->hw.fpp.cmd[R300_FPP_PARAM_0+4*i+3]=r300PackFloat24(rp->constant[i][3]);
|
||||
}
|
||||
rmesa->hw.fpp.cmd[R300_FPP_CMD_0]=cmducs(R300_PFS_PARAM_0_X, rp->const_nr*4);
|
||||
rmesa->hw.fpp.cmd[R300_FPP_CMD_0]=cmdpacket0(R300_PFS_PARAM_0_X, rp->const_nr*4);
|
||||
}
|
||||
#else
|
||||
/* just a skeleton for now.. */
|
||||
@@ -1781,13 +1781,13 @@ int i,k;
|
||||
R300_STATECHANGE(rmesa, fpt);
|
||||
for(i=0;i<rmesa->state.pixel_shader.program.tex.length;i++)
|
||||
rmesa->hw.fpt.cmd[R300_FPT_INSTR_0+i]=rmesa->state.pixel_shader.program.tex.inst[i];
|
||||
rmesa->hw.fpt.cmd[R300_FPT_CMD_0]=cmducs(R300_PFS_TEXI_0, rmesa->state.pixel_shader.program.tex.length);
|
||||
rmesa->hw.fpt.cmd[R300_FPT_CMD_0]=cmdpacket0(R300_PFS_TEXI_0, rmesa->state.pixel_shader.program.tex.length);
|
||||
|
||||
#define OUTPUT_FIELD(st, reg, field) \
|
||||
R300_STATECHANGE(rmesa, st); \
|
||||
for(i=0;i<rmesa->state.pixel_shader.program.alu.length;i++) \
|
||||
rmesa->hw.st.cmd[R300_FPI_INSTR_0+i]=rmesa->state.pixel_shader.program.alu.inst[i].field;\
|
||||
rmesa->hw.st.cmd[R300_FPI_CMD_0]=cmducs(reg, rmesa->state.pixel_shader.program.alu.length);
|
||||
rmesa->hw.st.cmd[R300_FPI_CMD_0]=cmdpacket0(reg, rmesa->state.pixel_shader.program.alu.length);
|
||||
|
||||
OUTPUT_FIELD(fpi[0], R300_PFS_INSTR0_0, inst0);
|
||||
OUTPUT_FIELD(fpi[1], R300_PFS_INSTR1_0, inst1);
|
||||
@@ -1825,7 +1825,7 @@ int i,k;
|
||||
rmesa->hw.fpp.cmd[R300_FPP_PARAM_0+4*i+2]=r300PackFloat32(rmesa->state.pixel_shader.param[i].z);
|
||||
rmesa->hw.fpp.cmd[R300_FPP_PARAM_0+4*i+3]=r300PackFloat32(rmesa->state.pixel_shader.param[i].w);
|
||||
}
|
||||
rmesa->hw.fpp.cmd[R300_FPP_CMD_0]=cmducs(R300_PFS_PARAM_0_X, rmesa->state.pixel_shader.param_length);
|
||||
rmesa->hw.fpp.cmd[R300_FPP_CMD_0]=cmdpacket0(R300_PFS_PARAM_0_X, rmesa->state.pixel_shader.param_length);
|
||||
|
||||
}
|
||||
#endif
|
||||
@@ -1873,7 +1873,7 @@ void verify_r300ResetHwState(r300ContextPtr r300, int stage)
|
||||
foreach(atom, &r300->hw.atomlist) {
|
||||
cmd.u=atom->cmd[0];
|
||||
switch(cmd.header.cmd_type){
|
||||
case R300_CMD_UNCHECKED_STATE:
|
||||
case R300_CMD_PACKET0:
|
||||
case R300_CMD_VPU:
|
||||
case R300_CMD_PACKET3:
|
||||
case R300_CMD_END3D:
|
||||
@@ -1987,10 +1987,10 @@ void r300ResetHwState(r300ContextPtr r300)
|
||||
#endif
|
||||
|
||||
#if 0 /* Done in setup routing */
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[0].cmd)->unchecked_state.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[0].cmd)->packet0.count = 1;
|
||||
r300->hw.vir[0].cmd[1] = 0x21030003;
|
||||
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[1].cmd)->unchecked_state.count = 1;
|
||||
((drm_r300_cmd_header_t*)r300->hw.vir[1].cmd)->packet0.count = 1;
|
||||
r300->hw.vir[1].cmd[1] = 0xF688F688;
|
||||
|
||||
r300->hw.vic.cmd[R300_VIR_CNTL_0] = 0x00000001;
|
||||
@@ -2142,20 +2142,17 @@ void r300ResetHwState(r300ContextPtr r300)
|
||||
r300->hw.unk4E10.cmd[3] = 0;
|
||||
|
||||
/* Again, r300ClearBuffer uses this */
|
||||
if(ctx->Visual.doubleBufferMode){
|
||||
r300->hw.cb.cmd[R300_CB_OFFSET] =
|
||||
r300->radeon.radeonScreen->backOffset +
|
||||
r300->radeon.radeonScreen->fbLocation;
|
||||
r300->hw.cb.cmd[R300_CB_PITCH] = r300->radeon.radeonScreen->backPitch
|
||||
| R300_COLOR_UNKNOWN_22_23;
|
||||
} else {
|
||||
r300->hw.cb.cmd[R300_CB_OFFSET] =
|
||||
r300->radeon.radeonScreen->frontOffset +
|
||||
r300->radeon.radeonScreen->fbLocation;
|
||||
r300->hw.cb.cmd[R300_CB_PITCH] = r300->radeon.radeonScreen->frontPitch
|
||||
| R300_COLOR_UNKNOWN_22_23;
|
||||
|
||||
}
|
||||
r300->hw.cb.cmd[R300_CB_OFFSET] = r300->radeon.state.color.drawOffset +
|
||||
r300->radeon.radeonScreen->fbLocation;
|
||||
r300->hw.cb.cmd[R300_CB_PITCH] = r300->radeon.state.color.drawPitch;
|
||||
|
||||
if (r300->radeon.radeonScreen->cpp == 4)
|
||||
r300->hw.cb.cmd[R300_CB_PITCH] |= R300_COLOR_FORMAT_ARGB8888;
|
||||
else
|
||||
r300->hw.cb.cmd[R300_CB_PITCH] |= R300_COLOR_FORMAT_RGB565;
|
||||
|
||||
if (r300->radeon.sarea->tiling_enabled)
|
||||
r300->hw.cb.cmd[R300_CB_PITCH] |= R300_COLOR_TILE_ENABLE;
|
||||
|
||||
r300->hw.unk4E50.cmd[1] = 0;
|
||||
r300->hw.unk4E50.cmd[2] = 0;
|
||||
@@ -2172,19 +2169,35 @@ void r300ResetHwState(r300ContextPtr r300)
|
||||
r300->hw.unk4EA0.cmd[1] = 0x00000000;
|
||||
r300->hw.unk4EA0.cmd[2] = 0xffffffff;
|
||||
|
||||
r300->hw.unk4F10.cmd[1] = 0x00000002; // depthbuffer format?
|
||||
//r300->hw.unk4F10.cmd[2] = 0x00000000;
|
||||
switch (ctx->Visual.depthBits) {
|
||||
case 16:
|
||||
r300->hw.unk4F10.cmd[1] = R300_DEPTH_FORMAT_16BIT_INT_Z;
|
||||
break;
|
||||
case 24:
|
||||
r300->hw.unk4F10.cmd[1] = R300_DEPTH_FORMAT_24BIT_INT_Z;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Error: Unsupported depth %d... exiting\n",
|
||||
ctx->Visual.depthBits);
|
||||
exit(-1);
|
||||
|
||||
}
|
||||
r300->hw.unk4F10.cmd[3] = 0x00000003;
|
||||
r300->hw.unk4F10.cmd[4] = 0x00000000;
|
||||
|
||||
/* experiment a bit */
|
||||
//r300->hw.unk4F10.cmd[2] = 0x00000001; // depthbuffer format?
|
||||
|
||||
r300->hw.zb.cmd[R300_ZB_OFFSET] =
|
||||
r300->radeon.radeonScreen->depthOffset +
|
||||
r300->radeon.radeonScreen->fbLocation;
|
||||
r300->hw.zb.cmd[R300_ZB_PITCH] = r300->radeon.radeonScreen->depthPitch;
|
||||
|
||||
|
||||
if (r300->radeon.sarea->tiling_enabled) {
|
||||
/* Turn off when clearing buffers ? */
|
||||
r300->hw.zb.cmd[R300_ZB_PITCH] |= R300_DEPTH_TILE_ENABLE;
|
||||
|
||||
if (ctx->Visual.depthBits == 24)
|
||||
r300->hw.zb.cmd[R300_ZB_PITCH] |= R300_DEPTH_MICROTILE_ENABLE;
|
||||
}
|
||||
|
||||
r300->hw.unk4F28.cmd[1] = 0;
|
||||
|
||||
r300->hw.unk4F30.cmd[1] = 0;
|
||||
@@ -2259,6 +2272,13 @@ void r300InitState(r300ContextPtr r300)
|
||||
r300ResetHwState(r300);
|
||||
}
|
||||
|
||||
static void r300RenderMode( GLcontext *ctx, GLenum mode )
|
||||
{
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
WARN_ONCE("TODO: fallback properly when rendering mode is not GL_RENDER\n"
|
||||
"\tThe way things are now neither selection nor feedback modes work\n")
|
||||
// FALLBACK( rmesa, R300_FALLBACK_RENDER_MODE, (mode != GL_RENDER) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize driver's state callback functions
|
||||
@@ -2294,5 +2314,7 @@ void r300InitStateFuncs(struct dd_function_table* functions)
|
||||
|
||||
functions->PolygonOffset = r300PolygonOffset;
|
||||
functions->PolygonMode = r300PolygonMode;
|
||||
|
||||
functions->RenderMode = r300RenderMode;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user