diff options
57 files changed, 2 insertions, 28582 deletions
diff --git a/configure.ac b/configure.ac index ccb7c29f5..4d654da90 100644 --- a/configure.ac +++ b/configure.ac @@ -40,8 +40,6 @@ AC_CONFIG_HEADERS(include/xorg-server.h) dnl dix-config.h covers most of the DIX (i.e. everything but the DDX, not just dnl dix/). AC_CONFIG_HEADERS(include/dix-config.h) -dnl xgl-config.h covers the Xgl DDX. -AC_CONFIG_HEADERS(include/xgl-config.h) dnl xorg-config.h covers the Xorg DDX. AC_CONFIG_HEADERS(include/xorg-config.h) dnl xkb-config.h covers XKB for the Xorg and Xnest DDXs. @@ -567,9 +565,6 @@ AC_ARG_ENABLE(xvfb, AS_HELP_STRING([--enable-xvfb], [Build Xvfb server AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: auto)]), [XNEST=$enableval], [XNEST=auto]) AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto]) AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto]) -AC_ARG_ENABLE(xgl, AS_HELP_STRING([--enable-xgl], [Build Xgl server (default: no)]), [XGL=$enableval], [XGL=no]) -AC_ARG_ENABLE(xglx, AS_HELP_STRING([--enable-xglx], [Build Xglx xgl module (default: no)]), [XGLX=$enableval], [XGLX=no]) -AC_ARG_ENABLE(xegl, AS_HELP_STRING([--enable-xegl], [Build Xegl xgl module (default: no)]), [XEGL=$enableval], [XEGL=no]) dnl legacy fb support AC_ARG_ENABLE(mfb, AS_HELP_STRING([--enable-mfb], [Build legacy mono framebuffer support (default: disable)]), [MFB=$enableval], [MFB=no]) dnl kdrive and its subsystems @@ -1252,62 +1247,6 @@ if test "x$XORG" = xauto; then fi AC_MSG_RESULT([$XORG]) -dnl Xgl DDX - -AC_MSG_CHECKING([whether to build Xgl DDX]) -if test "x$XGL" != xno; then - PKG_CHECK_MODULES([XGLMODULES], [glitz-glx >= 0.4.3], [XGL=yes], [XGL=no]) - AC_SUBST(XGLMODULES_CFLAGS) -fi -AC_MSG_RESULT([$XGL]) -AM_CONDITIONAL(XGL, [test "x$XGL" = xyes]) - -if test "x$XGL" = xyes; then - XGL_LIBS="$FB_LIB $COMPOSITE_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $MIEXT_LAYER_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB" - XGL_SYS_LIBS="$XGLMODULES_LIBS $GLX_SYS_LIBS $DLOPEN_LIBS" - AC_SUBST([XGL_LIBS]) - AC_SUBST([XGL_SYS_LIBS]) - AC_DEFINE(XGL_MODULAR, 1, [Use loadable XGL modules]) - - xglmoduledir="$moduledir/xgl" - AC_SUBST([xglmoduledir]) - AC_DEFINE_DIR(XGL_MODULE_PATH, xglmoduledir, [Default XGL module search path]) -fi - -dnl Xegl DDX - -AC_MSG_CHECKING([whether to build Xegl DDX]) -if test "x$XEGL" != xno; then - PKG_CHECK_MODULES([XGLMODULES], [glitz-glx >= 0.4.3], [XEGL=yes], [XEGL=no]) - AC_SUBST(XEGLMODULES_CFLAGS) -fi -AC_MSG_RESULT([$XEGL]) -AM_CONDITIONAL(XEGL, [test "x$XEGL" = xyes]) - -if test "x$XEGL" = xyes; then - XEGL_LIBS="$FB_LIB $COMPOSITE_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $MIEXT_LAYER_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB" - XEGL_SYS_LIBS = "$XEGL_SYS_LIBS $XEGLMODULES_LIBS $GLX_SYS_LIBS" - AC_SUBST([XEGL_LIBS]) - AC_SUBST([XEGL_SYS_LIBS]) -fi - -dnl Xglx DDX - -AC_MSG_CHECKING([whether to build Xglx DDX]) -if test "x$XGLX" != xno; then - PKG_CHECK_MODULES([XGLXMODULES], [glitz-glx >= 0.4.3 xrender], [XGLX=yes], [XGLX=no]) - AC_SUBST(XGLXMODULES_CFLAGS) -fi -AC_MSG_RESULT([$XGLX]) -AM_CONDITIONAL(XGLX, [test "x$XGLX" = xyes]) - -if test "x$XGLX" = xyes; then - XGLX_LIBS="$FB_LIB $COMPOSITE_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $MIEXT_LAYER_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB" - XGLX_SYS_LIBS="$XGLX_SYS_LIBS $XGLXMODULES_LIBS $GLX_SYS_LIBS" - AC_SUBST([XGLX_LIBS]) - AC_SUBST([XGLX_SYS_LIBS]) -fi - xorg_bus_linuxpci=no xorg_bus_bsdpci=no xorg_bus_ix86pci=no @@ -1315,7 +1254,7 @@ xorg_bus_ppcpci=no xorg_bus_sparcpci=no xorg_bus_sparc=no -if test "x$XORG" = xyes -o "x$XGL" = xyes; then +if test "x$XORG" = xyes; then XORG_DDXINCS='-I$(top_srcdir)/hw/xfree86 -I$(top_srcdir)/hw/xfree86/include -I$(top_srcdir)/hw/xfree86/common' XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os' XORG_INCS="$XORG_DDXINCS $XORG_OSINCS" @@ -2054,13 +1993,6 @@ hw/dmx/input/Makefile hw/dmx/glxProxy/Makefile hw/dmx/Makefile hw/vfb/Makefile -hw/xgl/Makefile -hw/xgl/egl/Makefile -hw/xgl/egl/module/Makefile -hw/xgl/glx/Makefile -hw/xgl/glx/module/Makefile -hw/xgl/glxext/Makefile -hw/xgl/glxext/module/Makefile hw/xnest/Makefile hw/xwin/Makefile hw/xquartz/Makefile diff --git a/hw/Makefile.am b/hw/Makefile.am index 4589b7eef..7409906a8 100644 --- a/hw/Makefile.am +++ b/hw/Makefile.am @@ -18,10 +18,6 @@ if XWIN XWIN_SUBDIRS = xwin endif -if XGL -XGL_SUBDIRS = xgl -endif - if KDRIVE KDRIVE_SUBDIRS = kdrive endif @@ -32,7 +28,6 @@ endif SUBDIRS = \ $(XORG_SUBDIRS) \ - $(XGL_SUBDIRS) \ $(XWIN_SUBDIRS) \ $(XVFB_SUBDIRS) \ $(XNEST_SUBDIRS) \ @@ -40,7 +35,7 @@ SUBDIRS = \ $(KDRIVE_SUBDIRS) \ $(XQUARTZ_SUBDIRS) -DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xgl +DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive relink: for i in $(SUBDIRS) ; do $(MAKE) -C $$i relink ; done diff --git a/hw/xgl/Makefile.am b/hw/xgl/Makefile.am deleted file mode 100644 index 8df8ae9af..000000000 --- a/hw/xgl/Makefile.am +++ /dev/null @@ -1,83 +0,0 @@ -if GLX -GLX_SUBDIRS = glxext -endif - -if XGLX -XGLX_SUBDIRS = glx -endif - -if XEGL -XEGL_SUBDIRS = egl -endif - -DIST_SUBDIRS = glxext glx egl - -SUBDIRS = \ - . \ - $(GLX_SUBDIRS) \ - $(XGLX_SUBDIRS) \ - $(XEGL_SUBDIRS) - -AM_CFLAGS = \ - $(DIX_CFLAGS) \ - -DHAVE_XGL_CONFIG_H \ - -DHAVE_DIX_CONFIG_H \ - -I$(top_srcdir)/glx \ - -I$(top_srcdir)/GL/include \ - -I@MESA_SOURCE@/include \ - -I@MESA_SOURCE@/src/mesa/glapi \ - $(XGLMODULES_CFLAGS) - -noinst_LIBRARIES = libxgl.a - -libxgl_a_SOURCES = \ - xgl.h \ - xglmodule.h \ - xglglx.h \ - xglinput.c \ - xgloutput.c \ - xglcmap.c \ - xglparse.c \ - xglscreen.c \ - xglarea.c \ - xglgeometry.c \ - xglpixmap.c \ - xglsync.c \ - xglsolid.c \ - xgltile.c \ - xglcopy.c \ - xglfill.c \ - xglwindow.c \ - xglget.c \ - xglgc.c \ - xglshm.c \ - xglcompose.c \ - xglpict.c \ - xglglyph.c \ - xgltrap.c \ - xglloader.c \ - xglhash.c \ - xglglx.c \ - xglxv.c - -EXTRA_DIST = \ - xglmodule.h - -Xgl_LDFLAGS = -export-dynamic -Xgl_SOURCES = \ - xglinit.c \ - $(top_srcdir)/mi/miinitext.c \ - $(top_srcdir)/Xext/dpmsstubs.c \ - $(top_srcdir)/Xi/stubs.c \ - $(top_srcdir)/fb/fbcmap.c - -XGL_LIBS = \ - libxgl.a \ - @XGL_LIBS@ \ - $(XSERVER_LIBS) - -Xgl_DEPENDENCIES = $(XGL_LIBS) -Xgl_LDADD = $(XGL_LIBS) $(XSERVER_SYS_LIBS) $(XGL_SYS_LIBS) -Xgl_programs = Xgl - -bin_PROGRAMS = $(Xgl_programs) diff --git a/hw/xgl/egl/Makefile.am b/hw/xgl/egl/Makefile.am deleted file mode 100644 index 8c4e9af75..000000000 --- a/hw/xgl/egl/Makefile.am +++ /dev/null @@ -1,44 +0,0 @@ -if XGL -XGL_MODULE_DIRS = module -endif - -DIST_SUBDIRS = module - -SUBDIRS = \ - . \ - $(XGL_MODULE_DIRS) - -AM_CFLAGS = \ - $(DIX_CFLAGS) \ - -DHAVE_XGL_CONFIG_H \ - -DHAVE_DIX_CONFIG_H \ - $(XEGLMODULES_CFLAGS) - -noinst_LTLIBRARIES = libxegl.la - -libxegl_la_SOURCES = \ - xegl.h \ - xegl.c \ - xeglinput.c \ - kkeymap.h \ - kinput.c \ - evdev.c - -XEGL_LIBS = \ - @XEGL_LIBS@ \ - libxegl.la \ - ../libxgl.a \ - $XSERVER_LIBS - -Xegl_LDFLAGS = -export-dynamic -Xegl_SOURCES = \ - xeglinit.c \ - $(top_srcdir)/mi/miinitext.c \ - $(top_srcdir)/Xext/dpmsstubs.c \ - $(top_srcdir)/Xi/stubs.c \ - $(top_srcdir)/fb/fbcmap.c - -Xegl_DEPENDENCIES = $(XEGL_LIBS) -Xegl_LDADD = $(XEGL_LIBS) $(XSERVER_SYS_LIBS) $(XEGL_SYS_LIBS) - -bin_PROGRAMS = Xegl diff --git a/hw/xgl/egl/evdev.c b/hw/xgl/egl/evdev.c deleted file mode 100644 index fff4524d1..000000000 --- a/hw/xgl/egl/evdev.c +++ /dev/null @@ -1,646 +0,0 @@ -/* - * Copyright © 2004 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include <xgl-config.h> -#define NEED_EVENTS -#include <errno.h> -#include <linux/input.h> -#include <X11/X.h> -#include <X11/Xproto.h> -#include <X11/Xpoll.h> -#define XK_PUBLISHING -#include <X11/keysym.h> -#include "inputstr.h" -#include "kkeymap.h" -#include "scrnintstr.h" -#include "xegl.h" - -#define NUM_EVENTS 128 -#define ABS_UNSET -65535 - -#define BITS_PER_LONG (sizeof(long) * 8) -#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1) -#define ISBITSET(x,y) ((x)[LONG(y)] & BIT(y)) -#define OFF(x) ((x)%BITS_PER_LONG) -#define LONG(x) ((x)/BITS_PER_LONG) -#define BIT(x) (1 << OFF(x)) -#define SETBIT(x,y) ((x)[LONG(y)] |= BIT(y)) -#define CLRBIT(x,y) ((x)[LONG(y)] &= ~BIT(y)) -#define ASSIGNBIT(x,y,z) ((x)[LONG(y)] = ((x)[LONG(y)] & ~BIT(y)) | (z << OFF(y))) - -typedef struct _kevdevMouse { - /* current device state */ - int rel[REL_MAX + 1]; - int abs[ABS_MAX + 1]; - int prevabs[ABS_MAX + 1]; - long key[NBITS(KEY_MAX + 1)]; - - /* supported device info */ - long relbits[NBITS(REL_MAX + 1)]; - long absbits[NBITS(ABS_MAX + 1)]; - long keybits[NBITS(KEY_MAX + 1)]; - struct input_absinfo absinfo[ABS_MAX + 1]; - int max_rel; - int max_abs; -} Kevdev; - -static int flags = 0; - -static void -EvdevMotion (KdMouseInfo *mi) -{ - Kevdev *ke = mi->driver; - int i; - - for (i = 0; i <= ke->max_rel; i++) - if (ke->rel[i]) - { - KdEnqueueMouseEvent (mi, flags | KD_MOUSE_DELTA, ke->rel[0], ke->rel[1]); - int a; -// ErrorF ("rel"); - for (a = 0; a <= ke->max_rel; a++) - { -// if (ISBITSET (ke->relbits, a)) -// ErrorF (" %d=%d", a, ke->rel[a]); - ke->rel[a] = 0; - } -// ErrorF ("\n"); - break; - } - for (i = 0; i < ke->max_abs; i++) - if (ke->abs[i] != ke->prevabs[i]) - { - KdEnqueueMouseEvent (mi, flags, ke->abs[0], ke->abs[1]); - int a; -// ErrorF ("abs"); - for (a = 0; a <= ke->max_abs; a++) - { -// if (ISBITSET (ke->absbits, a)) -// ErrorF (" %d=%d", a, ke->abs[a]); - ke->prevabs[a] = ke->abs[a]; - } -// ErrorF ("\n"); - break; - } -} - -static void -EvdevRead (int evdevPort, void *closure) -{ - KdMouseInfo *mi = closure; - Kevdev *ke = mi->driver; - int i, n; - struct input_event events[NUM_EVENTS]; - - n = read (evdevPort, &events, NUM_EVENTS * sizeof (struct input_event)); - if (n <= 0) - return; - n /= sizeof (struct input_event); - for (i = 0; i < n; i++) - { - switch (events[i].type) { - case EV_SYN: - break; - case EV_KEY: - EvdevMotion (mi); - ASSIGNBIT(ke->key,events[i].code, events[i].value); - if (events[i].code < 0x100) - ErrorF ("key %d %d\n", events[i].code, events[i].value); - else - ErrorF ("key 0x%x %d\n", events[i].code, events[i].value); - - if (events[i].value==1) { - switch (events[i].code) { - case BTN_LEFT: - flags |= KD_BUTTON_1; - break; - case BTN_RIGHT: - flags |= KD_BUTTON_3; - break; - case BTN_MIDDLE: - flags |= KD_BUTTON_2; - break; - case BTN_FORWARD: - flags |= KD_BUTTON_4; - break; - case BTN_BACK: - flags |= KD_BUTTON_5; - break; - } - } - else if (events[i].value==0) { - switch (events[i].code) { - case BTN_LEFT: - flags &= ~KD_BUTTON_1; - break; - case BTN_RIGHT: - flags &= ~KD_BUTTON_3; - break; - case BTN_MIDDLE: - flags &= ~KD_BUTTON_2; - break; - case BTN_FORWARD: - flags &= ~KD_BUTTON_4; - break; - case BTN_BACK: - flags &= ~KD_BUTTON_5; - break; - } - } - KdEnqueueMouseEvent (mi, KD_MOUSE_DELTA | flags, 0, 0); - break; - case EV_REL: - ke->rel[events[i].code] += events[i].value; - break; - case EV_ABS: - ke->abs[events[i].code] = events[i].value; - break; - } - } - EvdevMotion (mi); -} - -int EvdevInputType; - -char *kdefaultEvdev[] = { - // "/dev/input/event0", - "/dev/input/event1", - // "/dev/input/event2", - // "/dev/input/event3", - // "/dev/input/event4", - // "/dev/input/event5", -}; - -#define NUM_DEFAULT_EVDEV (sizeof (kdefaultEvdev) / sizeof (kdefaultEvdev[0])) - -static Bool -EvdevInit (void) -{ - int i; - int fd; - KdMouseInfo *mi, *next; - int n = 0; - char *prot; - char name[100]; - - if (!EvdevInputType) - EvdevInputType = KdAllocInputType (); - - for (mi = kdMouseInfo; mi; mi = next) - { - next = mi->next; - prot = mi->prot; - if (mi->inputType) - continue; - if (!mi->name) - { - for (i = 0; i < NUM_DEFAULT_EVDEV; i++) - { - fd = open (kdefaultEvdev[i], 2); - if (fd >= 0) - { - ioctl(fd, EVIOCGRAB, 1); - - ioctl(fd, EVIOCGNAME(sizeof(name)), name); - ErrorF("Name is %s\n", name); - ioctl(fd, EVIOCGPHYS(sizeof(name)), name); - ErrorF("Phys Loc is %s\n", name); - ioctl(fd, EVIOCGUNIQ(sizeof(name)), name); - ErrorF("Unique is %s\n", name); - - mi->name = KdSaveString (kdefaultEvdev[i]); - break; - } - } - } - else - fd = open (mi->name, 2); - - if (fd >= 0) - { - unsigned long ev[NBITS(EV_MAX)]; - Kevdev *ke; - - if (ioctl (fd, EVIOCGBIT(0 /*EV*/, sizeof (ev)), ev) < 0) - { - perror ("EVIOCGBIT 0"); - close (fd); - continue; - } - ke = xalloc (sizeof (Kevdev)); - if (!ke) - { - close (fd); - continue; - } - memset (ke, '\0', sizeof (Kevdev)); - if (ISBITSET (ev, EV_KEY)) - { - if (ioctl (fd, EVIOCGBIT (EV_KEY, sizeof (ke->keybits)), - ke->keybits) < 0) - { - perror ("EVIOCGBIT EV_KEY"); - xfree (ke); - close (fd); - continue; - } - } - if (ISBITSET (ev, EV_REL)) - { - if (ioctl (fd, EVIOCGBIT (EV_REL, sizeof (ke->relbits)), - ke->relbits) < 0) - { - perror ("EVIOCGBIT EV_REL"); - xfree (ke); - close (fd); - continue; - } - for (ke->max_rel = REL_MAX; ke->max_rel >= 0; ke->max_rel--) - if (ISBITSET(ke->relbits, ke->max_rel)) - break; - } - if (ISBITSET (ev, EV_ABS)) - { - int i; - - if (ioctl (fd, EVIOCGBIT (EV_ABS, sizeof (ke->absbits)), - ke->absbits) < 0) - { - perror ("EVIOCGBIT EV_ABS"); - xfree (ke); - close (fd); - continue; - } - for (ke->max_abs = ABS_MAX; ke->max_abs >= 0; ke->max_abs--) - if (ISBITSET(ke->absbits, ke->max_abs)) - break; - for (i = 0; i <= ke->max_abs; i++) - { - if (ISBITSET (ke->absbits, i)) - if (ioctl (fd, EVIOCGABS(i), &ke->absinfo[i]) < 0) - { - perror ("EVIOCGABS"); - break; - } - ke->prevabs[i] = ABS_UNSET; - } - if (i <= ke->max_abs) - { - xfree (ke); - close (fd); - continue; - } - } - mi->driver = ke; - mi->inputType = EvdevInputType; - if (KdRegisterFd (EvdevInputType, fd, EvdevRead, (void *) mi)) - n++; - } - } - return TRUE; -} - -static void -EvdevFini (void) -{ - KdMouseInfo *mi; - - KdUnregisterFds (EvdevInputType, TRUE); - for (mi = kdMouseInfo; mi; mi = mi->next) - { - if (mi->inputType == EvdevInputType) - { - xfree (mi->driver); - mi->driver = 0; - mi->inputType = 0; - } - } -} - -KdMouseFuncs LinuxEvdevMouseFuncs = { - EvdevInit, - EvdevFini, -}; - - -KeySym evdevKeymap[(112 - 1 + 1) * 2] = { -/* These are directly mapped from DOS scanset 0 */ -/* 1 8 */ XK_Escape, NoSymbol, -/* 2 9 */ XK_1, XK_exclam, -/* 3 10 */ XK_2, XK_at, -/* 4 11 */ XK_3, XK_numbersign, -/* 5 12 */ XK_4, XK_dollar, -/* 6 13 */ XK_5, XK_percent, -/* 7 14 */ XK_6, XK_asciicircum, -/* 8 15 */ XK_7, XK_ampersand, -/* 9 16 */ XK_8, XK_asterisk, -/* 10 17 */ XK_9, XK_parenleft, -/* 11 18 */ XK_0, XK_parenright, -/* 12 19 */ XK_minus, XK_underscore, -/* 13 20 */ XK_equal, XK_plus, -/* 14 21 */ XK_BackSpace, NoSymbol, -/* 15 22 */ XK_Tab, NoSymbol, -/* 16 23 */ XK_Q, NoSymbol, -/* 17 24 */ XK_W, NoSymbol, -/* 18 25 */ XK_E, NoSymbol, -/* 19 26 */ XK_R, NoSymbol, -/* 20 27 */ XK_T, NoSymbol, -/* 21 28 */ XK_Y, NoSymbol, -/* 22 29 */ XK_U, NoSymbol, -/* 23 30 */ XK_I, NoSymbol, -/* 24 31 */ XK_O, NoSymbol, -/* 25 32 */ XK_P, NoSymbol, -/* 26 33 */ XK_bracketleft, XK_braceleft, -/* 27 34 */ XK_bracketright, XK_braceright, -/* 28 35 */ XK_Return, NoSymbol, -/* 29 36 */ XK_Control_L, NoSymbol, -/* 30 37 */ XK_A, NoSymbol, -/* 31 38 */ XK_S, NoSymbol, -/* 32 39 */ XK_D, NoSymbol, -/* 33 40 */ XK_F, NoSymbol, -/* 34 41 */ XK_G, NoSymbol, -/* 35 42 */ XK_H, NoSymbol, -/* 36 43 */ XK_J, NoSymbol, -/* 37 44 */ XK_K, NoSymbol, -/* 38 45 */ XK_L, NoSymbol, -/* 39 46 */ XK_semicolon, XK_colon, -/* 40 47 */ XK_apostrophe, XK_quotedbl, -/* 41 48 */ XK_grave, XK_asciitilde, -/* 42 49 */ XK_Shift_L, NoSymbol, -/* 43 50 */ XK_backslash, XK_bar, -/* 44 51 */ XK_Z, NoSymbol, -/* 45 52 */ XK_X, NoSymbol, -/* 46 53 */ XK_C, NoSymbol, -/* 47 54 */ XK_V, NoSymbol, -/* 48 55 */ XK_B, NoSymbol, -/* 49 56 */ XK_N, NoSymbol, -/* 50 57 */ XK_M, NoSymbol, -/* 51 58 */ XK_comma, XK_less, -/* 52 59 */ XK_period, XK_greater, -/* 53 60 */ XK_slash, XK_question, -/* 54 61 */ XK_Shift_R, NoSymbol, -/* 55 62 */ XK_KP_Multiply, NoSymbol, -/* 56 63 */ XK_Alt_L, XK_Meta_L, -/* 57 64 */ XK_space, NoSymbol, -/* 58 65 */ XK_Caps_Lock, NoSymbol, -/* 59 66 */ XK_F1, NoSymbol, -/* 60 67 */ XK_F2, NoSymbol, -/* 61 68 */ XK_F3, NoSymbol, -/* 62 69 */ XK_F4, NoSymbol, -/* 63 70 */ XK_F5, NoSymbol, -/* 64 71 */ XK_F6, NoSymbol, -/* 65 72 */ XK_F7, NoSymbol, -/* 66 73 */ XK_F8, NoSymbol, -/* 67 74 */ XK_F9, NoSymbol, -/* 68 75 */ XK_F10, NoSymbol, -/* 69 76 */ XK_Break, XK_Pause, -/* 70 77 */ XK_Scroll_Lock, NoSymbol, -/* 71 78 */ XK_KP_Home, XK_KP_7, -/* 72 79 */ XK_KP_Up, XK_KP_8, -/* 73 80 */ XK_KP_Page_Up, XK_KP_9, -/* 74 81 */ XK_KP_Subtract, NoSymbol, -/* 75 82 */ XK_KP_Left, XK_KP_4, -/* 76 83 */ XK_KP_5, NoSymbol, -/* 77 84 */ XK_KP_Right, XK_KP_6, -/* 78 85 */ XK_KP_Add, NoSymbol, -/* 79 86 */ XK_KP_End, XK_KP_1, -/* 80 87 */ XK_KP_Down, XK_KP_2, -/* 81 88 */ XK_KP_Page_Down, XK_KP_3, -/* 82 89 */ XK_KP_Insert, XK_KP_0, -/* 83 90 */ XK_KP_Delete, XK_KP_Decimal, -/* 84 91 */ NoSymbol, NoSymbol, -/* 85 92 */ NoSymbol, NoSymbol, -/* 86 93 */ NoSymbol, NoSymbol, -/* 87 94 */ XK_F11, NoSymbol, -/* 88 95 */ XK_F12, NoSymbol, - -/* These are remapped from the extended set (using ExtendMap) */ - -/* 89 96 */ XK_Control_R, NoSymbol, -/* 90 97 */ XK_KP_Enter, NoSymbol, -/* 91 98 */ XK_KP_Divide, NoSymbol, -/* 92 99 */ XK_Sys_Req, XK_Print, -/* 93 100 */ XK_Alt_R, XK_Meta_R, -/* 94 101 */ XK_Num_Lock, NoSymbol, -/* 95 102 */ XK_Home, NoSymbol, -/* 96 103 */ XK_Up, NoSymbol, -/* 97 104 */ XK_Page_Up, NoSymbol, -/* 98 105 */ XK_Left, NoSymbol, -/* 99 106 */ XK_Right, NoSymbol, -/* 100 107 */ XK_End, NoSymbol, -/* 101 108 */ XK_Down, NoSymbol, -/* 102 109 */ XK_Page_Down, NoSymbol, -/* 103 110 */ XK_Insert, NoSymbol, -/* 104 111 */ XK_Delete, NoSymbol, -/* 105 112 */ XK_Super_L, NoSymbol, -/* 106 113 */ XK_Super_R, NoSymbol, -/* 107 114 */ XK_Menu, NoSymbol, -/* 108 115 */ NoSymbol, NoSymbol, -/* 109 116 */ NoSymbol, NoSymbol, -/* 110 117 */ NoSymbol, NoSymbol, -/* 111 118 */ NoSymbol, NoSymbol, -/* 112 119 */ NoSymbol, NoSymbol, -}; - -static void -EvdevRead1 (int evdevPort, void *closure) -{ - int i, n, xk; - struct input_event events[NUM_EVENTS]; - - n = read (evdevPort, &events, NUM_EVENTS * sizeof (struct input_event)); - if (n <= 0) - return; - n /= sizeof (struct input_event); - for (i = 0; i < n; i++) - { - switch (events[i].type) { - case EV_SYN: - break; - case EV_KEY: - xk = events[i].code; - if (events[i].code < 0x100) - ErrorF ("key %d %d xk %d\n", events[i].code, events[i].value, xk); - else - ErrorF ("key 0x%x %d xk %d\n", events[i].code, events[i].value, xk); - if (events[i].value == 2) { - //KdEnqueueKeyboardEvent (xk, 0); - KdEnqueueKeyboardEvent (xk, 0); - } else - KdEnqueueKeyboardEvent (xk, !events[i].value); - break; - } - } -} - -char *kdefaultEvdev1[] = { - "/dev/input/event0", - // "/dev/input/event1", - // "/dev/input/event2", - // "/dev/input/event3", - // "/dev/input/event4", - // "/dev/input/event5", -}; - -#define NUM_DEFAULT_EVDEV1 (sizeof (kdefaultEvdev1) / sizeof (kdefaultEvdev1[0])) - -static Bool -EvdevKbdInit (void) -{ - int i; - int fd; - int n = 0; - char name[100]; - - if (!EvdevInputType) - EvdevInputType = KdAllocInputType (); - - for (i = 0; i < NUM_DEFAULT_EVDEV; i++) - { - fd = open (kdefaultEvdev1[i], 2); - if (fd >= 0) - { - ioctl(fd, EVIOCGRAB, 1); - - ioctl(fd, EVIOCGNAME(sizeof(name)), name); - ErrorF("Name is %s\n", name); - ioctl(fd, EVIOCGPHYS(sizeof(name)), name); - ErrorF("Phys Loc is %s\n", name); - ioctl(fd, EVIOCGUNIQ(sizeof(name)), name); - ErrorF("Unique is %s\n", name); - - } - - if (fd >= 0) - { - unsigned long ev[NBITS(EV_MAX)]; - Kevdev *ke; - - if (ioctl (fd, EVIOCGBIT(0 /*EV*/, sizeof (ev)), ev) < 0) - { - perror ("EVIOCGBIT 0"); - close (fd); - continue; - } - ke = xalloc (sizeof (Kevdev)); - if (!ke) - { - close (fd); - continue; - } - memset (ke, '\0', sizeof (Kevdev)); - if (ISBITSET (ev, EV_KEY)) - { - if (ioctl (fd, EVIOCGBIT (EV_KEY, sizeof (ke->keybits)), - ke->keybits) < 0) - { - perror ("EVIOCGBIT EV_KEY"); - xfree (ke); - close (fd); - continue; - } - } - if (ISBITSET (ev, EV_REL)) - { - if (ioctl (fd, EVIOCGBIT (EV_REL, sizeof (ke->relbits)), - ke->relbits) < 0) - { - perror ("EVIOCGBIT EV_REL"); - xfree (ke); - close (fd); - continue; - } - for (ke->max_rel = REL_MAX; ke->max_rel >= 0; ke->max_rel--) - if (ISBITSET(ke->relbits, ke->max_rel)) - break; - } - if (ISBITSET (ev, EV_ABS)) - { - int i; - - if (ioctl (fd, EVIOCGBIT (EV_ABS, sizeof (ke->absbits)), - ke->absbits) < 0) - { - perror ("EVIOCGBIT EV_ABS"); - xfree (ke); - close (fd); - continue; - } - for (ke->max_abs = ABS_MAX; ke->max_abs >= 0; ke->max_abs--) - if (ISBITSET(ke->absbits, ke->max_abs)) - break; - for (i = 0; i <= ke->max_abs; i++) - { - if (ISBITSET (ke->absbits, i)) - if (ioctl (fd, EVIOCGABS(i), &ke->absinfo[i]) < 0) - { - perror ("EVIOCGABS"); - break; - } - ke->prevabs[i] = ABS_UNSET; - } - if (i <= ke->max_abs) - { - xfree (ke); - close (fd); - continue; - } - } - if (KdRegisterFd (EvdevInputType, fd, EvdevRead1, NULL)) - n++; - } - } - return TRUE; -} - -static void EvdevKbdLoad(void) -{ - kdMinScanCode = 1; - kdMaxScanCode = 112; - kdKeymapWidth = 2; - memcpy (kdKeymap, evdevKeymap, sizeof (evdevKeymap)); -} - -static void -EvdevKbdFini (void) -{ -} - -static void -EvdevKbdLeds (int leds) -{ -} - - -static void EvdevKbdBell(int volume, int pitch, int duration) -{ -} - - -KdKeyboardFuncs LinuxEvdevKeyboardFuncs = { - EvdevKbdLoad, - EvdevKbdInit, - EvdevKbdLeds, - EvdevKbdBell, - EvdevKbdFini, - 0, -}; diff --git a/hw/xgl/egl/kinput.c b/hw/xgl/egl/kinput.c deleted file mode 100644 index 6c1018cb3..000000000 --- a/hw/xgl/egl/kinput.c +++ /dev/null @@ -1,1670 +0,0 @@ -/* - * Copyright 1999 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include <xgl-config.h> - -#include <signal.h> -#include <stdio.h> - -#include "xegl.h" -#include "mipointer.h" -#include "inputstr.h" - -#define XK_PUBLISHING -#include <X11/keysym.h> -#if HAVE_X11_XF86KEYSYM_H -#include <X11/XF86keysym.h> -#endif -#include "kkeymap.h" - -#ifdef XKB -#define XKB_IN_SERVER -#include <xkbsrv.h> -#endif - -static DeviceIntPtr pKdKeyboard, pKdPointer; - -#define MAX_MOUSE_DRIVERS 6 - -static KdMouseFuncs *kdMouseFuncs[MAX_MOUSE_DRIVERS]; -static int kdNMouseFuncs; -static KdKeyboardFuncs *kdKeyboardFuncs; -static int kdBellPitch; -static int kdBellDuration; -static int kdLeds; -static Bool kdInputEnabled; -static Bool kdOffScreen; -static unsigned long kdOffScreenTime; -static KdMouseMatrix kdMouseMatrix = { - { { 1, 0, 0 }, - { 0, 1, 0 } } -}; - -int kdMouseButtonCount; -int kdMinScanCode; -int kdMaxScanCode; -int kdMinKeyCode; -int kdMaxKeyCode; -int kdKeymapWidth = KD_MAX_WIDTH; -KeySym kdKeymap[KD_MAX_LENGTH * KD_MAX_WIDTH]; -CARD8 kdModMap[MAP_LENGTH]; -KeySymsRec kdKeySyms; - - -void -KdResetInputMachine (void); - -#define KD_KEY_COUNT 248 - -CARD8 kdKeyState[KD_KEY_COUNT/8]; - -#define IsKeyDown(key) ((kdKeyState[(key) >> 3] >> ((key) & 7)) & 1) - -#define KD_MAX_INPUT_FDS 8 - -typedef struct _kdInputFd { - int type; - int fd; - void (*read) (int fd, void *closure); - int (*enable) (int fd, void *closure); - void (*disable) (int fd, void *closure); - void *closure; -} KdInputFd; - -KdInputFd kdInputFds[KD_MAX_INPUT_FDS]; -int kdNumInputFds; -int kdInputTypeSequence; - -static void -KdSigio (int sig) -{ - int i; - - for (i = 0; i < kdNumInputFds; i++) - (*kdInputFds[i].read) (kdInputFds[i].fd, kdInputFds[i].closure); -} - -static void -KdBlockSigio (void) -{ - sigset_t set; - - sigemptyset (&set); - sigaddset (&set, SIGIO); - sigprocmask (SIG_BLOCK, &set, 0); -} - -static void -KdUnblockSigio (void) -{ - sigset_t set; - - sigemptyset (&set); - sigaddset (&set, SIGIO); - sigprocmask (SIG_UNBLOCK, &set, 0); -} - -#undef VERIFY_SIGIO -#ifdef VERIFY_SIGIO - -void -KdAssertSigioBlocked (char *where) -{ - sigset_t set, old; - - sigemptyset (&set); - sigprocmask (SIG_BLOCK, &set, &old); - if (!sigismember (&old, SIGIO)) - ErrorF ("SIGIO not blocked at %s\n", where); -} - -#else - -#define KdAssertSigioBlocked(s) - -#endif - -static int kdnFds; - -#ifdef FNONBLOCK -#define NOBLOCK FNONBLOCK -#else -#define NOBLOCK FNDELAY -#endif - -static void -KdNonBlockFd (int fd) -{ - int flags; - flags = fcntl (fd, F_GETFL); - flags |= FASYNC|NOBLOCK; - fcntl (fd, F_SETFL, flags); -} - -static void -KdAddFd (int fd) -{ - struct sigaction act; - sigset_t set; - - kdnFds++; - fcntl (fd, F_SETOWN, getpid()); - KdNonBlockFd (fd); - AddEnabledDevice (fd); - memset (&act, '\0', sizeof act); - act.sa_handler = KdSigio; - sigemptyset (&act.sa_mask); - sigaddset (&act.sa_mask, SIGIO); - sigaddset (&act.sa_mask, SIGALRM); - sigaddset (&act.sa_mask, SIGVTALRM); - sigaction (SIGIO, &act, 0); - sigemptyset (&set); - sigprocmask (SIG_SETMASK, &set, 0); -} - -static void -KdRemoveFd (int fd) -{ - struct sigaction act; - int flags; - - kdnFds--; - RemoveEnabledDevice (fd); - flags = fcntl (fd, F_GETFL); - flags &= ~(FASYNC|NOBLOCK); - fcntl (fd, F_SETFL, flags); - if (kdnFds == 0) - { - memset (&act, '\0', sizeof act); - act.sa_handler = SIG_IGN; - sigemptyset (&act.sa_mask); - sigaction (SIGIO, &act, 0); - } -} - -int -KdAllocInputType (void) -{ - return ++kdInputTypeSequence; -} - -Bool -KdRegisterFd (int type, int fd, void (*read) (int fd, void *closure), void *closure) -{ - if (kdNumInputFds == KD_MAX_INPUT_FDS) - return FALSE; - kdInputFds[kdNumInputFds].type = type; - kdInputFds[kdNumInputFds].fd = fd; - kdInputFds[kdNumInputFds].read = read; - kdInputFds[kdNumInputFds].enable = 0; - kdInputFds[kdNumInputFds].disable = 0; - kdInputFds[kdNumInputFds].closure = closure; - ++kdNumInputFds; - if (kdInputEnabled) - KdAddFd (fd); - return TRUE; -} - -void -KdRegisterFdEnableDisable (int fd, - int (*enable) (int fd, void *closure), - void (*disable) (int fd, void *closure)) -{ - int i; - - for (i = 0; i < kdNumInputFds; i++) - if (kdInputFds[i].fd == fd) - { - kdInputFds[i].enable = enable; - kdInputFds[i].disable = disable; - break; - } -} - -void -KdUnregisterFds (int type, Bool do_close) -{ - int i, j; - - for (i = 0; i < kdNumInputFds;) - { - if (kdInputFds[i].type == type) - { - if (kdInputEnabled) - KdRemoveFd (kdInputFds[i].fd); - if (do_close) - close (kdInputFds[i].fd); - --kdNumInputFds; - for (j = i; j < kdNumInputFds; j++) - kdInputFds[j] = kdInputFds[j+1]; - } - else - i++; - } -} - -static void -KdDisableInput (void) -{ - int i; - - KdBlockSigio (); - - for (i = 0; i < kdNumInputFds; i++) - { - KdRemoveFd (kdInputFds[i].fd); - if (kdInputFds[i].disable) - (*kdInputFds[i].disable) (kdInputFds[i].fd, kdInputFds[i].closure); - } - kdInputEnabled = FALSE; -} - -static void -KdEnableInput (void) -{ - xEvent xE; - int i; - - kdInputEnabled = TRUE; - for (i = 0; i < kdNumInputFds; i++) - { - KdNonBlockFd (kdInputFds[i].fd); - if (kdInputFds[i].enable) - kdInputFds[i].fd = (*kdInputFds[i].enable) (kdInputFds[i].fd, kdInputFds[i].closure); - KdAddFd (kdInputFds[i].fd); - } - - /* reset screen saver */ - xE.u.keyButtonPointer.time = GetTimeInMillis (); - NoticeEventTime (&xE); - - KdUnblockSigio (); -} - -static int -KdMouseProc(DeviceIntPtr pDevice, int onoff) -{ - BYTE map[KD_MAX_BUTTON]; - DevicePtr pDev = (DevicePtr)pDevice; - int i; - - if (!pDev) - return BadImplementation; - - switch (onoff) - { - case DEVICE_INIT: - for (i = 1; i <= kdMouseButtonCount; i++) - map[i] = i; - InitPointerDeviceStruct(pDev, map, kdMouseButtonCount, - miPointerGetMotionEvents, - (PtrCtrlProcPtr)NoopDDA, - miPointerGetMotionBufferSize()); - break; - - case DEVICE_ON: - pDev->on = TRUE; - pKdPointer = pDevice; - for (i = 0; i < kdNMouseFuncs; i++) - (*kdMouseFuncs[i]->Init)(); - break; - case DEVICE_OFF: - case DEVICE_CLOSE: - if (pDev->on) - { - pDev->on = FALSE; - pKdPointer = 0; - for (i = 0; i < kdNMouseFuncs; i++) - (*kdMouseFuncs[i]->Fini) (); - } - break; - } - return Success; -} - -Bool -KdLegalModifier(unsigned int key, DevicePtr pDev) -{ - return TRUE; -} - -static void -KdBell (int volume, DeviceIntPtr pDev, pointer ctrl, int something) -{ - if (kdInputEnabled) - (*kdKeyboardFuncs->Bell) (volume, kdBellPitch, kdBellDuration); -} - - -static void -KdSetLeds (void) -{ - if (kdInputEnabled) - (*kdKeyboardFuncs->Leds) (kdLeds); -} - -static void -KdSetLed (int led, Bool on) -{ - NoteLedState (pKdKeyboard, led, on); - kdLeds = pKdKeyboard->kbdfeed->ctrl.leds; - KdSetLeds (); -} - -static void -KdSetMouseMatrix (KdMouseMatrix *matrix) -{ - kdMouseMatrix = *matrix; -} - -static void -KdComputeMouseMatrix (KdMouseMatrix *m, Rotation randr, int width, int height) -{ - int x_dir = 1, y_dir = 1; - int i, j; - int size[2]; - - size[0] = width; size[1] = height; - if (randr & RR_Reflect_X) - x_dir = -1; - if (randr & RR_Reflect_Y) - y_dir = -1; - switch (randr & (RR_Rotate_All)) { - case RR_Rotate_0: - m->matrix[0][0] = x_dir; m->matrix[0][1] = 0; - m->matrix[1][0] = 0; m->matrix[1][1] = y_dir; - break; - case RR_Rotate_90: - m->matrix[0][0] = 0; m->matrix[0][1] = -x_dir; - m->matrix[1][0] = y_dir; m->matrix[1][1] = 0; - break; - case RR_Rotate_180: - m->matrix[0][0] = -x_dir; m->matrix[0][1] = 0; - m->matrix[1][0] = 0; m->matrix[1][1] = -y_dir; - break; - case RR_Rotate_270: - m->matrix[0][0] = 0; m->matrix[0][1] = x_dir; - m->matrix[1][0] = -y_dir; m->matrix[1][1] = 0; - break; - } - for (i = 0; i < 2; i++) - { - m->matrix[i][2] = 0; - for (j = 0 ; j < 2; j++) - if (m->matrix[i][j] < 0) - m->matrix[i][2] = size[j] - 1; - } -} - -static void -KdKbdCtrl (DeviceIntPtr pDevice, KeybdCtrl *ctrl) -{ - kdLeds = ctrl->leds; - kdBellPitch = ctrl->bell_pitch; - kdBellDuration = ctrl->bell_duration; - KdSetLeds (); -} - -static int -KdKeybdProc(DeviceIntPtr pDevice, int onoff) -{ - Bool ret; - DevicePtr pDev = (DevicePtr)pDevice; -#ifdef XKB - XkbComponentNamesRec names; -#endif - - if (!pDev) - return BadImplementation; - - switch (onoff) - { - case DEVICE_INIT: - if (pDev != (DevicePtr)inputInfo.keyboard) - { - return !Success; - } -#ifndef XKB - ret = InitKeyboardDeviceStruct(pDev, - &kdKeySyms, - kdModMap, - KdBell, KdKbdCtrl); -#else - memset(&names, 0, sizeof(XkbComponentNamesRec)); - - XkbSetRulesDflts ("base", "pc101", "us", NULL, NULL); - ret = XkbInitKeyboardDeviceStruct (pDev, - &names, - &kdKeySyms, - kdModMap, - KdBell, KdKbdCtrl); -#endif - if (!ret) - return BadImplementation; - break; - case DEVICE_ON: - pDev->on = TRUE; - pKdKeyboard = pDevice; - if (kdKeyboardFuncs) - (*kdKeyboardFuncs->Init) (); - break; - case DEVICE_OFF: - case DEVICE_CLOSE: - pKdKeyboard = 0; - if (pDev->on) - { - pDev->on = FALSE; - if (kdKeyboardFuncs) - (*kdKeyboardFuncs->Fini) (); - } - break; - } - return Success; -} - -extern KeybdCtrl defaultKeyboardControl; - -static void -KdInitAutoRepeats (void) -{ - int key_code; - unsigned char mask; - int i; - unsigned char *repeats; - - repeats = defaultKeyboardControl.autoRepeats; - memset (repeats, '\0', 32); - for (key_code = KD_MIN_KEYCODE; key_code <= KD_MAX_KEYCODE; key_code++) - { - if (!kdModMap[key_code]) - { - i = key_code >> 3; - mask = 1 << (key_code & 7); - repeats[i] |= mask; - } - } -} - -const KdKeySymModsRec kdKeySymMods[] = { - { XK_Control_L, ControlMask }, - { XK_Control_R, ControlMask }, - { XK_Shift_L, ShiftMask }, - { XK_Shift_R, ShiftMask }, - { XK_Caps_Lock, LockMask }, - { XK_Shift_Lock, LockMask }, - { XK_Alt_L, Mod1Mask }, - { XK_Alt_R, Mod1Mask }, - { XK_Meta_L, Mod1Mask }, - { XK_Meta_R, Mod1Mask }, - { XK_Num_Lock, Mod2Mask }, - { XK_Super_L, Mod3Mask }, - { XK_Super_R, Mod3Mask }, - { XK_Hyper_L, Mod3Mask }, - { XK_Hyper_R, Mod3Mask }, - { XK_Mode_switch, Mod4Mask }, -#ifdef TOUCHSCREEN - /* PDA specific hacks */ -#ifdef XF86XK_Start - { XF86XK_Start, ControlMask }, -#endif - { XK_Menu, ShiftMask }, - { XK_telephone, Mod1Mask }, -#ifdef XF86XK_AudioRecord - { XF86XK_AudioRecord, Mod2Mask }, -#endif -#ifdef XF86XK_Calendar - { XF86XK_Calendar, Mod3Mask } -#endif -#endif -}; - -#define NUM_SYM_MODS (sizeof(kdKeySymMods) / sizeof(kdKeySymMods[0])) - -static void -KdInitModMap (void) -{ - int key_code; - int row; - int width; - KeySym *syms; - int i; - - width = kdKeySyms.mapWidth; - for (key_code = kdMinKeyCode; key_code <= kdMaxKeyCode; key_code++) - { - kdModMap[key_code] = 0; - syms = kdKeymap + (key_code - kdMinKeyCode) * width; - for (row = 0; row < width; row++, syms++) - { - for (i = 0; i < NUM_SYM_MODS; i++) - { - if (*syms == kdKeySymMods[i].modsym) - kdModMap[key_code] |= kdKeySymMods[i].modbit; - } - } - } -} - -static void -KdAddMouseDriver(KdMouseFuncs *pMouseFuncs) -{ - if (kdNMouseFuncs < MAX_MOUSE_DRIVERS) - kdMouseFuncs[kdNMouseFuncs++] = pMouseFuncs; -} - -void -eglInitInput(KdMouseFuncs *pMouseFuncs, - KdKeyboardFuncs *pKeyboardFuncs) -{ - DeviceIntPtr pKeyboard, pPointer; - KdMouseInfo *mi; - - if (!kdMouseInfo) - KdParseMouse (0); - kdMouseButtonCount = 0; - for (mi = kdMouseInfo; mi; mi = mi->next) - { - if (mi->nbutton > kdMouseButtonCount) - kdMouseButtonCount = mi->nbutton; - } - - kdNMouseFuncs = 0; - KdAddMouseDriver (pMouseFuncs); - kdKeyboardFuncs = pKeyboardFuncs; - memset (kdKeyState, '\0', sizeof (kdKeyState)); - if (kdKeyboardFuncs) - (*kdKeyboardFuncs->Load) (); - kdMinKeyCode = kdMinScanCode + KD_KEY_OFFSET; - kdMaxKeyCode = kdMaxScanCode + KD_KEY_OFFSET; - kdKeySyms.map = kdKeymap; - kdKeySyms.minKeyCode = kdMinKeyCode; - kdKeySyms.maxKeyCode = kdMaxKeyCode; - kdKeySyms.mapWidth = kdKeymapWidth; - kdLeds = 0; - kdBellPitch = 1000; - kdBellDuration = 200; - kdInputEnabled = TRUE; - KdInitModMap (); - KdInitAutoRepeats (); - KdResetInputMachine (); - pPointer = AddInputDevice(KdMouseProc, TRUE); - pKeyboard = AddInputDevice(KdKeybdProc, TRUE); - RegisterPointerDevice(pPointer); - RegisterKeyboardDevice(pKeyboard); - miRegisterPointerDevice(screenInfo.screens[0], pPointer); - mieqInit(&pKeyboard->public, &pPointer->public); - { - static long zero1, zero2; - - //SetExtInputCheck (&zero1, &zero2); - ErrorF("Extended Input Devices not yet supported. Impelement it at line %d in %s\n", - __LINE__, __FILE__); - } -} - -/* - * Middle button emulation state machine - * - * Possible transitions: - * Button 1 press v1 - * Button 1 release ^1 - * Button 2 press v2 - * Button 2 release ^2 - * Button 3 press v3 - * Button 3 release ^3 - * Button other press vo - * Button other release ^o - * Mouse motion <> - * Keyboard event k - * timeout ... - * outside box <-> - * - * States: - * start - * button_1_pend - * button_1_down - * button_2_down - * button_3_pend - * button_3_down - * synthetic_2_down_13 - * synthetic_2_down_3 - * synthetic_2_down_1 - * - * Transition diagram - * - * start - * v1 -> (hold) (settimeout) button_1_pend - * ^1 -> (deliver) start - * v2 -> (deliver) button_2_down - * ^2 -> (deliever) start - * v3 -> (hold) (settimeout) button_3_pend - * ^3 -> (deliver) start - * vo -> (deliver) start - * ^o -> (deliver) start - * <> -> (deliver) start - * k -> (deliver) start - * - * button_1_pend (button 1 is down, timeout pending) - * ^1 -> (release) (deliver) start - * v2 -> (release) (deliver) button_1_down - * ^2 -> (release) (deliver) button_1_down - * v3 -> (cleartimeout) (generate v2) synthetic_2_down_13 - * ^3 -> (release) (deliver) button_1_down - * vo -> (release) (deliver) button_1_down - * ^o -> (release) (deliver) button_1_down - * <-> -> (release) (deliver) button_1_down - * <> -> (deliver) button_1_pend - * k -> (release) (deliver) button_1_down - * ... -> (release) button_1_down - * - * button_1_down (button 1 is down) - * ^1 -> (deliver) start - * v2 -> (deliver) button_1_down - * ^2 -> (deliver) button_1_down - * v3 -> (deliver) button_1_down - * ^3 -> (deliver) button_1_down - * vo -> (deliver) button_1_down - * ^o -> (deliver) button_1_down - * <> -> (deliver) button_1_down - * k -> (deliver) button_1_down - * - * button_2_down (button 2 is down) - * v1 -> (deliver) button_2_down - * ^1 -> (deliver) button_2_down - * ^2 -> (deliver) start - * v3 -> (deliver) button_2_down - * ^3 -> (deliver) button_2_down - * vo -> (deliver) button_2_down - * ^o -> (deliver) button_2_down - * <> -> (deliver) button_2_down - * k -> (deliver) button_2_down - * - * button_3_pend (button 3 is down, timeout pending) - * v1 -> (generate v2) synthetic_2_down - * ^1 -> (release) (deliver) button_3_down - * v2 -> (release) (deliver) button_3_down - * ^2 -> (release) (deliver) button_3_down - * ^3 -> (release) (deliver) start - * vo -> (release) (deliver) button_3_down - * ^o -> (release) (deliver) button_3_down - * <-> -> (release) (deliver) button_3_down - * <> -> (deliver) button_3_pend - * k -> (release) (deliver) button_3_down - * ... -> (release) button_3_down - * - * button_3_down (button 3 is down) - * v1 -> (deliver) button_3_down - * ^1 -> (deliver) button_3_down - * v2 -> (deliver) button_3_down - * ^2 -> (deliver) button_3_down - * ^3 -> (deliver) start - * vo -> (deliver) button_3_down - * ^o -> (deliver) button_3_down - * <> -> (deliver) button_3_down - * k -> (deliver) button_3_down - * - * synthetic_2_down_13 (button 1 and 3 are down) - * ^1 -> (generate ^2) synthetic_2_down_3 - * v2 -> synthetic_2_down_13 - * ^2 -> synthetic_2_down_13 - * ^3 -> (generate ^2) synthetic_2_down_1 - * vo -> (deliver) synthetic_2_down_13 - * ^o -> (deliver) synthetic_2_down_13 - * <> -> (deliver) synthetic_2_down_13 - * k -> (deliver) synthetic_2_down_13 - * - * synthetic_2_down_3 (button 3 is down) - * v1 -> (deliver) synthetic_2_down_3 - * ^1 -> (deliver) synthetic_2_down_3 - * v2 -> synthetic_2_down_3 - * ^2 -> synthetic_2_down_3 - * ^3 -> start - * vo -> (deliver) synthetic_2_down_3 - * ^o -> (deliver) synthetic_2_down_3 - * <> -> (deliver) synthetic_2_down_3 - * k -> (deliver) synthetic_2_down_3 - * - * synthetic_2_down_1 (button 1 is down) - * ^1 -> start - * v2 -> synthetic_2_down_1 - * ^2 -> synthetic_2_down_1 - * v3 -> (deliver) synthetic_2_down_1 - * ^3 -> (deliver) synthetic_2_down_1 - * vo -> (deliver) synthetic_2_down_1 - * ^o -> (deliver) synthetic_2_down_1 - * <> -> (deliver) synthetic_2_down_1 - * k -> (deliver) synthetic_2_down_1 - */ - -typedef enum _inputClass { - down_1, up_1, - down_2, up_2, - down_3, up_3, - down_o, up_o, - motion, outside_box, - keyboard, timeout, - num_input_class -} KdInputClass; - -typedef enum _inputAction { - noop, - hold, - setto, - deliver, - release, - clearto, - gen_down_2, - gen_up_2 -} KdInputAction; - -#define MAX_ACTIONS 2 - -typedef struct _inputTransition { - KdInputAction actions[MAX_ACTIONS]; - KdMouseState nextState; -} KdInputTransition; - -KdInputTransition kdInputMachine[num_input_states][num_input_class] = { - /* start */ - { - { { hold, setto }, button_1_pend }, /* v1 */ - { { deliver, noop }, start }, /* ^1 */ - { { deliver, noop }, button_2_down }, /* v2 */ - { { deliver, noop }, start }, /* ^2 */ - { { hold, setto }, button_3_pend }, /* v3 */ - { { deliver, noop }, start }, /* ^3 */ - { { deliver, noop }, start }, /* vo */ - { { deliver, noop }, start }, /* ^o */ - { { deliver, noop }, start }, /* <> */ - { { deliver, noop }, start }, /* <-> */ - { { noop, noop }, start }, /* k */ - { { noop, noop }, start }, /* ... */ - }, - /* button_1_pend */ - { - { { noop, noop }, button_1_pend }, /* v1 */ - { { release, deliver }, start }, /* ^1 */ - { { release, deliver }, button_1_down }, /* v2 */ - { { release, deliver }, button_1_down }, /* ^2 */ - { { clearto, gen_down_2 }, synth_2_down_13 }, /* v3 */ - { { release, deliver }, button_1_down }, /* ^3 */ - { { release, deliver }, button_1_down }, /* vo */ - { { release, deliver }, button_1_down }, /* ^o */ - { { deliver, noop }, button_1_pend }, /* <> */ - { { release, deliver }, button_1_down }, /* <-> */ - { { noop, noop }, button_1_down }, /* k */ - { { release, noop }, button_1_down }, /* ... */ - }, - /* button_1_down */ - { - { { noop, noop }, button_1_down }, /* v1 */ - { { deliver, noop }, start }, /* ^1 */ - { { deliver, noop }, button_1_down }, /* v2 */ - { { deliver, noop }, button_1_down }, /* ^2 */ - { { deliver, noop }, button_1_down }, /* v3 */ - { { deliver, noop }, button_1_down }, /* ^3 */ - { { deliver, noop }, button_1_down }, /* vo */ - { { deliver, noop }, button_1_down }, /* ^o */ - { { deliver, noop }, button_1_down }, /* <> */ - { { deliver, noop }, button_1_down }, /* <-> */ - { { noop, noop }, button_1_down }, /* k */ - { { noop, noop }, button_1_down }, /* ... */ - }, - /* button_2_down */ - { - { { deliver, noop }, button_2_down }, /* v1 */ - { { deliver, noop }, button_2_down }, /* ^1 */ - { { noop, noop }, button_2_down }, /* v2 */ - { { deliver, noop }, start }, /* ^2 */ - { { deliver, noop }, button_2_down }, /* v3 */ - { { deliver, noop }, button_2_down }, /* ^3 */ - { { deliver, noop }, button_2_down }, /* vo */ - { { deliver, noop }, button_2_down }, /* ^o */ - { { deliver, noop }, button_2_down }, /* <> */ - { { deliver, noop }, button_2_down }, /* <-> */ - { { noop, noop }, button_2_down }, /* k */ - { { noop, noop }, button_2_down }, /* ... */ - }, - /* button_3_pend */ - { - { { clearto, gen_down_2 }, synth_2_down_13 }, /* v1 */ - { { release, deliver }, button_3_down }, /* ^1 */ - { { release, deliver }, button_3_down }, /* v2 */ - { { release, deliver }, button_3_down }, /* ^2 */ - { { release, deliver }, button_3_down }, /* v3 */ - { { release, deliver }, start }, /* ^3 */ - { { release, deliver }, button_3_down }, /* vo */ - { { release, deliver }, button_3_down }, /* ^o */ - { { deliver, noop }, button_3_pend }, /* <> */ - { { release, deliver }, button_3_down }, /* <-> */ - { { release, noop }, button_3_down }, /* k */ - { { release, noop }, button_3_down }, /* ... */ - }, - /* button_3_down */ - { - { { deliver, noop }, button_3_down }, /* v1 */ - { { deliver, noop }, button_3_down }, /* ^1 */ - { { deliver, noop }, button_3_down }, /* v2 */ - { { deliver, noop }, button_3_down }, /* ^2 */ - { { noop, noop }, button_3_down }, /* v3 */ - { { deliver, noop }, start }, /* ^3 */ - { { deliver, noop }, button_3_down }, /* vo */ - { { deliver, noop }, button_3_down }, /* ^o */ - { { deliver, noop }, button_3_down }, /* <> */ - { { deliver, noop }, button_3_down }, /* <-> */ - { { noop, noop }, button_3_down }, /* k */ - { { noop, noop }, button_3_down }, /* ... */ - }, - /* synthetic_2_down_13 */ - { - { { noop, noop }, synth_2_down_13 }, /* v1 */ - { { gen_up_2, noop }, synth_2_down_3 }, /* ^1 */ - { { noop, noop }, synth_2_down_13 }, /* v2 */ - { { noop, noop }, synth_2_down_13 }, /* ^2 */ - { { noop, noop }, synth_2_down_13 }, /* v3 */ - { { gen_up_2, noop }, synth_2_down_1 }, /* ^3 */ - { { deliver, noop }, synth_2_down_13 }, /* vo */ - { { deliver, noop }, synth_2_down_13 }, /* ^o */ - { { deliver, noop }, synth_2_down_13 }, /* <> */ - { { deliver, noop }, synth_2_down_13 }, /* <-> */ - { { noop, noop }, synth_2_down_13 }, /* k */ - { { noop, noop }, synth_2_down_13 }, /* ... */ - }, - /* synthetic_2_down_3 */ - { - { { deliver, noop }, synth_2_down_3 }, /* v1 */ - { { deliver, noop }, synth_2_down_3 }, /* ^1 */ - { { deliver, noop }, synth_2_down_3 }, /* v2 */ - { { deliver, noop }, synth_2_down_3 }, /* ^2 */ - { { noop, noop }, synth_2_down_3 }, /* v3 */ - { { noop, noop }, start }, /* ^3 */ - { { deliver, noop }, synth_2_down_3 }, /* vo */ - { { deliver, noop }, synth_2_down_3 }, /* ^o */ - { { deliver, noop }, synth_2_down_3 }, /* <> */ - { { deliver, noop }, synth_2_down_3 }, /* <-> */ - { { noop, noop }, synth_2_down_3 }, /* k */ - { { noop, noop }, synth_2_down_3 }, /* ... */ - }, - /* synthetic_2_down_1 */ - { - { { noop, noop }, synth_2_down_1 }, /* v1 */ - { { noop, noop }, start }, /* ^1 */ - { { deliver, noop }, synth_2_down_1 }, /* v2 */ - { { deliver, noop }, synth_2_down_1 }, /* ^2 */ - { { deliver, noop }, synth_2_down_1 }, /* v3 */ - { { deliver, noop }, synth_2_down_1 }, /* ^3 */ - { { deliver, noop }, synth_2_down_1 }, /* vo */ - { { deliver, noop }, synth_2_down_1 }, /* ^o */ - { { deliver, noop }, synth_2_down_1 }, /* <> */ - { { deliver, noop }, synth_2_down_1 }, /* <-> */ - { { noop, noop }, synth_2_down_1 }, /* k */ - { { noop, noop }, synth_2_down_1 }, /* ... */ - }, -}; - -#define EMULATION_WINDOW 10 -#define EMULATION_TIMEOUT 100 - -#define EventX(e) ((e)->u.keyButtonPointer.rootX) -#define EventY(e) ((e)->u.keyButtonPointer.rootY) - -static int -KdInsideEmulationWindow (KdMouseInfo *mi, xEvent *ev) -{ - if (ev->u.keyButtonPointer.pad1) - { - mi->emulationDx += EventX(ev); - mi->emulationDy += EventY(ev); - } - else - { - mi->emulationDx = EventX(&mi->heldEvent) - EventX(ev); - mi->emulationDy = EventY(&mi->heldEvent) - EventY(ev); - } - return (abs (mi->emulationDx) < EMULATION_WINDOW && - abs (mi->emulationDy) < EMULATION_WINDOW); -} - -static KdInputClass -KdClassifyInput (KdMouseInfo *mi, xEvent *ev) -{ - switch (ev->u.u.type) { - case ButtonPress: - switch (ev->u.u.detail) { - case 1: return down_1; - case 2: return down_2; - case 3: return down_3; - default: return down_o; - } - break; - case ButtonRelease: - switch (ev->u.u.detail) { - case 1: return up_1; - case 2: return up_2; - case 3: return up_3; - default: return up_o; - } - break; - case MotionNotify: - if (mi->eventHeld && !KdInsideEmulationWindow(mi, ev)) - return outside_box; - else - return motion; - default: - return keyboard; - } - return keyboard; -} - -#ifdef DEBUG -char *kdStateNames[] = { - "start", - "button_1_pend", - "button_1_down", - "button_2_down", - "button_3_pend", - "button_3_down", - "synth_2_down_13", - "synth_2_down_3", - "synthetic_2_down_1", - "num_input_states" -}; - -char *kdClassNames[] = { - "down_1", "up_1", - "down_2", "up_2", - "down_3", "up_3", - "motion", "ouside_box", - "keyboard", "timeout", - "num_input_class" -}; - -char *kdActionNames[] = { - "noop", - "hold", - "setto", - "deliver", - "release", - "clearto", - "gen_down_2", - "gen_up_2", -}; -#endif /* DEBUG */ - -static void -KdQueueEvent (xEvent *ev) -{ - KdAssertSigioBlocked ("KdQueueEvent"); - if (ev->u.u.type == MotionNotify) - { - if (ev->u.keyButtonPointer.pad1) - { - ev->u.keyButtonPointer.pad1 = 0; - miPointerDeltaCursor (ev->u.keyButtonPointer.rootX, - ev->u.keyButtonPointer.rootY, - ev->u.keyButtonPointer.time); - } - else - { - miPointerAbsoluteCursor(ev->u.keyButtonPointer.rootX, - ev->u.keyButtonPointer.rootY, - ev->u.keyButtonPointer.time); - } - } - else - { - mieqEnqueue (ev); - } -} - -static void -KdRunMouseMachine (KdMouseInfo *mi, KdInputClass c, xEvent *ev) -{ - KdInputTransition *t; - int a; - - t = &kdInputMachine[mi->mouseState][c]; - for (a = 0; a < MAX_ACTIONS; a++) - { - switch (t->actions[a]) { - case noop: - break; - case hold: - mi->eventHeld = TRUE; - mi->emulationDx = 0; - mi->emulationDy = 0; - mi->heldEvent = *ev; - break; - case setto: - mi->emulationTimeout = GetTimeInMillis () + EMULATION_TIMEOUT; - mi->timeoutPending = TRUE; - break; - case deliver: - KdQueueEvent (ev); - break; - case release: - mi->eventHeld = FALSE; - mi->timeoutPending = FALSE; - KdQueueEvent (&mi->heldEvent); - break; - case clearto: - mi->timeoutPending = FALSE; - break; - case gen_down_2: - ev->u.u.detail = 2; - mi->eventHeld = FALSE; - KdQueueEvent (ev); - break; - case gen_up_2: - ev->u.u.detail = 2; - KdQueueEvent (ev); - break; - } - } - mi->mouseState = t->nextState; -} - -void -KdResetInputMachine (void) -{ - KdMouseInfo *mi; - - for (mi = kdMouseInfo; mi; mi = mi->next) - { - mi->mouseState = start; - mi->eventHeld = FALSE; - } -} - -static void -KdHandleMouseEvent (KdMouseInfo *mi, xEvent *ev) -{ - if (mi->emulateMiddleButton) - KdRunMouseMachine (mi, KdClassifyInput (mi, ev), ev); - else - KdQueueEvent (ev); -} - -static void -KdReceiveTimeout (KdMouseInfo *mi) -{ - KdRunMouseMachine (mi, timeout, 0); -} - -#define KILL_SEQUENCE ((1L << KK_CONTROL)|(1L << KK_ALT)|(1L << KK_F8)|(1L << KK_F10)) -#define SPECIAL_SEQUENCE ((1L << KK_CONTROL) | (1L << KK_ALT)) -#define SETKILLKEY(b) (KdSpecialKeys |= (1L << (b))) -#define CLEARKILLKEY(b) (KdSpecialKeys &= ~(1L << (b))) -#define KEYMAP (pKdKeyboard->key->curKeySyms) -#define KEYCOL1(k) (KEYMAP.map[((k)-kdMinKeyCode)*KEYMAP.mapWidth]) - -CARD32 KdSpecialKeys = 0; - -extern char dispatchException; - -/* - * kdCheckTermination - * - * This function checks for the key sequence that terminates the server. When - * detected, it sets the dispatchException flag and returns. The key sequence - * is: - * Control-Alt - * It's assumed that the server will be waken up by the caller when this - * function returns. - */ - -extern int nClients; - -static void -KdCheckSpecialKeys(xEvent *xE) -{ - KeySym sym = KEYCOL1(xE->u.u.detail); - - if (!pKdKeyboard) return; - - /* - * Ignore key releases - */ - - if (xE->u.u.type == KeyRelease) return; - -#ifdef XIPAQ - /* - * Check for buttons 1, 2 and 3 on the iPAQ - */ - if (sym == XK_Pointer_Button1 && kdMouseInfo) { - KdEnqueueMouseEvent(kdMouseInfo, KD_MOUSE_DELTA | KD_BUTTON_1, 0, 0); - return; - } - if (sym == XK_Pointer_Button2 && kdMouseInfo) { - KdEnqueueMouseEvent(kdMouseInfo, KD_MOUSE_DELTA | KD_BUTTON_2, 0, 0); - return; - } - if (sym == XK_Pointer_Button3 && kdMouseInfo) { - KdEnqueueMouseEvent(kdMouseInfo, KD_MOUSE_DELTA | KD_BUTTON_3, 0, 0); - return; - } -#endif - - /* - * Check for control/alt pressed - */ - if ((pKdKeyboard->key->state & (ControlMask|Mod1Mask)) != - (ControlMask|Mod1Mask)) - return; - - - /* - * Let OS function see keysym first - */ - - if (kdOsFuncs->SpecialKey) - if ((*kdOsFuncs->SpecialKey) (sym)) - return; - - /* - * Now check for backspace or delete; these signal the - * X server to terminate - */ - switch (sym) { - case XK_BackSpace: - case XK_Delete: - case XK_KP_Delete: - /* - * Set the dispatch exception flag so the server will terminate the - * next time through the dispatch loop. - */ - if (kdDontZap == FALSE) - dispatchException |= DE_TERMINATE; - break; - } -} - -/* - * kdEnqueueKeyboardEvent - * - * This function converts hardware keyboard event information into an X event - * and enqueues it using MI. It wakes up the server before returning so that - * the event will be processed normally. - * - */ - -static void -KdHandleKeyboardEvent (xEvent *ev) -{ - int key = ev->u.u.detail; - int byte; - CARD8 bit; - KdMouseInfo *mi; - - byte = key >> 3; - bit = 1 << (key & 7); - switch (ev->u.u.type) { - case KeyPress: - kdKeyState[byte] |= bit; - break; - case KeyRelease: - kdKeyState[byte] &= ~bit; - break; - } - for (mi = kdMouseInfo; mi; mi = mi->next) - KdRunMouseMachine (mi, keyboard, 0); - KdQueueEvent (ev); -} - -static void -KdReleaseAllKeys (void) -{ - xEvent xE; - int key; - - KdBlockSigio (); - for (key = 0; key < KD_KEY_COUNT; key++) - if (IsKeyDown(key)) - { - xE.u.keyButtonPointer.time = GetTimeInMillis(); - xE.u.u.type = KeyRelease; - xE.u.u.detail = key; - KdHandleKeyboardEvent (&xE); - } - KdUnblockSigio (); -} - -static void -KdCheckLock (void) -{ - KeyClassPtr keyc = pKdKeyboard->key; - Bool isSet, shouldBeSet; - - if (kdKeyboardFuncs->LockLed) - { - isSet = (kdLeds & (1 << (kdKeyboardFuncs->LockLed-1))) != 0; - shouldBeSet = (keyc->state & LockMask) != 0; - if (isSet != shouldBeSet) - { - KdSetLed (kdKeyboardFuncs->LockLed, shouldBeSet); - } - } -} - -void -KdEnqueueKeyboardEvent(unsigned char scan_code, - unsigned char is_up) -{ - unsigned char key_code; - xEvent xE; - KeyClassPtr keyc; - - if (!pKdKeyboard) - return; - keyc = pKdKeyboard->key; - - xE.u.keyButtonPointer.time = GetTimeInMillis(); - - if (kdMinScanCode <= scan_code && scan_code <= kdMaxScanCode) - { - key_code = scan_code + KD_MIN_KEYCODE - kdMinScanCode; - - /* - * Set up this event -- the type may be modified below - */ - if (is_up) - xE.u.u.type = KeyRelease; - else - xE.u.u.type = KeyPress; - xE.u.u.detail = key_code; - - switch (KEYCOL1(key_code)) - { - case XK_Num_Lock: - case XK_Scroll_Lock: - case XK_Shift_Lock: - case XK_Caps_Lock: - if (xE.u.u.type == KeyRelease) - return; - if (IsKeyDown (key_code)) - xE.u.u.type = KeyRelease; - else - xE.u.u.type = KeyPress; - } - - /* - * Check pressed keys which are already down - */ - if (IsKeyDown (key_code) && xE.u.u.type == KeyPress) - { - KeybdCtrl *ctrl = &pKdKeyboard->kbdfeed->ctrl; - - /* - * Check auto repeat - */ - if (!ctrl->autoRepeat || keyc->modifierMap[key_code] || - !(ctrl->autoRepeats[key_code >> 3] & (1 << (key_code & 7)))) - { - return; - } - /* - * X delivers press/release even for autorepeat - */ - xE.u.u.type = KeyRelease; - KdHandleKeyboardEvent (&xE); - xE.u.u.type = KeyPress; - } - /* - * Check released keys which are already up - */ - else if (!IsKeyDown (key_code) && xE.u.u.type == KeyRelease) - { - return; - } - KdCheckSpecialKeys (&xE); - KdHandleKeyboardEvent (&xE); - } -} - -#define SetButton(mi, b, v, s) \ -{\ - xE.u.u.detail = mi->map[b]; \ - xE.u.u.type = v; \ - KdHandleMouseEvent (mi, &xE); \ -} - -#define Press(mi, b) SetButton(mi, b, ButtonPress, "Down") -#define Release(mi, b) SetButton(mi, b, ButtonRelease, "Up") - -/* - * kdEnqueueMouseEvent - * - * This function converts hardware mouse event information into X event - * information. A mouse movement event is passed off to MI to generate - * a MotionNotify event, if appropriate. Button events are created and - * passed off to MI for enqueueing. - */ - -static void -KdMouseAccelerate (DeviceIntPtr device, int *dx, int *dy) -{ - PtrCtrl *pCtrl = &device->ptrfeed->ctrl; - double speed = sqrt (*dx * *dx + *dy * *dy); - double accel; - double m; - - /* - * Ok, so we want it moving num/den times faster at threshold*2 - * - * accel = m *threshold + b - * 1 = m * 0 + b -> b = 1 - * - * num/den = m * (threshold * 2) + 1 - * - * num / den - 1 = m * threshold * 2 - * (num / den - 1) / threshold * 2 = m - */ - m = (((double) pCtrl->num / (double) pCtrl->den - 1.0) / - ((double) pCtrl->threshold * 2.0)); - accel = m * speed + 1; - *dx = accel * *dx; - *dy = accel * *dy; -} - -void -KdEnqueueMouseEvent(KdMouseInfo *mi, unsigned long flags, int rx, int ry) -{ - CARD32 ms; - xEvent xE; - unsigned char buttons; - int x, y; - int (*matrix)[3] = kdMouseMatrix.matrix; - unsigned long button; - int n; - - if (!pKdPointer) - return; - - ms = GetTimeInMillis(); - - if (flags & KD_MOUSE_DELTA) - { - if (mi->transformCoordinates) - { - x = matrix[0][0] * rx + matrix[0][1] * ry; - y = matrix[1][0] * rx + matrix[1][1] * ry; - } - else - { - x = rx; - y = ry; - } - KdMouseAccelerate (pKdPointer, &x, &y); - xE.u.keyButtonPointer.pad1 = 1; - } - else - { - if (mi->transformCoordinates) - { - x = matrix[0][0] * rx + matrix[0][1] * ry + matrix[0][2]; - y = matrix[1][0] * rx + matrix[1][1] * ry + matrix[1][2]; - } - else - { - x = rx; - y = ry; - } - xE.u.keyButtonPointer.pad1 = 0; - } - xE.u.keyButtonPointer.time = ms; - xE.u.keyButtonPointer.rootX = x; - xE.u.keyButtonPointer.rootY = y; - - xE.u.u.type = MotionNotify; - xE.u.u.detail = 0; - KdHandleMouseEvent (mi, &xE); - - buttons = flags; - - for (button = KD_BUTTON_1, n = 0; button <= KD_BUTTON_5; button <<= 1, n++) - { - if ((mi->buttonState & button) ^ (buttons & button)) - { - if (buttons & button) - { - Press(mi, n); - } - else - { - Release(mi, n); - } - } - } - mi->buttonState = buttons; -} - -static void -KdEnqueueMotionEvent (KdMouseInfo *mi, int x, int y) -{ - xEvent xE; - CARD32 ms; - - ms = GetTimeInMillis(); - - xE.u.u.type = MotionNotify; - xE.u.keyButtonPointer.time = ms; - xE.u.keyButtonPointer.rootX = x; - xE.u.keyButtonPointer.rootY = y; - - KdHandleMouseEvent (mi, &xE); -} - -static void -KdBlockHandler (int screen, - pointer blockData, - pointer timeout, - pointer readmask) -{ - KdMouseInfo *mi; - int myTimeout=0; - - for (mi = kdMouseInfo; mi; mi = mi->next) - { - if (mi->timeoutPending) - { - int ms; - - ms = mi->emulationTimeout - GetTimeInMillis (); - if (ms < 1) - ms = 1; - if(ms<myTimeout || myTimeout==0) - myTimeout=ms; - } - } - /* if we need to poll for events, do that */ - if(kdOsFuncs->pollEvents) - { - (*kdOsFuncs->pollEvents)(); - myTimeout=20; - } - if(myTimeout>0) - AdjustWaitForDelay (timeout, myTimeout); -} - -void -KdWakeupHandler (pointer data, - int result, - pointer readmask) -{ - fd_set *pReadmask = (fd_set *) readmask; - int i; - KdMouseInfo *mi; - - if (kdInputEnabled && result > 0) - { - for (i = 0; i < kdNumInputFds; i++) - if (FD_ISSET (kdInputFds[i].fd, pReadmask)) - { - KdBlockSigio (); - (*kdInputFds[i].read) (kdInputFds[i].fd, kdInputFds[i].closure); - KdUnblockSigio (); - } - } - for (mi = kdMouseInfo; mi; mi = mi->next) - { - if (mi->timeoutPending) - { - if ((long) (GetTimeInMillis () - mi->emulationTimeout) >= 0) - { - mi->timeoutPending = FALSE; - KdBlockSigio (); - KdReceiveTimeout (mi); - KdUnblockSigio (); - } - } - } -// if (kdSwitchPending) -// kdProcessSwitch (); -} - -#define KdScreenOrigin(pScreen) (&(KdGetScreenPriv (pScreen)->origin)) - -static Bool -KdCursorOffScreen(ScreenPtr *ppScreen, int *x, int *y) -{ - ScreenPtr pScreen = *ppScreen; - ScreenPtr pNewScreen; - int n; - int dx, dy; - int best_x, best_y; - int n_best_x, n_best_y; - CARD32 ms; - - if (kdDisableZaphod || screenInfo.numScreens <= 1) - return FALSE; - - if (0 <= *x && *x < pScreen->width && 0 <= *y && *y < pScreen->height) - return FALSE; - - ms = GetTimeInMillis (); - if (kdOffScreen && (int) (ms - kdOffScreenTime) < 1000) - return FALSE; - kdOffScreen = TRUE; - kdOffScreenTime = ms; - n_best_x = -1; - best_x = 32767; - n_best_y = -1; - best_y = 32767; - for (n = 0; n < screenInfo.numScreens; n++) - { - pNewScreen = screenInfo.screens[n]; - if (pNewScreen == pScreen) - continue; - dx = KdScreenOrigin(pNewScreen)->x - KdScreenOrigin(pScreen)->x; - dy = KdScreenOrigin(pNewScreen)->y - KdScreenOrigin(pScreen)->y; - if (*x < 0) - { - if (dx <= 0 && -dx < best_x) - { - best_x = -dx; - n_best_x = n; - } - } - else if (*x >= pScreen->width) - { - if (dx >= 0 && dx < best_x) - { - best_x = dx; - n_best_x = n; - } - } - if (*y < 0) - { - if (dy <= 0 && -dy < best_y) - { - best_y = -dy; - n_best_y = n; - } - } - else if (*y >= pScreen->height) - { - if (dy >= 0 && dy < best_y) - { - best_y = dy; - n_best_y = n; - } - } - } - if (best_y < best_x) - n_best_x = n_best_y; - if (n_best_x == -1) - return FALSE; - pNewScreen = screenInfo.screens[n_best_x]; - - if (*x < 0) - *x += pNewScreen->width; - if (*y < 0) - *y += pNewScreen->height; - - if (*x >= pScreen->width) - *x -= pScreen->width; - if (*y >= pScreen->height) - *y -= pScreen->height; - - *ppScreen = pNewScreen; - return TRUE; -} - -static void -KdCrossScreen(ScreenPtr pScreen, Bool entering) -{ -#ifndef XIPAQ -// if (entering) -// KdEnableScreen (pScreen); -// else -// KdDisableScreen (pScreen); -#endif -} - -int KdCurScreen; /* current event screen */ - -static void -KdWarpCursor (ScreenPtr pScreen, int x, int y) -{ - KdBlockSigio (); - KdCurScreen = pScreen->myNum; - miPointerWarpCursor (pScreen, x, y); - KdUnblockSigio (); -} - -miPointerScreenFuncRec kdPointerScreenFuncs = -{ - KdCursorOffScreen, - KdCrossScreen, - KdWarpCursor -}; - -void -KdProcessInputEvents (void) -{ - mieqProcessInputEvents(); - miPointerUpdate(); -// if (kdSwitchPending) -// KdProcessSwitch (); - KdCheckLock (); -} diff --git a/hw/xgl/egl/kkeymap.h b/hw/xgl/egl/kkeymap.h deleted file mode 100644 index 920e807e5..000000000 --- a/hw/xgl/egl/kkeymap.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 1999 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/* - * All global variables and functions pertaining to keyboard key mapping - * live in this header file. - */ - -#ifndef _KKEYMAP_H -#define _KKEYMAP_H - -/* Offset of MIN_SCANCODE to 8 (X minimum scancode value) */ -#define KD_KEY_OFFSET (8 - kdMinScanCode) - -#define KD_MIN_KEYCODE 8 -#define KD_MAX_KEYCODE 254 -#define KD_MAX_WIDTH 4 -#define KD_MAX_LENGTH (KD_MAX_KEYCODE - KD_MIN_KEYCODE + 1) - -extern int kdMinScanCode; -extern int kdMaxScanCode; -extern int kdMinKeyCode; -extern int kdMaxKeyCode; -extern int kdKeymapWidth; - -extern KeySym kdKeymap[KD_MAX_LENGTH * KD_MAX_WIDTH]; - -extern CARD8 kdModMap[MAP_LENGTH]; - -extern KeySymsRec kdKeySyms; - -typedef struct { - KeySym modsym; - int modbit; -} KdKeySymModsRec; - -#endif /* _KKEYMAP_H */ diff --git a/hw/xgl/egl/module/Makefile.am b/hw/xgl/egl/module/Makefile.am deleted file mode 100644 index c84f85c90..000000000 --- a/hw/xgl/egl/module/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -AM_CFLAGS = \ - $(DIX_CFLAGS) \ - -I$(srcdir)/.. \ - -I$(srcdir)/../.. \ - $(XEGLMODULES_CFLAGS) - -libxegl_la_LDFLAGS = -avoid-version -libxegl_la_SOURCES = xeglmodule.c -libxegl_la_LIBADD = \ - $(top_builddir)/hw/xgl/glx/libxegl.la \ - $(XEGLMODULES_LIBS) - -moduledir = @xglmoduledir@ - -module_LTLIBRARIES = libxegl.la diff --git a/hw/xgl/egl/module/xeglmodule.c b/hw/xgl/egl/module/xeglmodule.c deleted file mode 100644 index abd0d0d75..000000000 --- a/hw/xgl/egl/module/xeglmodule.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xglmodule.h" -#include "xegl.h" - -#include <glitz-egl.h> - -char * -moduleVersion (void) -{ - return VERSION; -} - -Bool -moduleInit (const char *module) -{ - glitz_egl_init (module); - - return TRUE; -} - -void -InitOutput (ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ - xeglInitOutput (pScreenInfo, argc, argv); -} - -Bool -LegalModifier (unsigned int key, - DeviceIntPtr pDev) -{ - return xeglLegalModifier (key, pDev); -} - -void -ProcessInputEvents (void) -{ - xeglProcessInputEvents (); -} - -void -InitInput (int argc, - char **argv) -{ - xeglInitInput (argc, argv); -} - -void -ddxUseMsg (void) -{ - ErrorF ("\nXegl usage:\n"); - xeglUseMsg (); -} - -int -ddxProcessArgument (int argc, - char **argv, - int i) -{ - return xeglProcessArgument (argc, argv, i); -} - -void -AbortDDX (void) -{ - xeglAbort (); -} - -void -ddxGiveUp (void) -{ - xeglGiveUp (); -} - -void -OsVendorInit (void) -{ - xeglOsVendorInit (); -} diff --git a/hw/xgl/egl/xegl.c b/hw/xgl/egl/xegl.c deleted file mode 100644 index 1cf615bb6..000000000 --- a/hw/xgl/egl/xegl.c +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <signal.h> -#include <sys/ioctl.h> -#include <errno.h> -#include <math.h> - -#include <glitz-egl.h> - -#include "inputstr.h" -#include "cursorstr.h" -#include "mipointer.h" - -#include "xegl.h" - -#define XEGL_DEFAULT_SCREEN_WIDTH 800 -#define XEGL_DEFAULT_SCREEN_HEIGHT 600 - -DevPrivateKey xeglScreenPrivateKey = &xeglScreenPrivateKey; - -#define XEGL_GET_SCREEN_PRIV(pScreen) ((xeglScreenPtr) \ - dixLookupPrivate(&(pScreen)->devPrivates, xeglScreenPrivateKey)) - -#define XEGL_SET_SCREEN_PRIV(pScreen, v) \ - dixSetPrivate(&(pScreen)->devPrivates, xeglScreenPrivateKey, v) - -#define XEGL_SCREEN_PRIV(pScreen) \ - xeglScreenPtr pScreenPriv = XEGL_GET_SCREEN_PRIV (pScreen) - -static EGLDisplay eDisplay; -static EGLScreenMESA eScreen; -static ScreenPtr currentScreen = 0; -static Bool softCursor = TRUE; - -extern miPointerScreenFuncRec kdPointerScreenFuncs; - -static Bool -xeglAllocatePrivates (ScreenPtr pScreen) -{ - xeglScreenPtr pScreenPriv; - - pScreenPriv = xalloc (sizeof (xeglScreenRec)); - if (!pScreenPriv) - return FALSE; - - XEGL_SET_SCREEN_PRIV (pScreen, pScreenPriv); - - return TRUE; -} - -static Bool -xeglCloseScreen (int index, - ScreenPtr pScreen) -{ - glitz_drawable_t *drawable; - - XEGL_SCREEN_PRIV (pScreen); - - drawable = XGL_GET_SCREEN_PRIV (pScreen)->drawable; - if (drawable) - glitz_drawable_destroy (drawable); - - xglClearVisualTypes (); - - XGL_SCREEN_UNWRAP (CloseScreen); - xfree (pScreenPriv); - - return (*pScreen->CloseScreen) (index, pScreen); -} - -static Bool -xeglScreenInit (int index, - ScreenPtr pScreen, - int argc, - char **argv) -{ - EGLSurface eSurface; - EGLModeMESA mode; - int count; - xeglScreenPtr pScreenPriv; - glitz_drawable_format_t *format; - glitz_drawable_t *drawable; - EGLint screenAttribs[] = { - EGL_WIDTH, 1024, - EGL_HEIGHT, 768, - EGL_NONE - }; - - if (xglScreenInfo.width == 0 || xglScreenInfo.height == 0) - { - xglScreenInfo.width = XEGL_DEFAULT_SCREEN_WIDTH; - xglScreenInfo.height = XEGL_DEFAULT_SCREEN_HEIGHT; - - } - - screenAttribs[1] = xglScreenInfo.width; - screenAttribs[3] = xglScreenInfo.height; - - format = xglVisuals[0].format; - - if (!xeglAllocatePrivates (pScreen)) - return FALSE; - - currentScreen = pScreen; - - pScreenPriv = XEGL_GET_SCREEN_PRIV (pScreen); - - if (xglScreenInfo.width == 0 || xglScreenInfo.height == 0) - { - xglScreenInfo.width = XEGL_DEFAULT_SCREEN_WIDTH; - xglScreenInfo.height = XEGL_DEFAULT_SCREEN_HEIGHT; - } - - eglGetModesMESA (eDisplay, eScreen, &mode, 1, &count); - - eSurface = eglCreateScreenSurfaceMESA (eDisplay, format->id, screenAttribs); - if (eSurface == EGL_NO_SURFACE) - { - ErrorF ("failed to create screen surface\n"); - return FALSE; - } - - eglShowScreenSurfaceMESA (eDisplay, eScreen, eSurface, mode); - - drawable = glitz_egl_create_surface (eDisplay, eScreen, format, eSurface, - xglScreenInfo.width, - xglScreenInfo.height); - if (!drawable) - { - ErrorF ("[%d] couldn't create glitz drawable for window\n", index); - return FALSE; - } - - xglScreenInfo.drawable = drawable; - - if (!xglScreenInit (pScreen)) - return FALSE; - -#ifdef GLXEXT - if (!xglInitVisualConfigs (pScreen)) - return FALSE; -#endif - - XGL_SCREEN_WRAP (CloseScreen, xeglCloseScreen); - - miDCInitialize (pScreen, &kdPointerScreenFuncs); - miCreateDefColormap(pScreen); - - if (!xglFinishScreenInit (pScreen)) - return FALSE; - - return TRUE; -} - -void -xeglInitOutput (ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ - glitz_drawable_format_t *format, templ; - int i, maj, min, count; - unsigned long mask; - - xglSetPixmapFormats (pScreenInfo); - - if (!eDisplay) - { - eDisplay = eglGetDisplay (":0"); - - if (!eglInitialize (eDisplay, &maj, &min)) - FatalError ("can't open display"); - - eglGetScreensMESA (eDisplay, &eScreen, 1, &count); - } - - templ.samples = 1; - templ.doublebuffer = 1; - templ.color.alpha_size = 8; - - mask = GLITZ_FORMAT_SAMPLES_MASK; - - format = glitz_egl_find_window_config (eDisplay, eScreen, - mask, &templ, 0); - - if (!format) - FatalError ("no visual format found"); - - xglSetVisualTypesAndMasks (pScreenInfo, format, (1 << TrueColor)); - - xglInitVisuals (pScreenInfo); - - AddScreen (xeglScreenInit, argc, argv); -} - -static void -xeglBlockHandler (pointer blockData, - OSTimePtr pTimeout, - pointer pReadMask) -{ - XGL_SCREEN_PRIV (currentScreen); - - if (!xglSyncSurface (&pScreenPriv->pScreenPixmap->drawable)) - FatalError (XGL_SW_FAILURE_STRING); - - glitz_surface_flush (pScreenPriv->surface); - glitz_drawable_finish (pScreenPriv->drawable); -} - -void -xeglInitInput (int argc, - char **argv) -{ - eglInitInput (&LinuxEvdevMouseFuncs, &LinuxEvdevKeyboardFuncs); - RegisterBlockAndWakeupHandlers (xeglBlockHandler, KdWakeupHandler, NULL); -} - -Bool -xeglLegalModifier (unsigned int key, - DeviceIntPtr pDev) -{ - return KdLegalModifier (key, pDev); -} - -void -xeglProcessInputEvents (void) -{ - KdProcessInputEvents (); -} - -void -xeglUseMsg (void) -{ - ErrorF ("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM] " - "specify screen characteristics\n"); - ErrorF ("-softcursor force software cursor\n"); -} - -int -xeglProcessArgument (int argc, - char **argv, - int i) -{ - if (!strcmp (argv[i], "-screen")) - { - if ((i + 1) < argc) - { - xglParseScreen (argv[i + 1]); - } - else - return 1; - - return 2; - } - else if (!strcmp (argv[i], "-softcursor")) - { - softCursor = TRUE; - return 1; - } - - return 0; -} - -void -xeglAbort (void) -{ -} - -void -xeglGiveUp (void) -{ - AbortDDX (); -} - -void -xeglOsVendorInit (void) -{ -} diff --git a/hw/xgl/egl/xegl.h b/hw/xgl/egl/xegl.h deleted file mode 100644 index 0a07397bf..000000000 --- a/hw/xgl/egl/xegl.h +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#ifndef _XEGL_H_ -#define _XEGL_H_ - -#include "xgl.h" - -#include "randrstr.h" - -#define KD_BUTTON_1 0x01 -#define KD_BUTTON_2 0x02 -#define KD_BUTTON_3 0x04 -#define KD_BUTTON_4 0x08 -#define KD_BUTTON_5 0x10 -#define KD_MOUSE_DELTA 0x80000000 - -typedef struct _KdMouseFuncs { - Bool (*Init) (void); - void (*Fini) (void); -} KdMouseFuncs; - -typedef struct _KdKeyboardFuncs { - void (*Load) (void); - int (*Init) (void); - void (*Leds) (int); - void (*Bell) (int, int, int); - void (*Fini) (void); - int LockLed; -} KdKeyboardFuncs; - -typedef struct _KdOsFuncs { - int (*Init) (void); - void (*Enable) (void); - Bool (*SpecialKey) (KeySym); - void (*Disable) (void); - void (*Fini) (void); - void (*pollEvents) (void); -} KdOsFuncs; - -typedef struct _KdMouseMatrix { - int matrix[2][3]; -} KdMouseMatrix; - -typedef enum _KdMouseState { - start, - button_1_pend, - button_1_down, - button_2_down, - button_3_pend, - button_3_down, - synth_2_down_13, - synth_2_down_3, - synth_2_down_1, - num_input_states -} KdMouseState; - -#define KD_MAX_BUTTON 7 - -typedef struct _KdMouseInfo { - struct _KdMouseInfo *next; - void *driver; - void *closure; - char *name; - char *prot; - char map[KD_MAX_BUTTON]; - int nbutton; - Bool emulateMiddleButton; - unsigned long emulationTimeout; - Bool timeoutPending; - KdMouseState mouseState; - Bool eventHeld; - xEvent heldEvent; - unsigned char buttonState; - int emulationDx, emulationDy; - int inputType; - Bool transformCoordinates; -} KdMouseInfo; - -typedef struct _xeglScreen { - CloseScreenProcPtr CloseScreen; - ScreenPtr pScreen; - DDXPointRec origin; -} xeglScreenRec, *xeglScreenPtr; - -extern KdMouseInfo *kdMouseInfo; -extern KdOsFuncs *kdOsFuncs; -extern Bool kdDontZap; -extern Bool kdDisableZaphod; -extern DevPrivateKey xeglScreenPrivateKey; -extern KdMouseFuncs LinuxEvdevMouseFuncs; -extern KdKeyboardFuncs LinuxEvdevKeyboardFuncs; - -#define RR_Rotate_All \ - (RR_Rotate_0 | RR_Rotate_90 | RR_Rotate_180 | RR_Rotate_270) -#define RR_Reflect_All (RR_Reflect_X | RR_Reflect_Y) - -#define KdGetScreenPriv(pScreen) ((xeglScreenPtr) \ - dixLookupPrivate(&(pScreen)->devPrivates, xeglScreenPrivateKey)) -#define KdScreenPriv(pScreen) \ - xeglScreenPtr pScreenPriv = KdGetScreenPriv (pScreen) - -void -eglInitInput (KdMouseFuncs *pMouseFuncs, - KdKeyboardFuncs *pKeyboardFuncs); - -void -KdParseMouse (char *arg); - -KdMouseInfo * -KdMouseInfoAdd (void); - -void -KdMouseInfoDispose (KdMouseInfo *mi); - -int -KdAllocInputType (void); - -char * -KdSaveString (char *str); - -Bool -KdRegisterFd (int type, - int fd, - void (*read) (int fd, void *closure), - void *closure); - -void -KdUnregisterFds (int type, - Bool do_close); - -void -KdEnqueueKeyboardEvent (unsigned char scan_code, - unsigned char is_up); - -void -KdEnqueueMouseEvent (KdMouseInfo *mi, - unsigned long flags, - int rx, - int ry); - -void -KdRegisterFdEnableDisable (int fd, - int (*enable) (int fd, void *closure), - void (*disable) (int fd, void *closure)); - -void -KdWakeupHandler (pointer data, - int result, - pointer readmask); - -Bool -KdLegalModifier (unsigned int key, - DeviceIntPtr pDev); - -void -KdProcessInputEvents (void); - -void -xeglInitOutput (ScreenInfo *pScreenInfo, - int argc, - char **argv); - -Bool -xeglLegalModifier (unsigned int key, - DevicePtr pDev); - -void -xeglProcessInputEvents (void); - -void -xeglInitInput (int argc, - char **argv); - -void -xeglUseMsg (void); - -int -xeglProcessArgument (int argc, - char **argv, - int i); - -void -xeglAbort (void); - -void -xeglGiveUp (void); - -void -xeglOsVendorInit (void); - -#endif /* _XEGL_H_ */ diff --git a/hw/xgl/egl/xeglinit.c b/hw/xgl/egl/xeglinit.c deleted file mode 100644 index c28d946ac..000000000 --- a/hw/xgl/egl/xeglinit.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xegl.h" - -static xglScreenInfoRec xglScreenInfo = { - NULL, 0, 0, 0, 0, - DEFAULT_GEOMETRY_DATA_TYPE, - DEFAULT_GEOMETRY_USAGE, - FALSE, - XGL_DEFAULT_PBO_MASK, - FALSE, - FALSE -}; - -#ifdef GLXEXT -static Bool loadGlx = TRUE; -#endif - -void -InitOutput (ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ - -#ifdef GLXEXT - if (loadGlx) - { - if (!xglLoadGLXModules ()) - FatalError ("No GLX modules loaded"); - } -#endif - - xeglInitOutput (pScreenInfo, argc, argv); -} - -Bool -LegalModifier (unsigned int key, - DeviceIntPtr pDev) -{ - return xeglLegalModifier (key, pDev); -} - -void -ProcessInputEvents (void) -{ - xeglProcessInputEvents (); -} - -void -InitInput (int argc, - char **argv) -{ - xeglInitInput (argc, argv); -} - -void -ddxUseMsg (void) -{ - ErrorF ("\nXgl usage:\n"); - -#ifdef GLXEXT - ErrorF ("-noglx don't load glx extension\n"); -#endif - - xglUseMsg (); - ErrorF ("\nXegl usage:\n"); - xeglUseMsg (); -} - -int -ddxProcessArgument (int argc, - char **argv, - int i) -{ - int skip; - -#ifdef GLXEXT - if (!strcmp (argv[i], "-noglx")) - { - loadGlx = FALSE; - return 1; - } -#endif - - skip = xglProcessArgument (argc, argv, i); - if (skip) - return skip; - - return xeglProcessArgument (argc, argv, i); -} - -void -AbortDDX (void) -{ - xeglAbort (); -} - -void -ddxGiveUp (void) -{ - xeglGiveUp (); -} - -void -OsVendorInit (void) -{ - xeglOsVendorInit (); -} diff --git a/hw/xgl/egl/xeglinput.c b/hw/xgl/egl/xeglinput.c deleted file mode 100644 index 8c50b7846..000000000 --- a/hw/xgl/egl/xeglinput.c +++ /dev/null @@ -1,168 +0,0 @@ -#include "xgl.h" -#include "xegl.h" - -KdOsFuncs *kdOsFuncs; -Bool kdEmulateMiddleButton; -Bool kdRawPointerCoordinates; -Bool kdDontZap; -Bool kdDisableZaphod; -int kdScreenPrivateIndex; - -static char * -KdParseFindNext (char *cur, char *delim, char *save, char *last) -{ - while (*cur && !strchr (delim, *cur)) - { - *save++ = *cur++; - } - *save = 0; - *last = *cur; - if (*cur) - cur++; - return cur; -} - -/* - * Mouse argument syntax: - * - * device,protocol,options... - * - * Options are any of: - * 1-5 n button mouse - * 2button emulate middle button - * {NMO} Reorder buttons - */ -char * -KdSaveString (char *str) -{ - char *n = (char *) xalloc (strlen (str) + 1); - - if (!n) - return 0; - strcpy (n, str); - return n; -} - -/* - * Parse mouse information. Syntax: - * - * <device>,<nbutton>,<protocol>{,<option>}... - * - * options: {nmo} pointer mapping (e.g. {321}) - * 2button emulate middle button - * 3button dont emulate middle button - */ -void -KdParseMouse (char *arg) -{ - char save[1024]; - char delim; - KdMouseInfo *mi; - int i; - - mi = KdMouseInfoAdd (); - if (!mi) - return; - mi->name = 0; - mi->prot = 0; - mi->emulateMiddleButton = kdEmulateMiddleButton; - mi->transformCoordinates = !kdRawPointerCoordinates; - mi->nbutton = 3; - for (i = 0; i < KD_MAX_BUTTON; i++) - mi->map[i] = i + 1; - - if (!arg) - return; - if (strlen (arg) >= sizeof (save)) - return; - arg = KdParseFindNext (arg, ",", save, &delim); - if (!save[0]) - return; - mi->name = KdSaveString (save); - if (delim != ',') - return; - - arg = KdParseFindNext (arg, ",", save, &delim); - if (!save[0]) - return; - - if ('1' <= save[0] && save[0] <= '0' + KD_MAX_BUTTON && save[1] == '\0') - { - mi->nbutton = save[0] - '0'; - if (mi->nbutton > KD_MAX_BUTTON) - { - UseMsg (); - return; - } - } - - if (!delim != ',') - return; - - arg = KdParseFindNext (arg, ",", save, &delim); - - if (save[0]) - mi->prot = KdSaveString (save); - - while (delim == ',') - { - arg = KdParseFindNext (arg, ",", save, &delim); - if (save[0] == '{') - { - char *s = save + 1; - i = 0; - while (*s && *s != '}') - { - if ('1' <= *s && *s <= '0' + mi->nbutton) - mi->map[i] = *s - '0'; - else - UseMsg (); - s++; - } - } - else if (!strcmp (save, "2button")) - mi->emulateMiddleButton = TRUE; - else if (!strcmp (save, "3button")) - mi->emulateMiddleButton = FALSE; - else if (!strcmp (save, "rawcoord")) - mi->transformCoordinates = FALSE; - else if (!strcmp (save, "transform")) - mi->transformCoordinates = TRUE; - else - UseMsg (); - } -} - -KdMouseInfo *kdMouseInfo; - -KdMouseInfo * -KdMouseInfoAdd (void) -{ - KdMouseInfo *mi, **prev; - - mi = (KdMouseInfo *) xalloc (sizeof (KdMouseInfo)); - if (!mi) - return 0; - bzero (mi, sizeof (KdMouseInfo)); - for (prev = &kdMouseInfo; *prev; prev = &(*prev)->next); - *prev = mi; - return mi; -} - -void -KdMouseInfoDispose (KdMouseInfo *mi) -{ - KdMouseInfo **prev; - - for (prev = &kdMouseInfo; *prev; prev = &(*prev)->next) - if (*prev == mi) - { - *prev = mi->next; - if (mi->name) - xfree (mi->name); - if (mi->prot) - xfree (mi->prot); - xfree (mi); - break; - } -} diff --git a/hw/xgl/glx/Makefile.am b/hw/xgl/glx/Makefile.am deleted file mode 100644 index ea34ea460..000000000 --- a/hw/xgl/glx/Makefile.am +++ /dev/null @@ -1,48 +0,0 @@ -if XGL -XGL_MODULE_DIRS = module -endif - -DIST_SUBDIRS = module - -SUBDIRS = \ - . \ - $(XGL_MODULE_DIRS) - -AM_CFLAGS = \ - -I$(srcdir)/.. \ - -I$(srcdir)/../glxext \ - -I$(top_srcdir)/glx \ - -I$(top_srcdir)/GL/include \ - -I@MESA_SOURCE@/include \ - -I@MESA_SOURCE@/src/mesa/glapi \ - $(DIX_CFLAGS) \ - -DHAVE_XGL_CONFIG_H \ - -DHAVE_DIX_CONFIG_H \ - $(XGLXMODULES_CFLAGS) - -noinst_LTLIBRARIES = libxglx.la - -libxglx_la_SOURCES = \ - xglx.h \ - xglx.c \ - xglxorg.c - -# Xglx_DEPENDENCIES = @XGLX_LIBS@ -# Xglx_LDFLAGS = -export-dynamic -# Xglx_SOURCES = \ -# xglxinit.c \ -# $(top_srcdir)/mi/miinitext.c \ -# $(top_srcdir)/Xext/dpmsstubs.c \ -# $(top_srcdir)/Xi/stubs.c \ -# $(top_srcdir)/fb/fbcmap.c -#Xglx_LDADD = \ -# libxglx.la \ -# ../libxgl.a \ -# $(XORG_CORE_LIBS) \ -# $(XGLX_LIBS) \ -# $(EXTENSION_LIBS) \ -# $(XGLXMODULES_LIBS) \ -# -lXrandr -#Xglx_programs = Xglx -# -#bin_PROGRAMS = $(Xglx_programs) diff --git a/hw/xgl/glx/module/Makefile.am b/hw/xgl/glx/module/Makefile.am deleted file mode 100644 index bd1c4b08f..000000000 --- a/hw/xgl/glx/module/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ -if GLX -GLX_LIB = $(top_builddir)/hw/xgl/glxext/libxglglxext.la -endif - -AM_CFLAGS = $(DIX_CFLAGS) \ - -I$(srcdir)/.. \ - -I$(srcdir)/../.. \ - $(XGLXMODULES_CFLAGS) - -libxglx_la_DEPENDENCIES = $(GLX_LIB) -libxglx_la_LDFLAGS = -avoid-version -libxglx_la_SOURCES = xglxmodule.c -libxglx_la_LIBADD = \ - $(top_builddir)/hw/xgl/glx/libxglx.la \ - $(GLX_LIB) \ - $(XGLXMODULES_LIBS) \ - -lXrandr - -moduledir = @xglmoduledir@ - -module_LTLIBRARIES = libxglx.la diff --git a/hw/xgl/glx/module/xglxmodule.c b/hw/xgl/glx/module/xglxmodule.c deleted file mode 100644 index 40af8907d..000000000 --- a/hw/xgl/glx/module/xglxmodule.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xglx.h" -#include "xglmodule.h" - -#include <glitz-glx.h> - -char * -moduleVersion (void) -{ - return VERSION; -} - -Bool -moduleInit (const char *module) -{ - glitz_glx_init (module); - - return TRUE; -} - -void -InitOutput (ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ - xglxInitOutput (pScreenInfo, argc, argv); -} - -Bool -LegalModifier (unsigned int key, - DeviceIntPtr pDev) -{ - return xglxLegalModifier (key, pDev); -} - -void -ProcessInputEvents (void) -{ - xglxProcessInputEvents (); -} - -void -InitInput (int argc, - char **argv) -{ - xglxInitInput (argc, argv); -} - -void -ddxUseMsg (void) -{ - ErrorF ("\nXglx usage:\n"); - xglxUseMsg (); -} - -int -ddxProcessArgument (int argc, - char **argv, - int i) -{ - return xglxProcessArgument (argc, argv, i); -} - -void -AbortDDX (void) -{ - xglxAbort (); -} - -void -ddxGiveUp (void) -{ - xglxGiveUp (); -} - -void -OsVendorInit (void) -{ - xglxOsVendorInit (); -} diff --git a/hw/xgl/glx/xglx.c b/hw/xgl/glx/xglx.c deleted file mode 100644 index 33b276b74..000000000 --- a/hw/xgl/glx/xglx.c +++ /dev/null @@ -1,1444 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xglx.h" - -#include <X11/extensions/Xrandr.h> -#include <X11/cursorfont.h> - -#include <glitz-glx.h> - -#ifdef GLXEXT -#include "xglglxext.h" -#endif - -#include "inputstr.h" -#include "cursorstr.h" -#include "mipointer.h" - -#ifdef RANDR -#include "randrstr.h" -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <signal.h> -#include <math.h> - -#ifdef XKB -#include <X11/extensions/XKB.h> -#include <xkbsrv.h> -#include <X11/extensions/XKBconfig.h> - -extern Bool -XkbQueryExtension (Display *dpy, - int *opcodeReturn, - int *eventBaseReturn, - int *errorBaseReturn, - int *majorRtrn, - int *minorRtrn); - -extern XkbDescPtr -XkbGetKeyboard (Display *dpy, - unsigned int which, - unsigned int deviceSpec); - -extern Status -XkbGetControls (Display *dpy, - unsigned long which, - XkbDescPtr desc); - -#ifndef XKB_BASE_DIRECTORY -#define XKB_BASE_DIRECTORY "/usr/lib/X11/xkb/" -#endif -#ifndef XKB_CONFIG_FILE -#define XKB_CONFIG_FILE "X0-config.keyboard" -#endif -#ifndef XKB_DFLT_RULES_FILE -#define XKB_DFLT_RULES_FILE "xorg" -#endif -#ifndef XKB_DFLT_KB_LAYOUT -#define XKB_DFLT_KB_LAYOUT "us" -#endif -#ifndef XKB_DFLT_KB_MODEL -#define XKB_DFLT_KB_MODEL "pc101" -#endif -#ifndef XKB_DFLT_KB_VARIANT -#define XKB_DFLT_KB_VARIANT NULL -#endif -#ifndef XKB_DFLT_KB_OPTIONS -#define XKB_DFLT_KB_OPTIONS NULL -#endif - -#endif - -#define XGLX_DEFAULT_SCREEN_WIDTH 800 -#define XGLX_DEFAULT_SCREEN_HEIGHT 600 - -typedef struct _xglxScreen { - Window win, root; - Colormap colormap; - Bool fullscreen; - CloseScreenProcPtr CloseScreen; -} xglxScreenRec, *xglxScreenPtr; - -DevPrivateKey xglxScreenPrivateKey = &xglxScreenPrivateKey; - -#define XGLX_GET_SCREEN_PRIV(pScreen) ((xglxScreenPtr) \ - dixLookupPrivate(&(pScreen)->devPrivates, xglxScreenPrivateKey)) - -#define XGLX_SET_SCREEN_PRIV(pScreen, v) \ - dixSetPrivate(&(pScreen)->devPrivates, xglxScreenPrivateKey, v) - -#define XGLX_SCREEN_PRIV(pScreen) \ - xglxScreenPtr pScreenPriv = XGLX_GET_SCREEN_PRIV (pScreen) - -typedef struct _xglxCursor { - Cursor cursor; -} xglxCursorRec, *xglxCursorPtr; - -#define XGLX_GET_CURSOR_PRIV(pCursor, pScreen) \ - ((xglxCursorPtr)dixLookupPrivate(&(pCursor)->devPrivates, pScreen)) - -#define XGLX_SET_CURSOR_PRIV(pCursor, pScreen, v) \ - dixSetPrivate(&(pCursor)->devPrivates, pScreen, v) - -#define XGLX_CURSOR_PRIV(pCursor, pScreen) \ - xglxCursorPtr pCursorPriv = XGLX_GET_CURSOR_PRIV (pCursor, pScreen) - -static char *xDisplayName = 0; -static Display *xdisplay = 0; -static int xscreen; -static CARD32 lastEventTime = 0; -static ScreenPtr currentScreen = 0; -static Bool softCursor = FALSE; -static Bool fullscreen = TRUE; - -static Bool randrExtension = FALSE; -static int randrEvent, randrError; - -static glitz_drawable_format_t *xglxScreenFormat = 0; - -static Bool -xglxAllocatePrivates (ScreenPtr pScreen) -{ - xglxScreenPtr pScreenPriv; - - pScreenPriv = xalloc (sizeof (xglxScreenRec)); - if (!pScreenPriv) - return FALSE; - - XGLX_SET_SCREEN_PRIV (pScreen, pScreenPriv); - - return TRUE; -} - -#ifdef RANDR - -#define DEFAULT_REFRESH_RATE 50 - -static Bool -xglxRandRGetInfo (ScreenPtr pScreen, - Rotation *rotations) -{ - RRScreenSizePtr pSize; - - *rotations = RR_Rotate_0; - - if (randrExtension) - { - XRRScreenConfiguration *xconfig; - XRRScreenSize *sizes; - int nSizes, currentSize = 0; - short *rates, currentRate; - int nRates, i, j; - - XGLX_SCREEN_PRIV (pScreen); - - xconfig = XRRGetScreenInfo (xdisplay, pScreenPriv->root); - sizes = XRRConfigSizes (xconfig, &nSizes); - currentRate = XRRConfigCurrentRate (xconfig); - - if (pScreenPriv->fullscreen) - { - Rotation rotation; - - currentSize = XRRConfigCurrentConfiguration (xconfig, &rotation); - - for (i = 0; i < nSizes; i++) - { - pSize = RRRegisterSize (pScreen, - sizes[i].width, - sizes[i].height, - sizes[i].mwidth, - sizes[i].mheight); - - rates = XRRConfigRates (xconfig, i, &nRates); - - for (j = 0; j < nRates; j++) - { - RRRegisterRate (pScreen, pSize, rates[j]); - - if (i == currentSize && rates[j] == currentRate) - RRSetCurrentConfig (pScreen, RR_Rotate_0, currentRate, - pSize); - } - } - } - else - { - pSize = RRRegisterSize (pScreen, - pScreen->width, - pScreen->height, - pScreen->mmWidth, - pScreen->mmHeight); - - for (i = 0; i < nSizes; i++) - { - rates = XRRConfigRates (xconfig, i, &nRates); - - for (j = 0; j < nRates; j++) - { - RRRegisterRate (pScreen, pSize, rates[j]); - - if (rates[j] == currentRate) - RRSetCurrentConfig (pScreen, RR_Rotate_0, currentRate, - pSize); - } - } - } - - XRRFreeScreenConfigInfo (xconfig); - } - else - { - pSize = RRRegisterSize (pScreen, - pScreen->width, - pScreen->height, - pScreen->mmWidth, - pScreen->mmHeight); - - RRRegisterRate (pScreen, pSize, DEFAULT_REFRESH_RATE); - RRSetCurrentConfig (pScreen, RR_Rotate_0, DEFAULT_REFRESH_RATE, pSize); - } - - return TRUE; -} - -static Bool -xglxRandRSetConfig (ScreenPtr pScreen, - Rotation rotations, - int rate, - RRScreenSizePtr pSize) -{ - if (randrExtension) - { - XRRScreenConfiguration *xconfig; - XRRScreenSize *sizes; - int nSizes, currentSize; - int i, size = -1; - int status = RRSetConfigFailed; - Rotation rotation; - - XGLX_SCREEN_PRIV (pScreen); - - xconfig = XRRGetScreenInfo (xdisplay, pScreenPriv->root); - sizes = XRRConfigSizes (xconfig, &nSizes); - currentSize = XRRConfigCurrentConfiguration (xconfig, &rotation); - - for (i = 0; i < nSizes; i++) - { - if (pScreenPriv->fullscreen) - { - if (sizes[i].width == pSize->width && - sizes[i].height == pSize->height && - sizes[i].mwidth == pSize->mmWidth && - sizes[i].mheight == pSize->mmHeight) - { - size = i; - break; - } - } - else - { - short *rates; - int nRates, j; - - rates = XRRConfigRates (xconfig, i, &nRates); - - for (j = 0; j < nRates; j++) - { - if (rates[j] == rate) - { - size = i; - if (i >= currentSize) - break; - } - } - } - } - - if (size >= 0) - status = XRRSetScreenConfigAndRate (xdisplay, - xconfig, - pScreenPriv->root, - size, - RR_Rotate_0, - rate, - CurrentTime); - - XRRFreeScreenConfigInfo (xconfig); - - if (status == RRSetConfigSuccess) - { - PixmapPtr pPixmap; - - pPixmap = (*pScreen->GetScreenPixmap) (pScreen); - - if (pScreenPriv->fullscreen) - { - XGL_PIXMAP_PRIV (pPixmap); - - xglSetRootClip (pScreen, FALSE); - - XResizeWindow (xdisplay, pScreenPriv->win, - pSize->width, pSize->height); - - glitz_drawable_update_size (pPixmapPriv->drawable, - pSize->width, pSize->height); - - pScreen->width = pSize->width; - pScreen->height = pSize->height; - pScreen->mmWidth = pSize->mmWidth; - pScreen->mmHeight = pSize->mmHeight; - - (*pScreen->ModifyPixmapHeader) (pPixmap, - pScreen->width, - pScreen->height, - pPixmap->drawable.depth, - pPixmap->drawable.bitsPerPixel, - 0, 0); - - xglSetRootClip (pScreen, TRUE); - } - - return TRUE; - } - } - - return FALSE; -} - -static Bool -xglxRandRInit (ScreenPtr pScreen) -{ - rrScrPrivPtr pScrPriv; - - if (!RRScreenInit (pScreen)) - return FALSE; - - pScrPriv = rrGetScrPriv (pScreen); - pScrPriv->rrGetInfo = xglxRandRGetInfo; - pScrPriv->rrSetConfig = xglxRandRSetConfig; - - return TRUE; -} - -#endif - -static void -xglxConstrainCursor (ScreenPtr pScreen, - BoxPtr pBox) -{ -} - -static void -xglxCursorLimits (ScreenPtr pScreen, - CursorPtr pCursor, - BoxPtr pHotBox, - BoxPtr pTopLeftBox) -{ - *pTopLeftBox = *pHotBox; -} - -static Bool -xglxDisplayCursor (ScreenPtr pScreen, - CursorPtr pCursor) -{ - XGLX_SCREEN_PRIV (pScreen); - XGLX_CURSOR_PRIV (pCursor, pScreen); - - XDefineCursor (xdisplay, pScreenPriv->win, pCursorPriv->cursor); - - return TRUE; -} - -#ifdef ARGB_CURSOR - -static Bool -xglxARGBCursorSupport (void); - -static Cursor -xglxCreateARGBCursor (ScreenPtr pScreen, - CursorPtr pCursor); - -#endif - -static Bool -xglxRealizeCursor (ScreenPtr pScreen, - CursorPtr pCursor) -{ - xglxCursorPtr pCursorPriv; - XImage *ximage; - Pixmap source, mask; - XColor fgColor, bgColor; - XlibGC xgc; - unsigned long valuemask; - XGCValues values; - - XGLX_SCREEN_PRIV (pScreen); - - valuemask = GCForeground | GCBackground; - - values.foreground = 1L; - values.background = 0L; - - pCursorPriv = xalloc (sizeof (xglxCursorRec)); - if (!pCursorPriv) - return FALSE; - - XGLX_SET_CURSOR_PRIV (pCursor, pScreen, pCursorPriv); - -#ifdef ARGB_CURSOR - if (pCursor->bits->argb) - { - pCursorPriv->cursor = xglxCreateARGBCursor (pScreen, pCursor); - if (pCursorPriv->cursor) - return TRUE; - } -#endif - - source = XCreatePixmap (xdisplay, - pScreenPriv->win, - pCursor->bits->width, - pCursor->bits->height, - 1); - - mask = XCreatePixmap (xdisplay, - pScreenPriv->win, - pCursor->bits->width, - pCursor->bits->height, - 1); - - xgc = XCreateGC (xdisplay, source, valuemask, &values); - - ximage = XCreateImage (xdisplay, - DefaultVisual (xdisplay, xscreen), - 1, XYBitmap, 0, - (char *) pCursor->bits->source, - pCursor->bits->width, - pCursor->bits->height, - BitmapPad (xdisplay), 0); - - XPutImage (xdisplay, source, xgc, ximage, - 0, 0, 0, 0, pCursor->bits->width, pCursor->bits->height); - - XFree (ximage); - - ximage = XCreateImage (xdisplay, - DefaultVisual (xdisplay, xscreen), - 1, XYBitmap, 0, - (char *) pCursor->bits->mask, - pCursor->bits->width, - pCursor->bits->height, - BitmapPad (xdisplay), 0); - - XPutImage (xdisplay, mask, xgc, ximage, - 0, 0, 0, 0, pCursor->bits->width, pCursor->bits->height); - - XFree (ximage); - XFreeGC (xdisplay, xgc); - - fgColor.red = pCursor->foreRed; - fgColor.green = pCursor->foreGreen; - fgColor.blue = pCursor->foreBlue; - - bgColor.red = pCursor->backRed; - bgColor.green = pCursor->backGreen; - bgColor.blue = pCursor->backBlue; - - pCursorPriv->cursor = - XCreatePixmapCursor (xdisplay, source, mask, &fgColor, &bgColor, - pCursor->bits->xhot, pCursor->bits->yhot); - - XFreePixmap (xdisplay, mask); - XFreePixmap (xdisplay, source); - - return TRUE; -} - -static Bool -xglxUnrealizeCursor (ScreenPtr pScreen, - CursorPtr pCursor) -{ - XGLX_CURSOR_PRIV (pCursor, pScreen); - - XFreeCursor (xdisplay, pCursorPriv->cursor); - xfree (pCursorPriv); - - return TRUE; -} - -static void -xglxRecolorCursor (ScreenPtr pScreen, - CursorPtr pCursor, - Bool displayed) -{ - XColor fgColor, bgColor; - - XGLX_CURSOR_PRIV (pCursor, pScreen); - - fgColor.red = pCursor->foreRed; - fgColor.green = pCursor->foreGreen; - fgColor.blue = pCursor->foreBlue; - - bgColor.red = pCursor->backRed; - bgColor.green = pCursor->backGreen; - bgColor.blue = pCursor->backBlue; - - XRecolorCursor (xdisplay, pCursorPriv->cursor, &fgColor, &bgColor); -} - -static Bool -xglxSetCursorPosition (ScreenPtr pScreen, - int x, - int y, - Bool generateEvent) -{ - XGLX_SCREEN_PRIV (pScreen); - - XWarpPointer (xdisplay, pScreenPriv->win, pScreenPriv->win, - 0, 0, 0, 0, x, y); - - return TRUE; -} - -static Bool -xglxCloseScreen (int index, - ScreenPtr pScreen) -{ - glitz_drawable_t *drawable; - - XGLX_SCREEN_PRIV (pScreen); - - drawable = XGL_GET_SCREEN_PRIV (pScreen)->drawable; - if (drawable) - glitz_drawable_destroy (drawable); - - xglClearVisualTypes (); - - if (pScreenPriv->win) - XDestroyWindow (xdisplay, pScreenPriv->win); - - if (pScreenPriv->colormap) - XFreeColormap (xdisplay, pScreenPriv->colormap); - - XGL_SCREEN_UNWRAP (CloseScreen); - xfree (pScreenPriv); - - return (*pScreen->CloseScreen) (index, pScreen); -} - -static Bool -xglxCursorOffScreen (ScreenPtr *ppScreen, int *x, int *y) -{ - return FALSE; -} - -static void -xglxCrossScreen (ScreenPtr pScreen, Bool entering) -{ -} - -static void -xglxWarpCursor (ScreenPtr pScreen, int x, int y) -{ - miPointerWarpCursor (pScreen, x, y); -} - -miPointerScreenFuncRec xglxPointerScreenFuncs = { - xglxCursorOffScreen, - xglxCrossScreen, - xglxWarpCursor -}; - -static Bool -xglxScreenInit (int index, - ScreenPtr pScreen, - int argc, - char **argv) -{ - XSetWindowAttributes xswa; - XWMHints *wmHints; - XSizeHints *normalHints; - XClassHint *classHint; - xglxScreenPtr pScreenPriv; - XVisualInfo *vinfo; - XEvent xevent; - glitz_drawable_format_t *format; - glitz_drawable_t *drawable; - - format = xglxScreenFormat; - - if (!xglxAllocatePrivates (pScreen)) - return FALSE; - - currentScreen = pScreen; - - pScreenPriv = XGLX_GET_SCREEN_PRIV (pScreen); - - pScreenPriv->root = RootWindow (xdisplay, xscreen); - pScreenPriv->fullscreen = fullscreen; - - vinfo = glitz_glx_get_visual_info_from_format (xdisplay, xscreen, format); - if (!vinfo) - { - ErrorF ("[%d] no visual info from format\n", index); - return FALSE; - } - - pScreenPriv->colormap = - XCreateColormap (xdisplay, pScreenPriv->root, vinfo->visual, - AllocNone); - - if (XRRQueryExtension (xdisplay, &randrEvent, &randrError)) - randrExtension = TRUE; - - if (fullscreen) - { - xglScreenInfo.width = DisplayWidth (xdisplay, xscreen); - xglScreenInfo.height = DisplayHeight (xdisplay, xscreen); - xglScreenInfo.widthMm = DisplayWidthMM (xdisplay, xscreen); - xglScreenInfo.heightMm = DisplayHeightMM (xdisplay, xscreen); - - if (randrExtension) - { - XRRScreenConfiguration *xconfig; - Rotation rotation; - XRRScreenSize *sizes; - int nSizes, currentSize; - - xconfig = XRRGetScreenInfo (xdisplay, pScreenPriv->root); - currentSize = XRRConfigCurrentConfiguration (xconfig, &rotation); - sizes = XRRConfigSizes (xconfig, &nSizes); - - xglScreenInfo.width = sizes[currentSize].width; - xglScreenInfo.height = sizes[currentSize].height; - xglScreenInfo.widthMm = sizes[currentSize].mwidth; - xglScreenInfo.heightMm = sizes[currentSize].mheight; - - XRRFreeScreenConfigInfo (xconfig); - } - } - else if (xglScreenInfo.width == 0 || xglScreenInfo.height == 0) - { - xglScreenInfo.width = XGLX_DEFAULT_SCREEN_WIDTH; - xglScreenInfo.height = XGLX_DEFAULT_SCREEN_HEIGHT; - } - - xswa.colormap = pScreenPriv->colormap; - - pScreenPriv->win = - XCreateWindow (xdisplay, pScreenPriv->root, 0, 0, - xglScreenInfo.width, xglScreenInfo.height, 0, - vinfo->depth, InputOutput, vinfo->visual, - CWColormap, &xswa); - - XFree (vinfo); - - normalHints = XAllocSizeHints (); - normalHints->flags = PMinSize | PMaxSize | PSize; - normalHints->min_width = xglScreenInfo.width; - normalHints->min_height = xglScreenInfo.height; - normalHints->max_width = xglScreenInfo.width; - normalHints->max_height = xglScreenInfo.height; - - if (fullscreen) - { - normalHints->x = 0; - normalHints->y = 0; - normalHints->flags |= PPosition; - } - - classHint = XAllocClassHint (); - classHint->res_name = "xglx"; - classHint->res_class = "Xglx"; - - wmHints = XAllocWMHints (); - wmHints->flags = InputHint; - wmHints->input = TRUE; - - Xutf8SetWMProperties (xdisplay, pScreenPriv->win, "Xglx", "Xglx", 0, 0, - normalHints, wmHints, classHint); - - XFree (wmHints); - XFree (classHint); - XFree (normalHints); - - drawable = glitz_glx_create_drawable_for_window (xdisplay, xscreen, - format, pScreenPriv->win, - xglScreenInfo.width, - xglScreenInfo.height); - if (!drawable) - { - ErrorF ("[%d] couldn't create glitz drawable for window\n", index); - return FALSE; - } - - XSelectInput (xdisplay, pScreenPriv->win, - ButtonPressMask | ButtonReleaseMask | - KeyPressMask | KeyReleaseMask | EnterWindowMask | - PointerMotionMask | ExposureMask); - - XMapWindow (xdisplay, pScreenPriv->win); - - if (fullscreen) - { - XClientMessageEvent xev; - - memset (&xev, 0, sizeof (xev)); - - xev.type = ClientMessage; - xev.message_type = XInternAtom (xdisplay, "_NET_WM_STATE", FALSE); - xev.display = xdisplay; - xev.window = pScreenPriv->win; - xev.format = 32; - xev.data.l[0] = 1; - xev.data.l[1] = - XInternAtom (xdisplay, "_NET_WM_STATE_FULLSCREEN", FALSE); - - XSendEvent (xdisplay, pScreenPriv->root, FALSE, - SubstructureRedirectMask, (XEvent *) &xev); - } - - xglScreenInfo.drawable = drawable; - - if (!xglScreenInit (pScreen)) - return FALSE; - -#ifdef GLXEXT - if (!xglInitVisualConfigs (pScreen)) - return FALSE; -#endif - - XGL_SCREEN_WRAP (CloseScreen, xglxCloseScreen); - -#ifdef ARGB_CURSOR - if (!xglxARGBCursorSupport ()) - softCursor = TRUE; -#endif - - if (softCursor) - { - static char data = 0; - XColor black, dummy; - Pixmap bitmap; - Cursor cursor; - - if (!XAllocNamedColor (xdisplay, pScreenPriv->colormap, - "black", &black, &dummy)) - return FALSE; - - bitmap = XCreateBitmapFromData (xdisplay, pScreenPriv->win, &data, - 1, 1); - if (!bitmap) - return FALSE; - - cursor = XCreatePixmapCursor (xdisplay, bitmap, bitmap, &black, &black, - 0, 0); - if (!cursor) - return FALSE; - - XDefineCursor (xdisplay, pScreenPriv->win, cursor); - - XFreeCursor (xdisplay, cursor); - XFreePixmap (xdisplay, bitmap); - XFreeColors (xdisplay, pScreenPriv->colormap, &black.pixel, 1, 0); - - miDCInitialize (pScreen, &xglxPointerScreenFuncs); - } - else - { - pScreen->ConstrainCursor = xglxConstrainCursor; - pScreen->CursorLimits = xglxCursorLimits; - pScreen->DisplayCursor = xglxDisplayCursor; - pScreen->RealizeCursor = xglxRealizeCursor; - pScreen->UnrealizeCursor = xglxUnrealizeCursor; - pScreen->RecolorCursor = xglxRecolorCursor; - pScreen->SetCursorPosition = xglxSetCursorPosition; - } - - if (!xglFinishScreenInit (pScreen)) - return FALSE; - -#ifdef RANDR - if (!xglxRandRInit (pScreen)) - return FALSE; -#endif - - while (XNextEvent (xdisplay, &xevent)) - if (xevent.type == Expose) - break; - - return TRUE; -} - -void -xglxInitOutput (ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ - glitz_drawable_format_t *format, templ; - int i; - unsigned long mask; - unsigned long extraMask[] = { - GLITZ_FORMAT_DOUBLEBUFFER_MASK | GLITZ_FORMAT_ALPHA_SIZE_MASK, - GLITZ_FORMAT_DOUBLEBUFFER_MASK, - GLITZ_FORMAT_ALPHA_SIZE_MASK, - 0 - }; - - xglClearVisualTypes (); - - xglSetPixmapFormats (pScreenInfo); - - if (!xdisplay) - { - char *name = xDisplayName; - - if (!name) - name = xglxInitXorg (); - - xdisplay = XOpenDisplay (name); - if (!xdisplay) - FatalError ("can't open display: %s\n", name ? name : "NULL"); - - xscreen = DefaultScreen (xdisplay); - - if (!xDisplayName) - XDefineCursor (xdisplay, RootWindow (xdisplay, xscreen), - XCreateFontCursor (xdisplay, XC_watch)); - } - - templ.samples = 1; - templ.doublebuffer = 1; - templ.color.fourcc = GLITZ_FOURCC_RGB; - templ.color.alpha_size = 8; - - mask = GLITZ_FORMAT_SAMPLES_MASK | GLITZ_FORMAT_FOURCC_MASK; - - for (i = 0; i < sizeof (extraMask) / sizeof (extraMask[0]); i++) - { - format = glitz_glx_find_window_format (xdisplay, xscreen, - mask | extraMask[i], - &templ, 0); - if (format) - break; - } - - if (!format) - FatalError ("no visual format found"); - - xglScreenInfo.depth = - format->color.red_size + - format->color.green_size + - format->color.blue_size; - - xglSetVisualTypes (xglScreenInfo.depth, - (1 << TrueColor), - format->color.red_size, - format->color.green_size, - format->color.blue_size); - - xglxScreenFormat = format; - - AddScreen (xglxScreenInit, argc, argv); -} - -static Bool -xglxExposurePredicate (Display *xdisplay, - XEvent *xevent, - char *args) -{ - return (xevent->type == Expose); -} - -static Bool -xglxNotExposurePredicate (Display *xdisplay, - XEvent *xevent, - char *args) -{ - return (xevent->type != Expose); -} - -static int -xglxWindowExposures (WindowPtr pWin, - pointer pReg) -{ - ScreenPtr pScreen = pWin->drawable.pScreen; - RegionRec ClipList; - - if (HasBorder (pWin)) - { - REGION_INIT (pScreen, &ClipList, NullBox, 0); - REGION_SUBTRACT (pScreen, &ClipList, &pWin->borderClip, - &pWin->winSize); - REGION_INTERSECT (pScreen, &ClipList, &ClipList, (RegionPtr) pReg); - miPaintWindow(pWin, &ClipList, PW_BORDER); - REGION_UNINIT (pScreen, &ClipList); - } - - REGION_INIT (pScreen, &ClipList, NullBox, 0); - REGION_INTERSECT (pScreen, &ClipList, &pWin->clipList, (RegionPtr) pReg); - (*pScreen->WindowExposures) (pWin, &ClipList, NullRegion); - REGION_UNINIT (pScreen, &ClipList); - - return WT_WALKCHILDREN; -} - -static void -xglxBlockHandler (pointer blockData, - OSTimePtr pTimeout, - pointer pReadMask) -{ - XEvent X; - RegionRec region; - BoxRec box; - - XGL_SCREEN_PRIV (currentScreen); - - while (XCheckIfEvent (xdisplay, &X, xglxExposurePredicate, NULL)) - { - ScreenPtr pScreen = currentScreen; - - box.x1 = X.xexpose.x; - box.y1 = X.xexpose.y; - box.x2 = box.x1 + X.xexpose.width; - box.y2 = box.y1 + X.xexpose.height; - - REGION_INIT (currentScreen, ®ion, &box, 1); - - WalkTree (pScreen, xglxWindowExposures, ®ion); - - REGION_UNINIT (pScreen, ®ion); - } - - if (!xglSyncSurface (&pScreenPriv->pScreenPixmap->drawable)) - FatalError (XGL_SW_FAILURE_STRING); - - glitz_surface_flush (pScreenPriv->surface); - glitz_drawable_flush (pScreenPriv->drawable); - - XFlush (xdisplay); -} - -static void -xglxWakeupHandler (pointer blockData, - int result, - pointer pReadMask) -{ - ScreenPtr pScreen = currentScreen; - XEvent X; - xEvent x; - - while (XCheckIfEvent (xdisplay, &X, xglxNotExposurePredicate, NULL)) - { - switch (X.type) { - case KeyPress: - x.u.u.type = KeyPress; - x.u.u.detail = X.xkey.keycode; - x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); - mieqEnqueue (&x); - break; - case KeyRelease: - x.u.u.type = KeyRelease; - x.u.u.detail = X.xkey.keycode; - x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); - mieqEnqueue (&x); - break; - case ButtonPress: - x.u.u.type = ButtonPress; - x.u.u.detail = X.xbutton.button; - x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); - mieqEnqueue (&x); - break; - case ButtonRelease: - x.u.u.type = ButtonRelease; - x.u.u.detail = X.xbutton.button; - x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); - mieqEnqueue (&x); - break; - case MotionNotify: - x.u.u.type = MotionNotify; - x.u.u.detail = 0; - x.u.keyButtonPointer.rootX = X.xmotion.x; - x.u.keyButtonPointer.rootY = X.xmotion.y; - x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); - miPointerAbsoluteCursor (X.xmotion.x, X.xmotion.y, lastEventTime); - mieqEnqueue (&x); - break; - case EnterNotify: - if (X.xcrossing.detail != NotifyInferior) { - if (pScreen) { - NewCurrentScreen (pScreen, X.xcrossing.x, X.xcrossing.y); - x.u.u.type = MotionNotify; - x.u.u.detail = 0; - x.u.keyButtonPointer.rootX = X.xcrossing.x; - x.u.keyButtonPointer.rootY = X.xcrossing.y; - x.u.keyButtonPointer.time = lastEventTime = - GetTimeInMillis (); - mieqEnqueue (&x); - } - } - break; - default: - break; - } - } -} - -static void -xglxBell (int volume, - DeviceIntPtr pDev, - pointer ctrl, - int cls) -{ - XBell (xdisplay, volume); -} - -static void -xglxKbdCtrl (DeviceIntPtr pDev, - KeybdCtrl *ctrl) -{ - unsigned long valueMask; - XKeyboardControl values; - int i; - - valueMask = KBKeyClickPercent | KBBellPercent | KBBellPitch | - KBBellDuration | KBAutoRepeatMode; - - values.key_click_percent = ctrl->click; - values.bell_percent = ctrl->bell; - values.bell_pitch = ctrl->bell_pitch; - values.bell_duration = ctrl->bell_duration; - values.auto_repeat_mode = (ctrl->autoRepeat) ? AutoRepeatModeOn : - AutoRepeatModeOff; - - XChangeKeyboardControl (xdisplay, valueMask, &values); - - valueMask = KBLed | KBLedMode; - - for (i = 1; i <= 32; i++) - { - values.led = i; - values.led_mode = (ctrl->leds & (1 << (i - 1))) ? LedModeOn : - LedModeOff; - - XChangeKeyboardControl (xdisplay, valueMask, &values); - } -} - -static int -xglxKeybdProc (DeviceIntPtr pDevice, - int onoff) -{ - Bool ret = FALSE; - DevicePtr pDev = (DevicePtr) pDevice; - - if (!pDev) - return BadImplementation; - - switch (onoff) { - case DEVICE_INIT: { - XModifierKeymap *xmodMap; - KeySym *xkeyMap; - int minKeyCode, maxKeyCode, mapWidth, i, j; - KeySymsRec xglxKeySyms; - CARD8 xglxModMap[256]; - XKeyboardState values; - -#ifdef _XSERVER64 - KeySym64 *xkeyMap64; - int len; -#endif - -#ifdef XKB - Bool xkbExtension = FALSE; - int xkbOp, xkbEvent, xkbError, xkbMajor, xkbMinor; -#endif - - if (pDev != (DevicePtr)inputInfo.keyboard) - return !Success; - - xmodMap = XGetModifierMapping (xdisplay); - - XDisplayKeycodes (xdisplay, &minKeyCode, &maxKeyCode); - -#ifdef _XSERVER64 - xkeyMap64 = XGetKeyboardMapping (xdisplay, - minKeyCode, - maxKeyCode - minKeyCode + 1, - &mapWidth); - - len = (maxKeyCode - minKeyCode + 1) * mapWidth; - xkeyMap = (KeySym *) xalloc (len * sizeof (KeySym)); - for (i = 0; i < len; ++i) - xkeyMap[i] = xkeyMap64[i]; - - XFree (xkeyMap64); -#else - xkeyMap = XGetKeyboardMapping (xdisplay, - minKeyCode, - maxKeyCode - minKeyCode + 1, - &mapWidth); -#endif - - memset (xglxModMap, 0, 256); - - for (j = 0; j < 8; j++) - { - for (i = 0; i < xmodMap->max_keypermod; i++) - { - CARD8 keyCode; - - keyCode = xmodMap->modifiermap[j * xmodMap->max_keypermod + i]; - if (keyCode) - xglxModMap[keyCode] |= 1 << j; - } - } - - XFreeModifiermap (xmodMap); - - xglxKeySyms.minKeyCode = minKeyCode; - xglxKeySyms.maxKeyCode = maxKeyCode; - xglxKeySyms.mapWidth = mapWidth; - xglxKeySyms.map = xkeyMap; - -#ifdef XKB - if (!noXkbExtension) - xkbExtension = XkbQueryExtension (xdisplay, - &xkbOp, &xkbEvent, &xkbError, - &xkbMajor, &xkbMinor); - - if (xkbExtension) - { - XkbDescPtr desc; - char *rules, *model, *layout, *variants, *options; - - desc = XkbGetKeyboard (xdisplay, - XkbGBN_AllComponentsMask, - XkbUseCoreKbd); - - if (desc && desc->geom) - { - XkbComponentNamesRec names; - FILE *file; - - rules = XKB_DFLT_RULES_FILE; - model = XKB_DFLT_KB_MODEL; - layout = XKB_DFLT_KB_LAYOUT; - variants = XKB_DFLT_KB_VARIANT; - options = XKB_DFLT_KB_OPTIONS; - - XkbGetControls (xdisplay, XkbAllControlsMask, desc); - - memset (&names, 0, sizeof (XkbComponentNamesRec)); - - XkbSetRulesDflts (rules, model, layout, variants, options); - - ret = XkbInitKeyboardDeviceStruct ((pointer) pDev, - &names, - &xglxKeySyms, - xglxModMap, - xglxBell, - xglxKbdCtrl); - - if (ret) - XkbDDXChangeControls ((pointer) pDev, desc->ctrls, - desc->ctrls); - - XkbFreeKeyboard (desc, 0, False); - } - } -#endif - - if (!ret) - { - XGetKeyboardControl (xdisplay, &values); - - memmove (defaultKeyboardControl.autoRepeats, - values.auto_repeats, sizeof (values.auto_repeats)); - - ret = InitKeyboardDeviceStruct (pDev, - &xglxKeySyms, - xglxModMap, - xglxBell, - xglxKbdCtrl); - } - -#ifdef _XSERVER64 - xfree (xkeyMap); -#else - XFree (xkeyMap); -#endif - - if (!ret) - return BadImplementation; - - } break; - case DEVICE_ON: - pDev->on = TRUE; - break; - case DEVICE_OFF: - case DEVICE_CLOSE: - pDev->on = FALSE; - break; - } - - return Success; -} - -Bool -xglxLegalModifier (unsigned int key, - DeviceIntPtr pDev) -{ - return TRUE; -} - -void -xglxProcessInputEvents (void) -{ - mieqProcessInputEvents (); - miPointerUpdate (); -} - -void -xglxInitInput (int argc, - char **argv) -{ - DeviceIntPtr pKeyboard, pPointer; - - pPointer = AddInputDevice (xglMouseProc, TRUE); - pKeyboard = AddInputDevice (xglxKeybdProc, TRUE); - - RegisterPointerDevice (pPointer); - RegisterKeyboardDevice (pKeyboard); - - miRegisterPointerDevice (screenInfo.screens[0], pPointer); - mieqInit (&pKeyboard->public, &pPointer->public); - - AddEnabledDevice (XConnectionNumber (xdisplay)); - - RegisterBlockAndWakeupHandlers (xglxBlockHandler, - xglxWakeupHandler, - NULL); -} - -void -xglxUseMsg (void) -{ - ErrorF ("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM] " - "specify screen characteristics\n"); - ErrorF ("-fullscreen run fullscreen\n"); - ErrorF ("-display string display name of the real server\n"); - ErrorF ("-softcursor force software cursor\n"); - - if (!xDisplayName) - xglxUseXorgMsg (); -} - -int -xglxProcessArgument (int argc, - char **argv, - int i) -{ - static Bool checkDisplayName = FALSE; - - if (!checkDisplayName) - { - char *display = ":0"; - int j; - - for (j = i; j < argc; j++) - { - if (!strcmp (argv[j], "-display")) - { - if (++j < argc) - xDisplayName = argv[j]; - - break; - } - else if (argv[j][0] == ':') - { - display = argv[j]; - } - } - - if (!xDisplayName) - xDisplayName = getenv ("DISPLAY"); - - if (xDisplayName) - { - int n; - - n = strspn (xDisplayName, ":0123456789"); - if (strncmp (xDisplayName, display, n) == 0) - xDisplayName = 0; - } - - if (xDisplayName) - fullscreen = FALSE; - - checkDisplayName = TRUE; - } - - if (!strcmp (argv[i], "-screen")) - { - if ((i + 1) < argc) - { - xglParseScreen (argv[i + 1]); - } - else - return 1; - - return 2; - } - else if (!strcmp (argv[i], "-fullscreen")) - { - fullscreen = TRUE; - return 1; - } - else if (!strcmp (argv[i], "-display")) - { - if (++i < argc) - return 2; - - return 0; - } - else if (!strcmp (argv[i], "-softcursor")) - { - softCursor = TRUE; - return 1; - } - else if (!xDisplayName) - { - return xglxProcessXorgArgument (argc, argv, i); - } - - return 0; -} - -void -xglxAbort (void) -{ - xglxAbortXorg (); -} - -void -xglxGiveUp (void) -{ - AbortDDX (); -} - -void -xglxOsVendorInit (void) -{ -} - -#ifdef ARGB_CURSOR - -#include <X11/extensions/Xrender.h> - -static Bool -xglxARGBCursorSupport (void) -{ - int renderMajor, renderMinor; - - if (!XRenderQueryVersion (xdisplay, &renderMajor, &renderMinor)) - renderMajor = renderMinor = -1; - - return (renderMajor > 0 || renderMinor > 4); -} - -static Cursor -xglxCreateARGBCursor (ScreenPtr pScreen, - CursorPtr pCursor) -{ - Pixmap xpixmap; - XlibGC xgc; - XImage *ximage; - XRenderPictFormat *xformat; - Picture xpicture; - Cursor cursor; - - XGLX_SCREEN_PRIV (pScreen); - - xpixmap = XCreatePixmap (xdisplay, - pScreenPriv->win, - pCursor->bits->width, - pCursor->bits->height, - 32); - - xgc = XCreateGC (xdisplay, xpixmap, 0, NULL); - - ximage = XCreateImage (xdisplay, - DefaultVisual (xdisplay, xscreen), - 32, ZPixmap, 0, - (char *) pCursor->bits->argb, - pCursor->bits->width, - pCursor->bits->height, - 32, pCursor->bits->width * 4); - - XPutImage (xdisplay, xpixmap, xgc, ximage, - 0, 0, 0, 0, pCursor->bits->width, pCursor->bits->height); - - XFree (ximage); - XFreeGC (xdisplay, xgc); - - xformat = XRenderFindStandardFormat (xdisplay, PictStandardARGB32); - xpicture = XRenderCreatePicture (xdisplay, xpixmap, xformat, 0, 0); - - cursor = XRenderCreateCursor (xdisplay, xpicture, - pCursor->bits->xhot, - pCursor->bits->yhot); - - XRenderFreePicture (xdisplay, xpicture); - XFreePixmap (xdisplay, xpixmap); - - return cursor; -} - -#endif diff --git a/hw/xgl/glx/xglx.h b/hw/xgl/glx/xglx.h deleted file mode 100644 index a8c894661..000000000 --- a/hw/xgl/glx/xglx.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#ifndef _XGLX_H_ -#define _XGLX_H_ - -#include "xgl.h" - -#ifdef _XSERVER64 -#define _XSERVER64_tmp -#undef _XSERVER64 -typedef unsigned long XID64; -typedef unsigned long Mask64; -typedef unsigned long Atom64; -typedef unsigned long VisualID64; -typedef unsigned long Time64; -#define XID XID64 -#define Mask Mask64 -#define Atom Atom64 -#define VisualID VisualID64 -#define Time Time64 -typedef XID Window64; -typedef XID Drawable64; -typedef XID Font64; -typedef XID Pixmap64; -typedef XID Cursor64; -typedef XID Colormap64; -typedef XID GContext64; -typedef XID KeySym64; -#define Window Window64 -#define Drawable Drawable64 -#define Font Font64 -#define Pixmap Pixmap64 -#define Cursor Cursor64 -#define Colormap Colormap64 -#define GContext GContext64 -#define KeySym KeySym64 -#endif - -#define GC XlibGC -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#undef GC - -#ifdef _XSERVER64_tmp -#ifndef _XSERVER64 -#define _XSERVER64 -#endif -#undef _XSERVER64_tmp -#undef XID -#undef Mask -#undef Atom -#undef VisualID -#undef Time -#undef Window -#undef Drawable -#undef Font -#undef Pixmap -#undef Cursor -#undef Colormap -#undef GContext -#undef KeySym -#endif - -void -xglxInitOutput (ScreenInfo *pScreenInfo, - int argc, - char **argv); - -Bool -xglxLegalModifier (unsigned int key, - DeviceIntPtr pDev); - -void -xglxProcessInputEvents (void); - -void -xglxInitInput (int argc, - char **argv); - -void -xglxUseMsg (void); - -int -xglxProcessArgument (int argc, - char **argv, - int i); - -void -xglxAbort (void); - -void -xglxGiveUp (void); - -void -xglxOsVendorInit (void); - -#ifndef NXGLXORG - -void -xglxUseXorgMsg (void); - -int -xglxProcessXorgArgument (int argc, - char **argv, - int i); - -void -xglxAbortXorg (void); - -char * -xglxInitXorg (void); - -#endif - -#endif /* _XGLX_H_ */ diff --git a/hw/xgl/glx/xglxinit.c b/hw/xgl/glx/xglxinit.c deleted file mode 100644 index 0348d1fe8..000000000 --- a/hw/xgl/glx/xglxinit.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xglx.h" -#include "xglglx.h" - -xglScreenInfoRec xglScreenInfo = { - NULL, 0, 0, 0, 0, 0, - DEFAULT_GEOMETRY_DATA_TYPE, - DEFAULT_GEOMETRY_USAGE, - FALSE, - XGL_DEFAULT_PBO_MASK, - FALSE, - { - { FALSE, FALSE, { 0, 0, 0, 0 } }, - { FALSE, FALSE, { 0, 0, 0, 0 } }, - { FALSE, FALSE, { 0, 0, 0, 0 } }, - { FALSE, FALSE, { 0, 0, 0, 0 } } - } -}; - -#ifdef GLXEXT -static Bool loadGlx = TRUE; - -#ifndef NGLXEXTLOG -static char *glxExtLogFile = 0; -#endif - -#endif - -void -InitOutput (ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ - -#ifdef GLXEXT - if (loadGlx) - { - if (!xglLoadGLXModules ()) - FatalError ("No GLX modules loaded"); - -#ifndef NGLXEXTLOG - if (glxExtLogFile) - { - __xglGLXLogFp = fopen (glxExtLogFile, "w"); - if (!__xglGLXLogFp) - perror ("InitOutput"); - } - else - __xglGLXLogFp = 0; -#endif - - } -#endif - - xglxInitOutput (pScreenInfo, argc, argv); -} - -Bool -LegalModifier (unsigned int key, - DeviceIntPtr pDev) -{ - return xglxLegalModifier (key, pDev); -} - -void -ProcessInputEvents (void) -{ - xglxProcessInputEvents (); -} - -void -InitInput (int argc, - char **argv) -{ - xglxInitInput (argc, argv); -} - -void -ddxUseMsg (void) -{ - ErrorF ("\nXgl usage:\n"); - -#ifdef GLXEXT - ErrorF ("-noglx don't load glx extension\n"); - -#ifndef NGLXEXTLOG - ErrorF ("-glxlog file glx extension log file\n"); -#endif - -#endif - - xglUseMsg (); - ErrorF ("\nXglx usage:\n"); - xglxUseMsg (); -} - -int -ddxProcessArgument (int argc, - char **argv, - int i) -{ - int skip; - -#ifdef GLXEXT - if (!strcmp (argv[i], "-noglx")) - { - loadGlx = FALSE; - return 1; - } - -#ifndef NGLXEXTLOG - else if (!strcmp (argv[i], "-glxlog")) - { - if (++i < argc) - glxExtLogFile = argv[i]; - } -#endif - -#endif - - skip = xglProcessArgument (argc, argv, i); - if (skip) - return skip; - - return xglxProcessArgument (argc, argv, i); -} - -void -AbortDDX (void) -{ - xglxAbort (); -} - -void -ddxGiveUp (void) -{ - xglxGiveUp (); -} - -void -OsVendorInit (void) -{ - xglxOsVendorInit (); -} diff --git a/hw/xgl/glx/xglxorg.c b/hw/xgl/glx/xglxorg.c deleted file mode 100644 index 1d6fc9a30..000000000 --- a/hw/xgl/glx/xglxorg.c +++ /dev/null @@ -1,674 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Authors: David Reveman <davidr@novell.com> - * Matthias Hopf <mhopf@suse.de> - */ - -#include "xglx.h" - -#ifndef NXGLXORG - -#include <X11/Xauth.h> - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <errno.h> -#include <ctype.h> -#include <signal.h> -#include <setjmp.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <sys/stat.h> -#include <libgen.h> - -typedef void (*sighandler_t) (int); - -#define XORG_DIE_TIMEOUT 3 -#define XORG_DEV_RANDOM "/dev/urandom" - -static char xorgAuthBuf[256]; -static char *xorgAuthTempl = "/tmp/.Xgl-auth-XXXXXX"; -static char *xorgAuth = NULL; - -static char *xorgProgs[] = { "/usr/bin/Xorg", "/usr/X11R6/bin/Xorg" }; -static char *xorgProg = NULL; - -static char *xorgDisplay = ":93"; -static char *xorgTerminate = "-terminate"; - -static pid_t xorgPid = 0; -static int receivedUsr1 = 0; -static jmp_buf jumpbuf; - -static Bool waitAndExit = FALSE; - -static char **xorgArgv = 0; -static int nXorgArgv = 0; - -typedef struct _xglxArg *xglxArgPtr; - -typedef int (*xglxProcessArgumentProc) (xglxArgPtr, int, char **, int); - -typedef struct _xglxArg { - xglxProcessArgumentProc processArgument; - const char *name; - const char *usage; -} xglxArgRec; - -static int -xglxAddXorgArguments (char **argv, - int n) -{ - char **newArgv; - int i; - - newArgv = xrealloc (xorgArgv, sizeof (char *) * (nXorgArgv + n)); - if (!newArgv) - return 0; - - for (i = 0; i < n; i++) - newArgv[nXorgArgv + i] = argv[i]; - - xorgArgv = newArgv; - nXorgArgv += n; - - return n; -} - -static int -xglxProcessCommonXorgArgument (xglxArgPtr pArg, - int n, - int argc, - char **argv, - int i) -{ - if (strcmp (argv[i], pArg->name) == 0) - { - if (i + n - 1 < argc) - return xglxAddXorgArguments (&argv[i], n); - } - - return 0; -} - -#define PROCESS_COMMON_XORG_ARGUMENT_IMP(args) \ - static int \ - xglxProcess ## args ## CommonXorgArgument (xglxArgPtr pArg, \ - int argc, \ - char **argv, \ - int i) \ - { \ - return xglxProcessCommonXorgArgument (pArg, args, argc, argv, i); \ - } - -PROCESS_COMMON_XORG_ARGUMENT_IMP (1) -PROCESS_COMMON_XORG_ARGUMENT_IMP (2) - -static int -xglxProcessXorgVTArgument (xglxArgPtr pArg, - int argc, - char **argv, - int i) -{ - if (argv[i][0] == 'v' && argv[i][1] == 't' && - strspn (&argv[i][2], "0123456789") == strlen (&argv[i][2])) - return xglxAddXorgArguments (&argv[i], 1); - - return 0; -} - -static int -xglxProcessXorgAcArgument (xglxArgPtr pArg, - int argc, - char **argv, - int i) -{ - static char *ac = "-ac"; - - if (strcmp (argv[i], pArg->name) == 0) - { - if (xglxAddXorgArguments (&ac, 1)) - return 1; - } - - return 0; -} - -static int -xglxProcessXorgVersionArgument (xglxArgPtr pArg, - int argc, - char **argv, - int i) -{ - static char *version = "-version"; - - if (strcmp (argv[i], pArg->name) == 0) - { - if (xglxAddXorgArguments (&version, 1)) - { - waitAndExit = TRUE; - return 1; - } - } - - return 0; -} - -static int -xglxProcessXorgProgArgument (xglxArgPtr pArg, - int argc, - char **argv, - int i) -{ - if (strcmp (argv[i], pArg->name) == 0) - { - if (i + 1 < argc) - { - xorgProg = argv[i + 1]; - return 2; - } - } - - return 0; -} - -static int -xglxProcessXorgDisplayArgument (xglxArgPtr pArg, - int argc, - char **argv, - int i) -{ - if (strcmp (argv[i], pArg->name) == 0) - { - if (i + 1 < argc) - { - xorgDisplay = argv[i + 1]; - return 2; - } - } - - return 0; -} - -static int -xglxProcessXorgWaitExitArgument (xglxArgPtr pArg, - int argc, - char **argv, - int i) -{ - if (xglxProcessCommonXorgArgument (pArg, 1, argc, argv, i)) - { - waitAndExit = TRUE; - return 1; - } - - return 0; -} - -#define ARG(processArgument, name, usage) \ - { processArgument, name, usage } - -#define XORG_ARG(name, args) \ - ARG (xglxProcess ## args ## CommonXorgArgument, name, 0) - -#define XORG_UARG(name, usage, args) \ - ARG (xglxProcess ## args ## CommonXorgArgument, name, usage) - -xglxArgRec xorgUid0Args[] = { - XORG_UARG ("-modulepath", " paths specify the module search path", 2), - XORG_UARG ("-logfile", " file specify a log file name", 2), - ARG (xglxProcessXorgWaitExitArgument, "-configure", - " probe for devices and write an Xorg config") -}; - -xglxArgRec xorgUidArgs[] = { - XORG_UARG ("-config", - " file specify configuration file, relative to the\n" - " Xorg config search path, " - "only root can use absolute", 2) -}; - -xglxArgRec xorgArgs[] = { - ARG (xglxProcessXorgWaitExitArgument, "-probeonly", - " probe for devices, then exit"), - XORG_UARG ("-verbose", " [n] verbose startup messages", 2), - XORG_UARG ("-logverbose", " [n] verbose log messages", 2), - XORG_UARG ("-quiet", " minimal startup messages", 1), - XORG_UARG ("-depth", " n set colour depth. Default: 8", 2), - XORG_UARG ("-gamma", - " f set gamma value (0.1 < f < 10.0) " - "Default: 1.0", 2), - XORG_UARG ("-rgamma", " f set gamma value for red phase", 2), - XORG_UARG ("-ggamma", " f set gamma value for green phase", - 2), - XORG_UARG ("-bgamma", " f set gamma value for blue phase", 2), - XORG_UARG ("-layout", - " name specify the ServerLayout section name", 2), - XORG_UARG ("-screen", - " name specify the Screen section name", 2), - XORG_UARG ("-keyboard", - " name specify the core keyboard InputDevice name", 2), - XORG_UARG ("-pointer", - " name specify the core pointer InputDevice name", 2), - XORG_UARG ("-nosilk", " disable Silken Mouse", 1), - XORG_UARG ("-disableModInDev", - " disable dynamic modification of input device settings", - 1), - XORG_UARG ("-allowMouseOpenFail", - " start server even if the mouse can't be initialized", 1), - XORG_UARG ("-bestRefresh", - " choose modes with the best refresh rate", 1), - XORG_UARG ("-ignoreABI", - " make module ABI mismatches non-fatal", 1), - XORG_UARG ("-isolateDevice", - " bus_id restrict device resets to bus_id (PCI only)", 2), - ARG (xglxProcessXorgVTArgument, "vtXX", - " use the specified VT number"), - XORG_UARG ("-keeptty", - " don't detach controlling tty " - "(for debugging only)", 1), - XORG_UARG ("-novtswitch", " don't immediately switch to new VT", - 1), - XORG_UARG ("-sharevts", " share VTs with another X server", - 1), - ARG (xglxProcessXorgAcArgument, "-xorgAc", - " disable access control restrictions"), - ARG (xglxProcessXorgProgArgument, "-xorgProgram", - " server program"), - ARG (xglxProcessXorgDisplayArgument, "-xorgDisplay", - " server display"), - ARG (xglxProcessXorgVersionArgument, "-xorgVersion", - " show the server version") -}; - -xglxArgRec sharedArgs[] = { - XORG_ARG ("-br", 1) -}; - -void -xglxUseXorgMsg (void) -{ - int i; - - ErrorF ("\nXorg usage:\n"); - - if (getuid () == 0) - { - for (i = 0; i < sizeof (xorgUid0Args) / sizeof (xglxArgRec); i++) - ErrorF ("%s%s\n", xorgUid0Args[i].name, xorgUid0Args[i].usage); - } - else - { - for (i = 0; i < sizeof (xorgUidArgs) / sizeof (xglxArgRec); i++) - ErrorF ("%s%s\n", xorgUidArgs[i].name, xorgUidArgs[i].usage); - } - - for (i = 0; i < sizeof (xorgArgs) / sizeof (xglxArgRec); i++) - ErrorF ("%s%s\n", xorgArgs[i].name, xorgArgs[i].usage); -} - -int -xglxProcessXorgArgument (int argc, - char **argv, - int i) -{ - int skip, j; - - if (nXorgArgv == 0) - { - if (!xglxAddXorgArguments (&xorgProg, 1)) - return 0; - } - - if (getuid () == 0) - { - for (j = 0; j < sizeof (xorgUid0Args) / sizeof (xglxArgRec); j++) - { - skip = (*xorgUid0Args[j].processArgument) (&xorgUid0Args[j], - argc, argv, i); - if (skip) - return skip; - } - } - else - { - for (j = 0; j < sizeof (xorgUidArgs) / sizeof (xglxArgRec); j++) - { - skip = (*xorgUidArgs[j].processArgument) (&xorgUidArgs[j], - argc, argv, i); - if (skip) - return skip; - } - } - - for (j = 0; j < sizeof (xorgArgs) / sizeof (xorgArgs[0]); j++) - { - skip = (*xorgArgs[j].processArgument) (&xorgArgs[j], argc, argv, i); - if (skip) - return skip; - } - - for (j = 0; j < sizeof (sharedArgs) / sizeof (sharedArgs[0]); j++) - { - skip = (*sharedArgs[j].processArgument) (&sharedArgs[j], argc, argv, i); - if (skip) - return 0; - } - - return 0; -} - -static void -sigAlarm (int sig) -{ - ErrorF ("%s won't die, killing it\n", basename (xorgProg)); - - kill (xorgPid, SIGKILL); - if (xorgPid) - while (waitpid (xorgPid, NULL, 0) == -1 && errno == EINTR); -} - -void -xglxAbortXorg (void) -{ - sighandler_t oldSigAlarm; - unsigned int oldAlarm; - int status = 0; - char *name; - - if (!xorgPid) - return; - - name = basename (xorgProg); - - oldAlarm = alarm (0); - oldSigAlarm = signal (SIGALRM, sigAlarm); - - kill (xorgPid, SIGTERM); - - alarm (XORG_DIE_TIMEOUT); - while (waitpid (xorgPid, &status, 0) == -1 && errno == EINTR); - alarm (0); - - signal (SIGALRM, oldSigAlarm); - alarm (oldAlarm); - - if (WIFEXITED (status)) - { - if (WEXITSTATUS (status)) - ErrorF ("%s died, exit status %d\n", name, WEXITSTATUS (status)); - } - else if (WIFSIGNALED (status)) - ErrorF ("%s died, signal %d\n", name, WTERMSIG (status)); - else - ErrorF ("%s died, dubious exit\n", name); - - if (xorgAuth) - unlink (xorgAuth); -} - -static void -sigUsr1Waiting (int sig) -{ - signal (sig, sigUsr1Waiting); - receivedUsr1++; -} - -static void -sigUsr1Jump (int sig) -{ - -#ifdef HAVE_SIGPROCMASK - sigset_t set; -#endif - - signal (sig, sigUsr1Waiting); - -#ifdef HAVE_SIGPROCMASK - sigemptyset (&set); - sigaddset (&set, SIGUSR1); - sigprocmask (SIG_UNBLOCK, &set, NULL); -#endif - - longjmp (jumpbuf, 1); -} - -#define AUTH_DATA_LEN 16 /* bytes of authorization data */ - -static Bool -xglxSetupAuth (char *name, int authFd) -{ - Xauth auth; - int randomFd; - ssize_t bytes, size; - char authHost[256]; - char authData[AUTH_DATA_LEN]; - FILE *file; - - auth.family = FamilyLocal; - - gethostname (authHost, sizeof (authHost)); - - auth.address = authHost; - auth.address_length = strlen (authHost); - - auth.number = strrchr (xorgDisplay, ':'); - if (!auth.number) - { - ErrorF ("Bad Xorg display name: %s\n", xorgDisplay); - return FALSE; - } - - auth.number++; - - auth.number_length = strlen (auth.number); - if (!auth.number_length) - { - ErrorF ("Bad Xorg display name: %s\n", xorgDisplay); - return FALSE; - } - - auth.name = "MIT-MAGIC-COOKIE-1"; - auth.name_length = strlen (auth.name); - - randomFd = open (XORG_DEV_RANDOM, O_RDONLY); - if (randomFd == -1) - { - ErrorF ("Failed to open " XORG_DEV_RANDOM "\n"); - return FALSE; - } - - bytes = 0; - do { - size = read (randomFd, authData + bytes, AUTH_DATA_LEN - bytes); - if (size <= 0) - break; - - bytes += size; - } while (bytes != AUTH_DATA_LEN); - - close (randomFd); - - if (bytes != AUTH_DATA_LEN) - { - ErrorF ("Failed to read %d random bytes from " XORG_DEV_RANDOM "\n", - AUTH_DATA_LEN); - return FALSE; - } - - auth.data = authData; - auth.data_length = AUTH_DATA_LEN; - - file = fdopen (authFd, "w"); - if (!file) - { - ErrorF ("Failed to open authorization file: %s\n", name); - close (authFd); - return FALSE; - } - - XauWriteAuth (file, &auth); - fclose (file); - - return TRUE; -} - -char * -xglxInitXorg (void) -{ - sighandler_t oldSigUsr1; - pid_t pid; - char *name; - char *auth[] = { "-auth", xorgAuthBuf, "-nolisten", "tcp" }; - char *saver[] = { "-dpms", "-v", "-s", "0" }; - char *endArg = NULL; - int authFd; - int mask; - - if (xorgPid) - return xorgDisplay; - - if (!xorgProg) - { - struct stat buf; - int i; - - for (i = 0; i < sizeof (xorgProgs) / sizeof (char *); i++) - { - if (stat (xorgProgs[i], &buf) == 0) - { - xorgProg = xorgProgs[i]; - break; - } - } - - if (!xorgProg) - FatalError ("Can't find Xorg executable\n"); - } - - strcpy (xorgAuthBuf, xorgAuthTempl); - mask = umask (0077); - authFd = mkstemp (xorgAuthBuf); - umask (mask); - if (authFd == -1) - FatalError ("Failed to generate unique authorization file\n"); - - xorgAuth = xorgAuthBuf; - - if (nXorgArgv == 0) - { - if (!xglxAddXorgArguments (&xorgProg, 1)) - return 0; - } - else - { - xorgArgv[0] = xorgProg; - } - - if (!xglxAddXorgArguments (auth, sizeof (auth) / sizeof (char *))) - return 0; - - if (!xglxAddXorgArguments (saver, sizeof (saver) / sizeof (char *))) - return 0; - - if (!xglxAddXorgArguments (&xorgDisplay, 1)) - return 0; - - if (!xglxAddXorgArguments (&xorgTerminate, 1)) - return 0; - - if (!xglxAddXorgArguments (&endArg, 1)) - return 0; - - name = basename (xorgProg); - - if (!xglxSetupAuth (xorgAuth, authFd)) - FatalError ("Failed to set up authorization: %s\n", xorgAuth); - - oldSigUsr1 = signal (SIGUSR1, sigUsr1Waiting); - - pid = fork (); - - switch (pid) { - case -1: - perror ("fork"); - FatalError ("fork"); - break; - case 0: - signal (SIGUSR1, SIG_IGN); - execv (xorgArgv[0], xorgArgv); - perror (xorgArgv[0]); - exit (2); - break; - default: - xorgPid = pid; - break; - } - - for (;;) - { - int status; - - signal (SIGUSR1, sigUsr1Waiting); - if (setjmp (jumpbuf) && !waitAndExit) - break; - - signal (SIGUSR1, sigUsr1Jump); - if (receivedUsr1 && !waitAndExit) - break; - - if (waitpid (xorgPid, &status, 0) != -1) - { - if (WIFEXITED (status)) - { - if (waitAndExit) - { - if (WEXITSTATUS (status)) - FatalError ("%s died, exit status %d\n", name, - WEXITSTATUS (status)); - - exit (WEXITSTATUS (status)); - } - else - { - FatalError ("%s died, exit status %d\n", name, - WEXITSTATUS (status)); - } - } - else if (WIFSIGNALED (status)) - FatalError ("%s died, signal %d\n", name, WTERMSIG (status)); - else - FatalError ("%s died, dubious exit\n", name); - } - } - - signal (SIGUSR1, oldSigUsr1); - - setenv ("XAUTHORITY", xorgAuth, 1); - - return xorgDisplay; -} - -#endif diff --git a/hw/xgl/glxext/Makefile.am b/hw/xgl/glxext/Makefile.am deleted file mode 100644 index f79b855e7..000000000 --- a/hw/xgl/glxext/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ -SUBDIRS = module - -AM_CFLAGS = \ - $(DIX_CFLAGS) \ - -DHAVE_XGL_CONFIG_H \ - -DHAVE_DIX_CONFIG_H \ - $(XGLMODULES_CFLAGS) \ - -I$(top_srcdir)/glx \ - -I$(top_srcdir)/GL/include \ - -I$(top_srcdir)/hw/xgl \ - -I@MESA_SOURCE@/include \ - -I@MESA_SOURCE@/src/mesa/glapi - -libxglglxext_libraries = libxglglxext.la -libxglglxext_la_SOURCES = \ - xglglxext.h \ - xglglxext.c \ - xglglxlog.c - -noinst_LTLIBRARIES = $(libxglglxext_libraries) - diff --git a/hw/xgl/glxext/module/Makefile.am b/hw/xgl/glxext/module/Makefile.am deleted file mode 100644 index 67653cde4..000000000 --- a/hw/xgl/glxext/module/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -AM_CFLAGS = \ - $(DIX_CFLAGS) \ - -DHAVE_XGL_CONFIG_H \ - -DHAVE_DIX_CONFIG_H \ - $(XGLMODULES_CFLAGS) \ - -I$(top_srcdir)/hw/xgl - -libglx_la_LDFLAGS = -avoid-version -libglx_la_SOURCES = glxmodule.c -libglx_la_LIBADD = $(top_builddir)/glx/libglx.la -libglx_modules = libglx.la - -libglcore_la_LDFLAGS = -avoid-version -libglcore_la_SOURCES = glcoremodule.c -libglcore_la_LIBADD = $(top_builddir)/GL/mesa/libGLcore.la -libglcore_modules = libglcore.la - -moduledir = @XGL_MODULE_PATH@ - -module_LTLIBRARIES = \ - $(libglcore_modules) \ - $(libglx_modules) diff --git a/hw/xgl/glxext/module/glcoremodule.c b/hw/xgl/glxext/module/glcoremodule.c deleted file mode 100644 index 37aa9c658..000000000 --- a/hw/xgl/glxext/module/glcoremodule.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xglmodule.h" - -char * -moduleVersion (void) -{ - return VERSION; -} - -Bool -moduleInit (const char *module) -{ - return TRUE; -} diff --git a/hw/xgl/glxext/module/glxmodule.c b/hw/xgl/glxext/module/glxmodule.c deleted file mode 100644 index 37aa9c658..000000000 --- a/hw/xgl/glxext/module/glxmodule.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xglmodule.h" - -char * -moduleVersion (void) -{ - return VERSION; -} - -Bool -moduleInit (const char *module) -{ - return TRUE; -} diff --git a/hw/xgl/glxext/xglglxext.c b/hw/xgl/glxext/xglglxext.c deleted file mode 100644 index c260d8e2d..000000000 --- a/hw/xgl/glxext/xglglxext.c +++ /dev/null @@ -1,5772 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "xglglx.h" -#include "xglglxext.h" - -#include <GL/gl.h> -#include <GL/glext.h> -#include <GL/internal/glcore.h> - -#include "glxserver.h" -#include "glxdrawable.h" -#include "glxscreens.h" -#include "glxutil.h" -#include "unpack.h" -#include "g_disptab.h" -#include "glapitable.h" -#include "glxext.h" -#include "micmap.h" - -#define XGL_MAX_TEXTURE_UNITS 8 -#define XGL_MAX_ATTRIB_STACK_DEPTH 16 - -#define XGL_TEXTURE_1D_BIT (1 << 0) -#define XGL_TEXTURE_2D_BIT (1 << 1) -#define XGL_TEXTURE_3D_BIT (1 << 2) -#define XGL_TEXTURE_RECTANGLE_BIT (1 << 3) -#define XGL_TEXTURE_CUBE_MAP_BIT (1 << 4) - -typedef Bool (*GLXScreenProbeProc) (int screen); -typedef __GLinterface *(*GLXCreateContextProc) (__GLimports *imports, - __GLcontextModes *modes, - __GLinterface *shareGC); -typedef void (*GLXCreateBufferProc) (__GLXdrawablePrivate *glxPriv); -typedef GLboolean (*GLXSwapBuffersProc) (__GLXdrawablePrivate *glxPriv); -typedef int (*GLXBindBuffersProc) (__GLXdrawablePrivate *glxPriv, - int buffer); -typedef int (*GLXReleaseBuffersProc) (__GLXdrawablePrivate *glxPriv, - int buffer); - -typedef struct _xglGLXScreenInfo { - GLXScreenProbeProc screenProbe; - GLXCreateContextProc createContext; - GLXCreateBufferProc createBuffer; -} xglGLXScreenInfoRec, *xglGLXScreenInfoPtr; - -extern __GLXscreenInfo *__xglScreenInfoPtr; - -static xglGLXScreenInfoRec screenInfoPriv; - -//extern __GLXscreenInfo __glDDXScreenInfo; - -typedef GLboolean (*GLResizeBuffersProc) (__GLdrawableBuffer *buffer, - GLint x, - GLint y, - GLuint width, - GLuint height, - __GLdrawablePrivate *glPriv, - GLuint bufferMask); -typedef void (*GLFreeBuffersProc) (__GLdrawablePrivate *glPriv); - -typedef struct _xglGLBuffer { - GLXSwapBuffersProc swapBuffers; - GLXBindBuffersProc bindBuffers; - GLXReleaseBuffersProc releaseBuffers; - GLResizeBuffersProc resizeBuffers; - GLFreeBuffersProc freeBuffers; - ScreenPtr pScreen; - DrawablePtr pDrawable; - xglVisualPtr pVisual; - glitz_drawable_t *drawable; - glitz_surface_t *backSurface; - PixmapPtr pPixmap; - GCPtr pGC; - RegionRec damage; - void *private; - int screenX, screenY; - int xOff, yOff; - int yFlip; -} xglGLBufferRec, *xglGLBufferPtr; - -typedef int xglGLXVisualConfigRec, *xglGLXVisualConfigPtr; -typedef struct _xglDisplayList *xglDisplayListPtr; - -#define XGL_LIST_OP_CALLS 0 -#define XGL_LIST_OP_DRAW 1 -#define XGL_LIST_OP_GL 2 -#define XGL_LIST_OP_LIST 3 - -typedef struct _xglGLOp { - void (*glProc) (struct _xglGLOp *pOp); - union { - GLenum enumeration; - GLbitfield bitfield; - GLsizei size; - struct { - GLint x; - GLint y; - GLsizei width; - GLsizei height; - } rect; - struct { - GLenum target; - GLuint texture; - } bind_texture; - struct { - GLenum target; - GLenum pname; - GLfloat params[4]; - } tex_parameter_fv; - struct { - GLint x; - GLint y; - GLsizei width; - GLsizei height; - GLenum type; - } copy_pixels; - struct { - GLenum target; - GLint level; - GLenum internalformat; - GLint x; - GLint y; - GLsizei width; - GLint border; - } copy_tex_image_1d; - struct { - GLenum target; - GLint level; - GLenum internalformat; - GLint x; - GLint y; - GLsizei width; - GLsizei height; - GLint border; - } copy_tex_image_2d; - struct { - GLenum target; - GLint level; - GLint xoffset; - GLint x; - GLint y; - GLsizei width; - } copy_tex_sub_image_1d; - struct { - GLenum target; - GLint level; - GLint xoffset; - GLint yoffset; - GLint x; - GLint y; - GLsizei width; - GLsizei height; - } copy_tex_sub_image_2d; - struct { - GLenum target; - GLenum internalformat; - GLint x; - GLint y; - GLsizei width; - } copy_color_table; - struct { - GLenum target; - GLsizei start; - GLint x; - GLint y; - GLsizei width; - } copy_color_sub_table; - struct { - GLenum target; - GLenum internalformat; - GLint x; - GLint y; - GLsizei width; - } copy_convolution_filter_1d; - struct { - GLenum target; - GLenum internalformat; - GLint x; - GLint y; - GLsizei width; - GLsizei height; - } copy_convolution_filter_2d; - struct { - GLenum target; - GLint level; - GLint xoffset; - GLint yoffset; - GLint zoffset; - GLint x; - GLint y; - GLsizei width; - GLsizei height; - } copy_tex_sub_image_3d; - struct { - GLfloat x; - GLfloat y; - GLfloat z; - } window_pos_3f; - } u; -} xglGLOpRec, *xglGLOpPtr; - -typedef struct _xglListOp { - int type; - union { - GLuint list; - xglGLOpPtr gl; - } u; -} xglListOpRec, *xglListOpPtr; - -typedef struct _xglDisplayList { - xglListOpPtr pOp; - int nOp; - int size; -} xglDisplayListRec; - -typedef struct _xglTexObj { - GLuint key; - GLuint name; - PixmapPtr pPixmap; - glitz_texture_object_t *object; - int refcnt; -} xglTexObjRec, *xglTexObjPtr; - -typedef struct _xglTexUnit { - GLbitfield enabled; - xglTexObjPtr p1D; - xglTexObjPtr p2D; - xglTexObjPtr p3D; - xglTexObjPtr pRect; - xglTexObjPtr pCubeMap; -} xglTexUnitRec, *xglTexUnitPtr; - -typedef struct _xglGLAttributes { - GLbitfield mask; - GLenum drawBuffer; - GLenum readBuffer; - xRectangle viewport; - xRectangle scissor; - GLboolean scissorTest; - xglTexUnitRec texUnits[XGL_MAX_TEXTURE_UNITS]; -} xglGLAttributesRec, *xglGLAttributesPtr; - -typedef struct _xglGLContext { - __GLinterface iface; - __GLinterface *mIface; - int refcnt; - struct _xglGLContext *shared; - glitz_context_t *context; - struct _glapi_table glRenderTable; - PFNGLACTIVETEXTUREARBPROC ActiveTextureARB; - PFNGLWINDOWPOS3FMESAPROC WindowPos3fMESA; - Bool needInit; - xglGLBufferPtr pDrawBuffer; - xglGLBufferPtr pReadBuffer; - int drawXoff, drawYoff; - __GLdrawablePrivate *readPriv; - __GLdrawablePrivate *drawPriv; - char *versionString; - GLenum errorValue; - GLboolean doubleBuffer; - GLint depthBits; - GLint stencilBits; - xglHashTablePtr texObjects; - xglHashTablePtr displayLists; - GLuint list; - GLenum listMode; - GLuint beginCnt; - xglDisplayListPtr pList; - GLuint groupList; - xglGLAttributesRec attrib; - xglGLAttributesRec attribStack[XGL_MAX_ATTRIB_STACK_DEPTH]; - int nAttribStack; - int activeTexUnit; - GLint maxTexUnits; - GLint maxListNesting; - GLint maxAttribStackDepth; -} xglGLContextRec, *xglGLContextPtr; - -static xglGLContextPtr cctx = NULL; - -static void -xglSetCurrentContext (xglGLContextPtr pContext); - -#define XGL_GLX_DRAW_PROLOGUE_WITHOUT_TEXTURES(pBox, nBox, pScissorBox) \ - (pBox) = REGION_RECTS (cctx->pDrawBuffer->pGC->pCompositeClip); \ - (nBox) = REGION_NUM_RECTS (cctx->pDrawBuffer->pGC->pCompositeClip); \ - (pScissorBox)->x1 = cctx->attrib.scissor.x + cctx->pDrawBuffer->xOff; \ - (pScissorBox)->x2 = (pScissorBox)->x1 + cctx->attrib.scissor.width; \ - (pScissorBox)->y2 = cctx->attrib.scissor.y + cctx->pDrawBuffer->yOff; \ - (pScissorBox)->y2 = cctx->pDrawBuffer->yFlip - (pScissorBox)->y2; \ - (pScissorBox)->y1 = (pScissorBox)->y2 - cctx->attrib.scissor.height - -#define XGL_GLX_DRAW_PROLOGUE(pBox, nBox, pScissorBox) \ - XGL_GLX_DRAW_PROLOGUE_WITHOUT_TEXTURES (pBox, nBox, pScissorBox); \ - xglSetupTextures () - -#define XGL_GLX_DRAW_BOX(pBox1, pBox2) \ - (pBox1)->x1 = cctx->pDrawBuffer->screenX + (pBox2)->x1; \ - (pBox1)->y1 = cctx->pDrawBuffer->screenY + (pBox2)->y1; \ - (pBox1)->x2 = cctx->pDrawBuffer->screenX + (pBox2)->x2; \ - (pBox1)->y2 = cctx->pDrawBuffer->screenY + (pBox2)->y2 - -#define XGL_GLX_INTERSECT_BOX(pBox1, pBox2) \ - { \ - if ((pBox1)->x1 < (pBox2)->x1) \ - (pBox1)->x1 = (pBox2)->x1; \ - if ((pBox1)->y1 < (pBox2)->y1) \ - (pBox1)->y1 = (pBox2)->y1; \ - if ((pBox1)->x2 > (pBox2)->x2) \ - (pBox1)->x2 = (pBox2)->x2; \ - if ((pBox1)->y2 > (pBox2)->y2) \ - (pBox1)->y2 = (pBox2)->y2; \ - } - -#define XGL_GLX_SET_SCISSOR_BOX(pBox) \ - glScissor ((pBox)->x1, \ - cctx->pDrawBuffer->yFlip - (pBox)->y2, \ - (pBox)->x2 - (pBox)->x1, \ - (pBox)->y2 - (pBox)->y1) - -#define XGL_GLX_DRAW_DAMAGE(pBox, pRegion) \ - if (cctx->attrib.drawBuffer != GL_BACK) \ - { \ - (pRegion)->extents.x1 = (pBox)->x1 - cctx->pDrawBuffer->screenX; \ - (pRegion)->extents.y1 = (pBox)->y1 - cctx->pDrawBuffer->screenY; \ - (pRegion)->extents.x2 = (pBox)->x2 - cctx->pDrawBuffer->screenX; \ - (pRegion)->extents.y2 = (pBox)->y2 - cctx->pDrawBuffer->screenY; \ - (pRegion)->data = (RegDataPtr) NULL; \ - REGION_UNION (cctx->pDrawBuffer->pGC->pScreen, \ - &cctx->pDrawBuffer->damage, \ - &cctx->pDrawBuffer->damage, \ - pRegion); \ - xglAddBitDamage (cctx->pDrawBuffer->pDrawable, pRegion); \ - } - -static void -xglRecordError (GLenum error) -{ - if (cctx->errorValue == GL_NO_ERROR) - cctx->errorValue = error; -} - -static xglDisplayListPtr -xglCreateList (void) -{ - xglDisplayListPtr pDisplayList; - - pDisplayList = xalloc (sizeof (xglDisplayListRec)); - if (!pDisplayList) - return NULL; - - pDisplayList->pOp = NULL; - pDisplayList->nOp = 0; - pDisplayList->size = 0; - - return pDisplayList; -} - -static void -xglDestroyList (xglDisplayListPtr pDisplayList) -{ - xglListOpPtr pOp = pDisplayList->pOp; - int nOp = pDisplayList->nOp; - - while (nOp--) - { - switch (pOp->type) { - case XGL_LIST_OP_CALLS: - case XGL_LIST_OP_DRAW: - glDeleteLists (pOp->u.list, 1); - break; - case XGL_LIST_OP_GL: - xfree (pOp->u.gl); - break; - case XGL_LIST_OP_LIST: - break; - } - - pOp++; - } - - if (pDisplayList->pOp) - xfree (pDisplayList->pOp); - - xfree (pDisplayList); -} - -static Bool -xglResizeList (xglDisplayListPtr pDisplayList, - int nOp) -{ - if (pDisplayList->size < nOp) - { - int size = pDisplayList->nOp ? pDisplayList->nOp : 4; - - while (size < nOp) - size <<= 1; - - pDisplayList->pOp = xrealloc (pDisplayList->pOp, - sizeof (xglListOpRec) * size); - if (!pDisplayList->pOp) - return FALSE; - - pDisplayList->size = size; - } - - return TRUE; -} - -static void -xglStartList (int type, - GLenum mode) -{ - if (!xglResizeList (cctx->pList, cctx->pList->nOp + 1)) - { - xglRecordError (GL_OUT_OF_MEMORY); - return; - } - - cctx->pList->pOp[cctx->pList->nOp].type = type; - cctx->pList->pOp[cctx->pList->nOp].u.list = glGenLists (1); - - glNewList (cctx->pList->pOp[cctx->pList->nOp].u.list, mode); - - cctx->pList->nOp++; -} - -static void -xglGLOp (xglGLOpPtr pOp) -{ - if (cctx->list) - { - xglGLOpPtr pGLOp; - - pGLOp = xalloc (sizeof (xglGLOpRec)); - if (!pGLOp) - { - xglRecordError (GL_OUT_OF_MEMORY); - return; - } - - if (!xglResizeList (cctx->pList, cctx->pList->nOp + 1)) - { - xfree (pGLOp); - xglRecordError (GL_OUT_OF_MEMORY); - return; - } - - glEndList (); - - *pGLOp = *pOp; - - cctx->pList->pOp[cctx->pList->nOp].type = XGL_LIST_OP_GL; - cctx->pList->pOp[cctx->pList->nOp].u.gl = pGLOp; - cctx->pList->nOp++; - - if (cctx->listMode == GL_COMPILE_AND_EXECUTE) - (*pOp->glProc) (pOp); - - xglStartList (XGL_LIST_OP_CALLS, cctx->listMode); - } - else - (*pOp->glProc) (pOp); -} - -static void -xglViewportProc (xglGLOpPtr pOp) -{ - cctx->attrib.viewport.x = pOp->u.rect.x; - cctx->attrib.viewport.y = pOp->u.rect.y; - cctx->attrib.viewport.width = pOp->u.rect.width; - cctx->attrib.viewport.height = pOp->u.rect.height; - - glViewport (pOp->u.rect.x + cctx->pDrawBuffer->xOff, - pOp->u.rect.y + cctx->pDrawBuffer->yOff, - pOp->u.rect.width, - pOp->u.rect.height); -} - -static void -xglViewport (GLint x, - GLint y, - GLsizei width, - GLsizei height) -{ - xglGLOpRec gl; - - gl.glProc = xglViewportProc; - - gl.u.rect.x = x; - gl.u.rect.y = y; - gl.u.rect.width = width; - gl.u.rect.height = height; - - xglGLOp (&gl); -} - -static void -xglScissorProc (xglGLOpPtr pOp) -{ - cctx->attrib.scissor.x = pOp->u.rect.x; - cctx->attrib.scissor.y = pOp->u.rect.y; - cctx->attrib.scissor.width = pOp->u.rect.width; - cctx->attrib.scissor.height = pOp->u.rect.height; -} - -static void -xglScissor (GLint x, - GLint y, - GLsizei width, - GLsizei height) -{ - xglGLOpRec gl; - - gl.glProc = xglScissorProc; - - gl.u.rect.x = x; - gl.u.rect.y = y; - gl.u.rect.width = width; - gl.u.rect.height = height; - - xglGLOp (&gl); -} - -static void -xglDrawBufferProc (xglGLOpPtr pOp) -{ - glitz_drawable_buffer_t buffers[2]; - - switch (pOp->u.enumeration) { - case GL_FRONT: - buffers[0] = GLITZ_DRAWABLE_BUFFER_FRONT_COLOR; - glitz_context_draw_buffers (cctx->context, buffers, 1); - break; - case GL_FRONT_AND_BACK: - buffers[0] = GLITZ_DRAWABLE_BUFFER_FRONT_COLOR; - if (cctx->doubleBuffer) - { - buffers[1] = GLITZ_DRAWABLE_BUFFER_BACK_COLOR; - glitz_context_draw_buffers (cctx->context, buffers, 2); - } - else - glitz_context_draw_buffers (cctx->context, buffers, 1); - break; - case GL_BACK: - if (!cctx->doubleBuffer) - { - xglRecordError (GL_INVALID_OPERATION); - return; - } - buffers[0] = GLITZ_DRAWABLE_BUFFER_BACK_COLOR; - glitz_context_draw_buffers (cctx->context, buffers, 1); - break; - default: - xglRecordError (GL_INVALID_ENUM); - return; - } - - cctx->attrib.drawBuffer = pOp->u.enumeration; -} - -static void -xglDrawBuffer (GLenum mode) -{ - xglGLOpRec gl; - - gl.glProc = xglDrawBufferProc; - - gl.u.enumeration = mode; - - xglGLOp (&gl); -} - -static void -xglReadBufferProc (xglGLOpPtr pOp) -{ - switch (pOp->u.enumeration) { - case GL_FRONT: - glitz_context_read_buffer (cctx->context, - GLITZ_DRAWABLE_BUFFER_FRONT_COLOR); - break; - case GL_BACK: - if (!cctx->doubleBuffer) - { - xglRecordError (GL_INVALID_OPERATION); - return; - } - glitz_context_read_buffer (cctx->context, - GLITZ_DRAWABLE_BUFFER_BACK_COLOR); - break; - default: - xglRecordError (GL_INVALID_ENUM); - return; - } - - cctx->attrib.readBuffer = pOp->u.enumeration; -} - -static void -xglReadBuffer (GLenum mode) -{ - xglGLOpRec gl; - - gl.glProc = xglReadBufferProc; - - gl.u.enumeration = mode; - - xglGLOp (&gl); -} - -static void -xglDisableProc (xglGLOpPtr pOp) -{ - xglTexUnitPtr pTexUnit = &cctx->attrib.texUnits[cctx->activeTexUnit]; - - switch (pOp->u.enumeration) { - case GL_SCISSOR_TEST: - cctx->attrib.scissorTest = GL_FALSE; - return; - case GL_TEXTURE_1D: - pTexUnit->enabled &= ~XGL_TEXTURE_1D_BIT; - break; - case GL_TEXTURE_2D: - pTexUnit->enabled &= ~XGL_TEXTURE_2D_BIT; - break; - case GL_TEXTURE_3D: - pTexUnit->enabled &= ~XGL_TEXTURE_3D_BIT; - break; - case GL_TEXTURE_RECTANGLE_NV: - pTexUnit->enabled &= ~XGL_TEXTURE_RECTANGLE_BIT; - break; - case GL_TEXTURE_CUBE_MAP_ARB: - pTexUnit->enabled &= ~XGL_TEXTURE_CUBE_MAP_BIT; - break; - default: - break; - } - - glDisable (pOp->u.enumeration); -} - -static void -xglDisable (GLenum cap) -{ - xglGLOpRec gl; - - gl.glProc = xglDisableProc; - - gl.u.enumeration = cap; - - xglGLOp (&gl); -} - -static void -xglEnableProc (xglGLOpPtr pOp) -{ - xglTexUnitPtr pTexUnit = &cctx->attrib.texUnits[cctx->activeTexUnit]; - - switch (pOp->u.enumeration) { - case GL_SCISSOR_TEST: - cctx->attrib.scissorTest = GL_TRUE; - return; - case GL_DEPTH_TEST: - if (!cctx->depthBits) - return; - case GL_STENCIL_TEST: - if (!cctx->stencilBits) - return; - case GL_TEXTURE_1D: - pTexUnit->enabled |= XGL_TEXTURE_1D_BIT; - break; - case GL_TEXTURE_2D: - pTexUnit->enabled |= XGL_TEXTURE_2D_BIT; - break; - case GL_TEXTURE_3D: - pTexUnit->enabled |= XGL_TEXTURE_3D_BIT; - break; - case GL_TEXTURE_RECTANGLE_NV: - pTexUnit->enabled |= XGL_TEXTURE_RECTANGLE_BIT; - break; - case GL_TEXTURE_CUBE_MAP_ARB: - pTexUnit->enabled |= XGL_TEXTURE_CUBE_MAP_BIT; - break; - default: - break; - } - - glEnable (pOp->u.enumeration); -} - -static void -xglEnable (GLenum cap) -{ - xglGLOpRec gl; - - gl.glProc = xglEnableProc; - - gl.u.enumeration = cap; - - xglGLOp (&gl); -} - -static void -xglDeleteTexObj (xglTexObjPtr pTexObj) -{ - if (pTexObj->pPixmap) - { - ScreenPtr pScreen = pTexObj->pPixmap->drawable.pScreen; - - (*pScreen->DestroyPixmap) (pTexObj->pPixmap); - - glitz_texture_object_destroy (pTexObj->object); - } - - if (pTexObj->name) - { - glDeleteTextures (1, &pTexObj->name); - } - - pTexObj->key = 0; - pTexObj->name = 0; - pTexObj->pPixmap = NULL; - pTexObj->object = NULL; -} - -static void -xglRefTexObj (xglTexObjPtr pTexObj) -{ - if (!pTexObj) - return; - - pTexObj->refcnt++; -} - -static void -xglUnrefTexObj (xglTexObjPtr pTexObj) -{ - if (!pTexObj) - return; - - pTexObj->refcnt--; - if (pTexObj->refcnt) - return; - - xglDeleteTexObj (pTexObj); - - xfree (pTexObj); -} - -static void -xglPushAttribProc (xglGLOpPtr pOp) -{ - xglGLAttributesPtr pAttrib; - - if (cctx->nAttribStack == cctx->maxAttribStackDepth) - { - xglRecordError (GL_STACK_OVERFLOW); - return; - } - - pAttrib = &cctx->attribStack[cctx->nAttribStack]; - - *pAttrib = cctx->attrib; - pAttrib->mask = pOp->u.bitfield; - - if (pOp->u.bitfield & GL_TEXTURE_BIT) - { - int i; - - for (i = 0; i < cctx->maxTexUnits; i++) - { - xglRefTexObj (pAttrib->texUnits[i].p1D); - xglRefTexObj (pAttrib->texUnits[i].p2D); - xglRefTexObj (pAttrib->texUnits[i].p3D); - xglRefTexObj (pAttrib->texUnits[i].pRect); - xglRefTexObj (pAttrib->texUnits[i].pCubeMap); - } - } - - cctx->nAttribStack++; - - glPushAttrib (pOp->u.bitfield); -} - -static void -xglPushAttrib (GLbitfield mask) -{ - xglGLOpRec gl; - - gl.glProc = xglPushAttribProc; - - gl.u.bitfield = mask; - - xglGLOp (&gl); -} - -static void -xglPopAttribProc (xglGLOpPtr pOp) -{ - xglGLAttributesPtr pAttrib; - GLbitfield mask; - - if (!cctx->nAttribStack) - { - xglRecordError (GL_STACK_UNDERFLOW); - return; - } - - cctx->nAttribStack--; - - pAttrib = &cctx->attribStack[cctx->nAttribStack]; - mask = pAttrib->mask; - - if (mask & GL_COLOR_BUFFER_BIT) - xglDrawBuffer (pAttrib->drawBuffer); - - if (mask & GL_PIXEL_MODE_BIT) - xglReadBuffer (pAttrib->readBuffer); - - if (mask & GL_SCISSOR_BIT) - { - xglScissor (pAttrib->scissor.x, - pAttrib->scissor.y, - pAttrib->scissor.width, - pAttrib->scissor.height); - - if (pAttrib->scissorTest) - xglEnable (GL_SCISSOR_TEST); - else - xglDisable (GL_SCISSOR_TEST); - } - else if (mask & GL_ENABLE_BIT) - { - if (pAttrib->scissorTest) - xglEnable (GL_SCISSOR_TEST); - else - xglDisable (GL_SCISSOR_TEST); - } - - if (mask & GL_VIEWPORT_BIT) - xglViewport (pAttrib->viewport.x, - pAttrib->viewport.y, - pAttrib->viewport.width, - pAttrib->viewport.height); - - if (mask & GL_TEXTURE_BIT) - { - int i; - - for (i = 0; i < cctx->maxTexUnits; i++) - { - xglUnrefTexObj (cctx->attrib.texUnits[i].p1D); - xglUnrefTexObj (cctx->attrib.texUnits[i].p2D); - xglUnrefTexObj (cctx->attrib.texUnits[i].p3D); - xglUnrefTexObj (cctx->attrib.texUnits[i].pRect); - xglUnrefTexObj (cctx->attrib.texUnits[i].pCubeMap); - - cctx->attrib.texUnits[i] = pAttrib->texUnits[i]; - } - } - else if (mask & GL_ENABLE_BIT) - { - int i; - - for (i = 0; i < cctx->maxTexUnits; i++) - cctx->attrib.texUnits[i].enabled = pAttrib->texUnits[i].enabled; - } - - glPopAttrib (); -} - -static void -xglPopAttrib (void) -{ - xglGLOpRec gl; - - gl.glProc = xglPopAttribProc; - - xglGLOp (&gl); -} - -static GLuint -xglActiveTextureBinding (GLenum target) -{ - xglTexObjPtr pTexObj; - - switch (target) { - case GL_TEXTURE_BINDING_1D: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].p1D; - break; - case GL_TEXTURE_BINDING_2D: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].p2D; - break; - case GL_TEXTURE_BINDING_3D: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].p3D; - break; - case GL_TEXTURE_BINDING_RECTANGLE_NV: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].pRect; - break; - case GL_TEXTURE_BINDING_CUBE_MAP_ARB: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].pCubeMap; - break; - default: - return 0; - } - - if (pTexObj) - return pTexObj->key; - - return 0; -} - -#define DOUBLE_TO_BOOLEAN(X) ((X) ? GL_TRUE : GL_FALSE) -#define INT_TO_BOOLEAN(I) ((I) ? GL_TRUE : GL_FALSE) -#define ENUM_TO_BOOLEAN(E) ((E) ? GL_TRUE : GL_FALSE) - -static void -xglGetBooleanv (GLenum pname, - GLboolean *params) -{ - switch (pname) { - case GL_CURRENT_RASTER_POSITION: - { - GLdouble v[4]; - - glGetDoublev (GL_CURRENT_RASTER_POSITION, v); - - params[0] = DOUBLE_TO_BOOLEAN (v[0] - (GLdouble) cctx->drawXoff); - params[1] = DOUBLE_TO_BOOLEAN (v[1] - (GLdouble) cctx->drawYoff); - params[2] = DOUBLE_TO_BOOLEAN (v[2]); - params[3] = DOUBLE_TO_BOOLEAN (v[3]); - } break; - case GL_DOUBLEBUFFER: - params[0] = cctx->doubleBuffer; - break; - case GL_DEPTH_BITS: - params[0] = INT_TO_BOOLEAN (cctx->depthBits); - break; - case GL_STENCIL_BITS: - params[0] = INT_TO_BOOLEAN (cctx->stencilBits); - break; - case GL_DRAW_BUFFER: - params[0] = ENUM_TO_BOOLEAN (cctx->attrib.drawBuffer); - break; - case GL_READ_BUFFER: - params[0] = ENUM_TO_BOOLEAN (cctx->attrib.readBuffer); - break; - case GL_SCISSOR_BOX: - params[0] = INT_TO_BOOLEAN (cctx->attrib.scissor.x); - params[1] = INT_TO_BOOLEAN (cctx->attrib.scissor.y); - params[2] = INT_TO_BOOLEAN (cctx->attrib.scissor.width); - params[3] = INT_TO_BOOLEAN (cctx->attrib.scissor.height); - break; - case GL_SCISSOR_TEST: - params[0] = cctx->attrib.scissorTest; - break; - case GL_VIEWPORT: - params[0] = INT_TO_BOOLEAN (cctx->attrib.viewport.x); - params[1] = INT_TO_BOOLEAN (cctx->attrib.viewport.y); - params[2] = INT_TO_BOOLEAN (cctx->attrib.viewport.width); - params[3] = INT_TO_BOOLEAN (cctx->attrib.viewport.height); - break; - case GL_TEXTURE_BINDING_1D: - case GL_TEXTURE_BINDING_2D: - case GL_TEXTURE_BINDING_3D: - case GL_TEXTURE_BINDING_RECTANGLE_NV: - case GL_TEXTURE_BINDING_CUBE_MAP_ARB: - /* should be safe to fall-through here */ - default: - glGetBooleanv (pname, params); - } -} - -#define INT_TO_DOUBLE(I) ((GLdouble) (I)) -#define ENUM_TO_DOUBLE(E) ((GLdouble) (E)) -#define BOOLEAN_TO_DOUBLE(B) ((B) ? 1.0F : 0.0F) - -static void -xglGetDoublev (GLenum pname, - GLdouble *params) -{ - switch (pname) { - case GL_CURRENT_RASTER_POSITION: - glGetDoublev (GL_CURRENT_RASTER_POSITION, params); - - params[0] -= (GLdouble) cctx->drawXoff; - params[1] -= (GLdouble) cctx->drawYoff; - break; - case GL_DOUBLEBUFFER: - params[0] = BOOLEAN_TO_DOUBLE (cctx->doubleBuffer); - break; - case GL_DEPTH_BITS: - params[0] = INT_TO_DOUBLE (cctx->depthBits); - break; - case GL_STENCIL_BITS: - params[0] = INT_TO_DOUBLE (cctx->stencilBits); - break; - case GL_DRAW_BUFFER: - params[0] = ENUM_TO_DOUBLE (cctx->attrib.drawBuffer); - break; - case GL_READ_BUFFER: - params[0] = ENUM_TO_DOUBLE (cctx->attrib.readBuffer); - break; - case GL_SCISSOR_BOX: - params[0] = cctx->attrib.scissor.x; - params[1] = cctx->attrib.scissor.y; - params[2] = cctx->attrib.scissor.width; - params[3] = cctx->attrib.scissor.height; - break; - case GL_SCISSOR_TEST: - params[0] = BOOLEAN_TO_DOUBLE (cctx->attrib.scissorTest); - break; - case GL_VIEWPORT: - params[0] = cctx->attrib.viewport.x; - params[1] = cctx->attrib.viewport.y; - params[2] = cctx->attrib.viewport.width; - params[3] = cctx->attrib.viewport.height; - break; - case GL_TEXTURE_BINDING_1D: - case GL_TEXTURE_BINDING_2D: - case GL_TEXTURE_BINDING_3D: - case GL_TEXTURE_BINDING_RECTANGLE_NV: - case GL_TEXTURE_BINDING_CUBE_MAP_ARB: - params[0] = xglActiveTextureBinding (pname); - break; - case GL_MAX_TEXTURE_UNITS_ARB: - params[0] = cctx->maxTexUnits; - break; - case GL_MAX_ATTRIB_STACK_DEPTH: - params[0] = cctx->maxAttribStackDepth; - break; - default: - glGetDoublev (pname, params); - } -} - -#define INT_TO_FLOAT(I) ((GLfloat) (I)) -#define ENUM_TO_FLOAT(E) ((GLfloat) (E)) -#define BOOLEAN_TO_FLOAT(B) ((B) ? 1.0F : 0.0F) - -static void -xglGetFloatv (GLenum pname, - GLfloat *params) -{ - switch (pname) { - case GL_CURRENT_RASTER_POSITION: - glGetFloatv (GL_CURRENT_RASTER_POSITION, params); - - params[0] -= (GLfloat) cctx->drawXoff; - params[1] -= (GLfloat) cctx->drawYoff; - break; - case GL_DOUBLEBUFFER: - params[0] = BOOLEAN_TO_FLOAT (cctx->doubleBuffer); - break; - case GL_DEPTH_BITS: - params[0] = INT_TO_FLOAT (cctx->depthBits); - break; - case GL_STENCIL_BITS: - params[0] = INT_TO_FLOAT (cctx->stencilBits); - break; - case GL_DRAW_BUFFER: - params[0] = ENUM_TO_FLOAT (cctx->attrib.drawBuffer); - break; - case GL_READ_BUFFER: - params[0] = ENUM_TO_FLOAT (cctx->attrib.readBuffer); - break; - case GL_SCISSOR_BOX: - params[0] = cctx->attrib.scissor.x; - params[1] = cctx->attrib.scissor.y; - params[2] = cctx->attrib.scissor.width; - params[3] = cctx->attrib.scissor.height; - break; - case GL_SCISSOR_TEST: - params[0] = BOOLEAN_TO_FLOAT (cctx->attrib.scissorTest); - break; - case GL_VIEWPORT: - params[0] = cctx->attrib.viewport.x; - params[1] = cctx->attrib.viewport.y; - params[2] = cctx->attrib.viewport.width; - params[3] = cctx->attrib.viewport.height; - break; - case GL_TEXTURE_BINDING_1D: - case GL_TEXTURE_BINDING_2D: - case GL_TEXTURE_BINDING_3D: - case GL_TEXTURE_BINDING_RECTANGLE_NV: - case GL_TEXTURE_BINDING_CUBE_MAP_ARB: - params[0] = xglActiveTextureBinding (pname); - break; - case GL_MAX_TEXTURE_UNITS_ARB: - params[0] = cctx->maxTexUnits; - break; - case GL_MAX_ATTRIB_STACK_DEPTH: - params[0] = cctx->maxAttribStackDepth; - break; - default: - glGetFloatv (pname, params); - } -} - -#define ENUM_TO_INT(E) ((GLint) (E)) -#define BOOLEAN_TO_INT(B) ((GLint) (B)) - -static void -xglGetIntegerv (GLenum pname, - GLint *params) -{ - switch (pname) { - case GL_CURRENT_RASTER_POSITION: - glGetIntegerv (GL_CURRENT_RASTER_POSITION, params); - - params[0] -= (GLint) cctx->drawXoff; - params[1] -= (GLint) cctx->drawYoff; - break; - case GL_DOUBLEBUFFER: - params[0] = BOOLEAN_TO_INT (cctx->doubleBuffer); - break; - case GL_DEPTH_BITS: - params[0] = cctx->depthBits; - break; - case GL_STENCIL_BITS: - params[0] = cctx->stencilBits; - break; - case GL_DRAW_BUFFER: - params[0] = ENUM_TO_INT (cctx->attrib.drawBuffer); - break; - case GL_READ_BUFFER: - params[0] = ENUM_TO_INT (cctx->attrib.readBuffer); - break; - case GL_SCISSOR_BOX: - params[0] = cctx->attrib.scissor.x; - params[1] = cctx->attrib.scissor.y; - params[2] = cctx->attrib.scissor.width; - params[3] = cctx->attrib.scissor.height; - break; - case GL_SCISSOR_TEST: - params[0] = BOOLEAN_TO_INT (cctx->attrib.scissorTest); - break; - case GL_VIEWPORT: - params[0] = cctx->attrib.viewport.x; - params[1] = cctx->attrib.viewport.y; - params[2] = cctx->attrib.viewport.width; - params[3] = cctx->attrib.viewport.height; - break; - case GL_TEXTURE_BINDING_1D: - case GL_TEXTURE_BINDING_2D: - case GL_TEXTURE_BINDING_3D: - case GL_TEXTURE_BINDING_RECTANGLE_NV: - case GL_TEXTURE_BINDING_CUBE_MAP_ARB: - params[0] = xglActiveTextureBinding (pname); - break; - case GL_MAX_TEXTURE_UNITS_ARB: - params[0] = cctx->maxTexUnits; - break; - case GL_MAX_ATTRIB_STACK_DEPTH: - params[0] = cctx->maxAttribStackDepth; - break; - default: - glGetIntegerv (pname, params); - } -} - -static GLboolean -xglIsEnabled (GLenum cap) -{ - switch (cap) { - case GL_SCISSOR_TEST: - return cctx->attrib.scissorTest; - default: - return glIsEnabled (cap); - } -} - -static GLenum -xglGetError (void) -{ - GLenum error = cctx->errorValue; - - if (error != GL_NO_ERROR) - { - cctx->errorValue = GL_NO_ERROR; - return error; - } - - return glGetError (); -} - -static const GLubyte * -xglGetString (GLenum name) -{ - switch (name) { - case GL_VERSION: - if (!cctx->versionString) - { - static char *version = "1.2 (%s)"; - char *nativeVersion = (char *) glGetString (GL_VERSION); - - cctx->versionString = xalloc (strlen (version) + - strlen (nativeVersion)); - if (cctx->versionString) - sprintf (cctx->versionString, version, nativeVersion); - } - return (GLubyte *) cctx->versionString; - default: - return glGetString (name); - } -} - -static void -xglGenTextures (GLsizei n, - GLuint *textures) -{ - xglTexObjPtr pTexObj; - GLuint name; - - name = xglHashFindFreeKeyBlock (cctx->shared->texObjects, n); - - glGenTextures (n, textures); - - while (n--) - { - pTexObj = xalloc (sizeof (xglTexObjRec)); - if (pTexObj) - { - pTexObj->key = name; - pTexObj->name = *textures; - pTexObj->pPixmap = NULL; - pTexObj->object = NULL; - pTexObj->refcnt = 1; - - xglHashInsert (cctx->shared->texObjects, name, pTexObj); - } - else - { - xglRecordError (GL_OUT_OF_MEMORY); - } - - *textures++ = name++; - } -} - -static void -xglBindTextureProc (xglGLOpPtr pOp) -{ - xglTexObjPtr *ppTexObj; - - switch (pOp->u.bind_texture.target) { - case GL_TEXTURE_1D: - ppTexObj = &cctx->attrib.texUnits[cctx->activeTexUnit].p1D; - break; - case GL_TEXTURE_2D: - ppTexObj = &cctx->attrib.texUnits[cctx->activeTexUnit].p2D; - break; - case GL_TEXTURE_3D: - ppTexObj = &cctx->attrib.texUnits[cctx->activeTexUnit].p3D; - break; - case GL_TEXTURE_RECTANGLE_NV: - ppTexObj = &cctx->attrib.texUnits[cctx->activeTexUnit].pRect; - break; - case GL_TEXTURE_CUBE_MAP_ARB: - ppTexObj = &cctx->attrib.texUnits[cctx->activeTexUnit].pCubeMap; - break; - default: - xglRecordError (GL_INVALID_ENUM); - return; - } - - if (pOp->u.bind_texture.texture) - { - if (!*ppTexObj || pOp->u.bind_texture.texture != (*ppTexObj)->key) - { - xglTexObjPtr pTexObj; - - pTexObj = (xglTexObjPtr) - xglHashLookup (cctx->shared->texObjects, - pOp->u.bind_texture.texture); - if (!pTexObj) - { - pTexObj = xalloc (sizeof (xglTexObjRec)); - if (!pTexObj) - { - xglRecordError (GL_OUT_OF_MEMORY); - return; - } - - pTexObj->key = pOp->u.bind_texture.texture; - pTexObj->pPixmap = NULL; - pTexObj->object = NULL; - pTexObj->refcnt = 1; - - glGenTextures (1, &pTexObj->name); - - xglHashInsert (cctx->shared->texObjects, - pOp->u.bind_texture.texture, - pTexObj); - } - - xglRefTexObj (pTexObj); - xglUnrefTexObj (*ppTexObj); - *ppTexObj = pTexObj; - - glBindTexture (pOp->u.bind_texture.target, pTexObj->name); - } - } - else - { - xglUnrefTexObj (*ppTexObj); - *ppTexObj = NULL; - - glBindTexture (pOp->u.bind_texture.target, 0); - } -} - -static void -xglBindTexture (GLenum target, - GLuint texture) -{ - xglGLOpRec gl; - - gl.glProc = xglBindTextureProc; - - gl.u.bind_texture.target = target; - gl.u.bind_texture.texture = texture; - - xglGLOp (&gl); -} - -static void -xglSetupTextures (void) -{ - xglGLContextPtr pContext = cctx; - xglTexUnitPtr pTexUnit; - xglTexObjPtr pTexObj[XGL_MAX_TEXTURE_UNITS]; - int i, activeTexUnit; - - for (i = 0; i < pContext->maxTexUnits; i++) - { - pTexObj[i] = NULL; - - pTexUnit = &pContext->attrib.texUnits[i]; - if (pTexUnit->enabled) - { - if (pTexUnit->enabled & XGL_TEXTURE_RECTANGLE_BIT) - pTexObj[i] = pTexUnit->pRect; - else if (pTexUnit->enabled & XGL_TEXTURE_2D_BIT) - pTexObj[i] = pTexUnit->p2D; - - if (pTexObj[i] && pTexObj[i]->pPixmap) - { - if (!xglSyncSurface (&pTexObj[i]->pPixmap->drawable)) - pTexObj[i] = NULL; - } - else - pTexObj[i] = NULL; - } - } - - if (pContext != cctx) - { - XGL_SCREEN_PRIV (pContext->pDrawBuffer->pGC->pScreen); - - glitz_drawable_finish (pScreenPriv->drawable); - - xglSetCurrentContext (pContext); - } - - activeTexUnit = cctx->activeTexUnit; - for (i = 0; i < pContext->maxTexUnits; i++) - { - if (pTexObj[i]) - { - if (i != activeTexUnit) - { - cctx->ActiveTextureARB (GL_TEXTURE0_ARB + i); - activeTexUnit = i; - } - glitz_context_bind_texture (cctx->context, pTexObj[i]->object); - } - } - - if (activeTexUnit != cctx->activeTexUnit) - cctx->ActiveTextureARB (cctx->activeTexUnit); -} - -static GLboolean -xglAreTexturesResident (GLsizei n, - const GLuint *textures, - GLboolean *residences) -{ - GLboolean allResident = GL_TRUE; - int i, j; - - if (n < 0) - { - xglRecordError (GL_INVALID_VALUE); - return GL_FALSE; - } - - if (!textures || !residences) - return GL_FALSE; - - for (i = 0; i < n; i++) - { - xglTexObjPtr pTexObj; - GLboolean resident; - - if (!textures[i]) - { - xglRecordError (GL_INVALID_VALUE); - return GL_FALSE; - } - - pTexObj = (xglTexObjPtr) xglHashLookup (cctx->shared->texObjects, - textures[i]); - if (!pTexObj) - { - xglRecordError (GL_INVALID_VALUE); - return GL_FALSE; - } - - if (pTexObj->name == 0 || - glAreTexturesResident (1, &pTexObj->name, &resident)) - { - if (!allResident) - residences[i] = GL_TRUE; - } - else - { - if (allResident) - { - allResident = GL_FALSE; - - for (j = 0; j < i; j++) - residences[j] = GL_TRUE; - } - residences[i] = GL_FALSE; - } - } - - return allResident; -} - -static void -xglDeleteTextures (GLsizei n, - const GLuint *textures) -{ - xglTexObjPtr pTexObj; - - while (n--) - { - if (!*textures) - continue; - - pTexObj = (xglTexObjPtr) xglHashLookup (cctx->shared->texObjects, - *textures); - if (pTexObj) - { - xglDeleteTexObj (pTexObj); - xglUnrefTexObj (pTexObj); - xglHashRemove (cctx->shared->texObjects, *textures); - } - textures++; - } -} - -static GLboolean -xglIsTexture (GLuint texture) -{ - xglTexObjPtr pTexObj; - - if (!texture) - return GL_FALSE; - - pTexObj = (xglTexObjPtr) xglHashLookup (cctx->shared->texObjects, texture); - if (pTexObj) - return GL_TRUE; - - return GL_FALSE; -} - -static void -xglPrioritizeTextures (GLsizei n, - const GLuint *textures, - const GLclampf *priorities) -{ - xglTexObjPtr pTexObj; - int i; - - if (n < 0) - { - xglRecordError (GL_INVALID_VALUE); - return; - } - - if (!priorities) - return; - - for (i = 0; i < n; i++) - { - if (!textures[i]) - continue; - - pTexObj = (xglTexObjPtr) xglHashLookup (cctx->shared->texObjects, - textures[i]); - if (pTexObj && pTexObj->name) - glPrioritizeTextures (1, &pTexObj->name, &priorities[i]); - } -} - -static glitz_texture_filter_t -xglTextureFilter (GLenum param) -{ - switch (param) { - case GL_LINEAR: - return GLITZ_TEXTURE_FILTER_LINEAR; - case GL_NEAREST: - default: - return GLITZ_TEXTURE_FILTER_NEAREST; - } -} - -static glitz_texture_wrap_t -xglTextureWrap (GLenum param) -{ - switch (param) { - case GL_CLAMP_TO_EDGE: - return GLITZ_TEXTURE_WRAP_CLAMP_TO_EDGE; - case GL_CLAMP_TO_BORDER: - return GLITZ_TEXTURE_WRAP_CLAMP_TO_BORDER; - case GL_REPEAT: - return GLITZ_TEXTURE_WRAP_REPEAT; - case GL_MIRRORED_REPEAT: - return GLITZ_TEXTURE_WRAP_MIRRORED_REPEAT; - case GL_CLAMP: - default: - return GLITZ_TEXTURE_WRAP_CLAMP; - } -} - -static void -xglTexParameterfvProc (xglGLOpPtr pOp) -{ - xglTexObjPtr pTexObj; - - glTexParameterfv (pOp->u.tex_parameter_fv.target, - pOp->u.tex_parameter_fv.pname, - pOp->u.tex_parameter_fv.params); - - switch (pOp->u.tex_parameter_fv.target) { - case GL_TEXTURE_2D: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].p2D; - break; - case GL_TEXTURE_RECTANGLE_NV: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].pRect; - break; - default: - pTexObj = NULL; - break; - } - - if (pTexObj && pTexObj->pPixmap) - { - GLfloat *params = pOp->u.tex_parameter_fv.params; - - switch (pOp->u.tex_parameter_fv.pname) { - case GL_TEXTURE_MIN_FILTER: - glitz_texture_object_set_filter (pTexObj->object, - GLITZ_TEXTURE_FILTER_TYPE_MIN, - xglTextureFilter (params[0])); - break; - case GL_TEXTURE_MAG_FILTER: - glitz_texture_object_set_filter (pTexObj->object, - GLITZ_TEXTURE_FILTER_TYPE_MAG, - xglTextureFilter (params[0])); - break; - case GL_TEXTURE_WRAP_S: - glitz_texture_object_set_wrap (pTexObj->object, - GLITZ_TEXTURE_WRAP_TYPE_S, - xglTextureWrap (params[0])); - break; - case GL_TEXTURE_WRAP_T: - glitz_texture_object_set_wrap (pTexObj->object, - GLITZ_TEXTURE_WRAP_TYPE_T, - xglTextureWrap (params[0])); - break; - case GL_TEXTURE_BORDER_COLOR: { - glitz_color_t color; - - color.red = params[0] * 0xffff; - color.green = params[1] * 0xffff; - color.blue = params[2] * 0xffff; - color.alpha = params[3] * 0xffff; - - glitz_texture_object_set_border_color (pTexObj->object, &color); - } - default: - break; - } - } -} - -static void -xglTexParameterfv (GLenum target, - GLenum pname, - const GLfloat *params) -{ - xglGLOpRec gl; - - gl.glProc = xglTexParameterfvProc; - - gl.u.tex_parameter_fv.target = target; - gl.u.tex_parameter_fv.pname = pname; - - switch (pname) { - case GL_TEXTURE_BORDER_COLOR: - gl.u.tex_parameter_fv.params[3] = params[3]; - gl.u.tex_parameter_fv.params[2] = params[2]; - gl.u.tex_parameter_fv.params[1] = params[1]; - /* fall-through */ - default: - gl.u.tex_parameter_fv.params[0] = params[0]; - break; - } - - xglGLOp (&gl); -} - -static void -xglTexParameteriv (GLenum target, - GLenum pname, - const GLint *params) -{ - xglGLOpRec gl; - - gl.glProc = xglTexParameterfvProc; - - gl.u.tex_parameter_fv.target = target; - gl.u.tex_parameter_fv.pname = pname; - - switch (pname) { - case GL_TEXTURE_BORDER_COLOR: - gl.u.tex_parameter_fv.params[3] = (GLfloat) params[3] / INT_MAX; - gl.u.tex_parameter_fv.params[2] = (GLfloat) params[2] / INT_MAX; - gl.u.tex_parameter_fv.params[1] = (GLfloat) params[1] / INT_MAX; - gl.u.tex_parameter_fv.params[0] = (GLfloat) params[0] / INT_MAX; - break; - default: - gl.u.tex_parameter_fv.params[0] = params[0]; - break; - } - - xglGLOp (&gl); -} - -static void -xglTexParameterf (GLenum target, - GLenum pname, - GLfloat param) -{ - xglTexParameterfv (target, pname, (const GLfloat *) ¶m); -} - -static void -xglTexParameteri (GLenum target, - GLenum pname, - GLint param) -{ - xglTexParameteriv (target, pname, (const GLint *) ¶m); -} - -static void -xglGetTexLevelParameterfv (GLenum target, - GLint level, - GLenum pname, - GLfloat *params) -{ - xglTexObjPtr pTexObj; - - switch (target) { - case GL_TEXTURE_2D: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].p2D; - break; - case GL_TEXTURE_RECTANGLE_NV: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].pRect; - break; - default: - pTexObj = NULL; - break; - } - - if (pTexObj && pTexObj->pPixmap) - { - glitz_context_bind_texture (cctx->context, pTexObj->object); - - glGetTexLevelParameterfv (target, level, pname, params); - glBindTexture (target, pTexObj->name); - } - else - glGetTexLevelParameterfv (target, level, pname, params); -} - -static void -xglGetTexLevelParameteriv (GLenum target, - GLint level, - GLenum pname, - GLint *params) -{ - xglTexObjPtr pTexObj; - - switch (target) { - case GL_TEXTURE_2D: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].p2D; - break; - case GL_TEXTURE_RECTANGLE_NV: - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].pRect; - break; - default: - pTexObj = NULL; - break; - } - - if (pTexObj && pTexObj->pPixmap) - { - glitz_context_bind_texture (cctx->context, pTexObj->object); - - glGetTexLevelParameteriv (target, level, pname, params); - glBindTexture (target, pTexObj->name); - } - else - glGetTexLevelParameteriv (target, level, pname, params); -} - -static GLuint -xglGenLists (GLsizei range) -{ - xglDisplayListPtr pDisplayList; - GLuint first, name; - - first = xglHashFindFreeKeyBlock (cctx->shared->displayLists, range); - - name = first; - for (name = first; range--; name++) - { - pDisplayList = xglCreateList (); - if (pDisplayList) - { - xglHashInsert (cctx->shared->displayLists, name, pDisplayList); - } - else - { - xglRecordError (GL_OUT_OF_MEMORY); - } - } - - return first; -} - -static void -xglNewList (GLuint list, - GLenum mode) -{ - if (!list) - { - xglRecordError (GL_INVALID_VALUE); - return; - } - - if (cctx->list) - { - xglRecordError (GL_INVALID_OPERATION); - return; - } - - cctx->pList = xglCreateList (); - if (!cctx->pList) - { - xglRecordError (GL_OUT_OF_MEMORY); - return; - } - - cctx->list = list; - cctx->listMode = mode; - - xglStartList (XGL_LIST_OP_CALLS, mode); -} - -static void -xglEndList (void) -{ - xglDisplayListPtr pDisplayList; - - if (!cctx->list) - { - xglRecordError (GL_INVALID_OPERATION); - return; - } - - glEndList (); - - pDisplayList = (xglDisplayListPtr) - xglHashLookup (cctx->shared->displayLists, cctx->list); - if (pDisplayList) - { - xglHashRemove (cctx->shared->displayLists, cctx->list); - xglDestroyList (pDisplayList); - } - - xglHashInsert (cctx->shared->displayLists, cctx->list, cctx->pList); - - cctx->list = 0; -} - -static void -xglDrawList (GLuint list) -{ - RegionRec region; - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - - XGL_GLX_DRAW_PROLOGUE (pBox, nBox, &scissor); - - while (nBox--) - { - XGL_GLX_DRAW_BOX (&box, pBox); - - pBox++; - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - if (box.x1 < box.x2 && box.y1 < box.y2) - { - XGL_GLX_SET_SCISSOR_BOX (&box); - - glCallList (list); - - XGL_GLX_DRAW_DAMAGE (&box, ®ion); - } - } -} - -static void -xglCallDisplayList (GLuint list, - int nesting) -{ - if (nesting > cctx->maxListNesting) - return; - - if (!list) - { - xglRecordError (GL_INVALID_VALUE); - return; - } - - if (cctx->list) - { - if (!xglResizeList (cctx->pList, cctx->pList->nOp + 1)) - { - xglRecordError (GL_OUT_OF_MEMORY); - return; - } - - cctx->pList->pOp[cctx->pList->nOp].type = XGL_LIST_OP_LIST; - cctx->pList->pOp[cctx->pList->nOp].u.list = list; - cctx->pList->nOp++; - } - else - { - xglDisplayListPtr pDisplayList; - - pDisplayList = (xglDisplayListPtr) - xglHashLookup (cctx->shared->displayLists, list); - if (pDisplayList) - { - xglListOpPtr pOp = pDisplayList->pOp; - int nOp = pDisplayList->nOp; - - while (nOp--) - { - switch (pOp->type) { - case XGL_LIST_OP_CALLS: - glCallList (pOp->u.list); - break; - case XGL_LIST_OP_DRAW: - xglDrawList (pOp->u.list); - break; - case XGL_LIST_OP_GL: - (*pOp->u.gl->glProc) (pOp->u.gl); - break; - case XGL_LIST_OP_LIST: - xglCallDisplayList (pOp->u.list, nesting + 1); - break; - } - - pOp++; - } - } - } -} - -static void -xglCallList (GLuint list) -{ - xglCallDisplayList (list, 1); -} - -static void -xglCallLists (GLsizei n, - GLenum type, - const GLvoid *lists) -{ - GLuint list; - GLint base, i; - - glGetIntegerv (GL_LIST_BASE, &base); - - for (i = 0; i < n; i++) - { - switch (type) { - case GL_BYTE: - list = (GLuint) *(((GLbyte *) lists) + n); - break; - case GL_UNSIGNED_BYTE: - list = (GLuint) *(((GLubyte *) lists) + n); - break; - case GL_SHORT: - list = (GLuint) *(((GLshort *) lists) + n); - break; - case GL_UNSIGNED_SHORT: - list = (GLuint) *(((GLushort *) lists) + n); - break; - case GL_INT: - list = (GLuint) *(((GLint *) lists) + n); - break; - case GL_UNSIGNED_INT: - list = (GLuint) *(((GLuint *) lists) + n); - break; - case GL_FLOAT: - list = (GLuint) *(((GLfloat *) lists) + n); - break; - case GL_2_BYTES: - { - GLubyte *ubptr = ((GLubyte *) lists) + 2 * n; - list = (GLuint) *ubptr * 256 + (GLuint) *(ubptr + 1); - } break; - case GL_3_BYTES: - { - GLubyte *ubptr = ((GLubyte *) lists) + 3 * n; - list = (GLuint) * ubptr * 65536 - + (GLuint) * (ubptr + 1) * 256 - + (GLuint) * (ubptr + 2); - } break; - case GL_4_BYTES: - { - GLubyte *ubptr = ((GLubyte *) lists) + 4 * n; - list = (GLuint) * ubptr * 16777216 - + (GLuint) * (ubptr + 1) * 65536 - + (GLuint) * (ubptr + 2) * 256 - + (GLuint) * (ubptr + 3); - } break; - default: - xglRecordError (GL_INVALID_ENUM); - return; - } - - xglCallDisplayList (base + list, 1); - } -} - -static void -xglDeleteLists (GLuint list, - GLsizei range) -{ - xglDisplayListPtr pDisplayList; - GLint i; - - if (range < 0) - { - xglRecordError (GL_INVALID_VALUE); - return; - } - - for (i = list; i < list + range; i++) - { - if (!i) - continue; - - pDisplayList = (xglDisplayListPtr) - xglHashLookup (cctx->shared->displayLists, i); - if (pDisplayList) - { - xglHashRemove (cctx->shared->displayLists, i); - xglDestroyList (pDisplayList); - } - } -} - -static GLboolean -xglIsList (GLuint list) -{ - xglDisplayListPtr pDisplayList; - - if (!list) - return GL_FALSE; - - pDisplayList = (xglDisplayListPtr) - xglHashLookup (cctx->shared->displayLists, list); - if (pDisplayList) - return GL_TRUE; - - return GL_FALSE; -} - -static void -xglFlush (void) -{ - glFlush (); - - if (cctx && cctx->pDrawBuffer->pDrawable) - { - xglGLBufferPtr pBuffer = cctx->pDrawBuffer; - - if (REGION_NOTEMPTY (pBuffer->pDrawable->pScreen, &pBuffer->damage)) - { - XGL_DRAWABLE_PIXMAP_PRIV (pBuffer->pDrawable); - - DamageDamageRegion (pBuffer->pDrawable, &pBuffer->damage); - REGION_EMPTY (pBuffer->pDrawable->pScreen, &pBuffer->damage); - - pPixmapPriv->damageBox = miEmptyBox; - } - } -} - -static void -xglFinish (void) -{ - glFinish (); - - if (cctx && cctx->pDrawBuffer->pDrawable) - { - xglGLBufferPtr pBuffer = cctx->pDrawBuffer; - - if (REGION_NOTEMPTY (pBuffer->pDrawable->pScreen, &pBuffer->damage)) - { - XGL_DRAWABLE_PIXMAP_PRIV (pBuffer->pDrawable); - - DamageDamageRegion (pBuffer->pDrawable, &pBuffer->damage); - REGION_EMPTY (pBuffer->pDrawable->pScreen, &pBuffer->damage); - - pPixmapPriv->damageBox = miEmptyBox; - } - } -} - -static void -xglClear (GLbitfield mask) -{ - GLenum mode; - - if (cctx->list) - { - glEndList (); - xglStartList (XGL_LIST_OP_DRAW, GL_COMPILE); - glClear (mask); - glEndList (); - - mode = cctx->listMode; - } - else - mode = GL_COMPILE_AND_EXECUTE; - - if (mode == GL_COMPILE_AND_EXECUTE) - { - RegionRec region; - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - - XGL_GLX_DRAW_PROLOGUE_WITHOUT_TEXTURES (pBox, nBox, &scissor); - - while (nBox--) - { - XGL_GLX_DRAW_BOX (&box, pBox); - - pBox++; - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - if (box.x1 < box.x2 && box.y1 < box.y2) - { - XGL_GLX_SET_SCISSOR_BOX (&box); - - glClear (mask); - - if (mask & GL_COLOR_BUFFER_BIT) - XGL_GLX_DRAW_DAMAGE (&box, ®ion); - } - } - } - - if (cctx->list) - xglStartList (XGL_LIST_OP_CALLS, cctx->listMode); -} - -static void -xglAccum (GLenum op, - GLfloat value) -{ - if (op == GL_RETURN) - { - GLenum listMode; - - if (cctx->list) - { - glEndList (); - xglStartList (XGL_LIST_OP_DRAW, GL_COMPILE); - glAccum (GL_RETURN, value); - glEndList (); - - listMode = cctx->listMode; - } - else - listMode = GL_COMPILE_AND_EXECUTE; - - if (listMode == GL_COMPILE_AND_EXECUTE) - { - RegionRec region; - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - - XGL_GLX_DRAW_PROLOGUE_WITHOUT_TEXTURES (pBox, nBox, &scissor); - - while (nBox--) - { - XGL_GLX_DRAW_BOX (&box, pBox); - - pBox++; - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - if (box.x1 < box.x2 && box.y1 < box.y2) - { - XGL_GLX_SET_SCISSOR_BOX (&box); - - glAccum (GL_RETURN, value); - - XGL_GLX_DRAW_DAMAGE (&box, ®ion); - } - } - } - - if (cctx->list) - xglStartList (XGL_LIST_OP_CALLS, cctx->listMode); - } - else - glAccum (op, value); -} - -static void -xglDrawArrays (GLenum mode, - GLint first, - GLsizei count) -{ - GLenum listMode; - - if (cctx->list) - { - glEndList (); - xglStartList (XGL_LIST_OP_DRAW, GL_COMPILE); - glDrawArrays (mode, first, count); - glEndList (); - - listMode = cctx->listMode; - } - else - listMode = GL_COMPILE_AND_EXECUTE; - - if (listMode == GL_COMPILE_AND_EXECUTE) - { - RegionRec region; - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - - XGL_GLX_DRAW_PROLOGUE (pBox, nBox, &scissor); - - while (nBox--) - { - XGL_GLX_DRAW_BOX (&box, pBox); - - pBox++; - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - if (box.x1 < box.x2 && box.y1 < box.y2) - { - XGL_GLX_SET_SCISSOR_BOX (&box); - - glDrawArrays (mode, first, count); - - XGL_GLX_DRAW_DAMAGE (&box, ®ion); - } - } - } - - if (cctx->list) - xglStartList (XGL_LIST_OP_CALLS, cctx->listMode); -} - -static void -xglDrawElements (GLenum mode, - GLsizei count, - GLenum type, - const GLvoid *indices) -{ - GLenum listMode; - - if (cctx->list) - { - glEndList (); - xglStartList (XGL_LIST_OP_DRAW, GL_COMPILE); - glDrawElements (mode, count, type, indices); - glEndList (); - - listMode = cctx->listMode; - } - else - listMode = GL_COMPILE_AND_EXECUTE; - - if (listMode == GL_COMPILE_AND_EXECUTE) - { - RegionRec region; - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - - XGL_GLX_DRAW_PROLOGUE (pBox, nBox, &scissor); - - while (nBox--) - { - XGL_GLX_DRAW_BOX (&box, pBox); - - pBox++; - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - if (box.x1 < box.x2 && box.y1 < box.y2) - { - XGL_GLX_SET_SCISSOR_BOX (&box); - - glDrawElements (mode, count, type, indices); - - XGL_GLX_DRAW_DAMAGE (&box, ®ion); - } - } - } - - if (cctx->list) - xglStartList (XGL_LIST_OP_CALLS, cctx->listMode); -} - -static void -xglDrawPixels (GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - const GLvoid *pixels) -{ - GLenum listMode; - - if (cctx->list) - { - glEndList (); - xglStartList (XGL_LIST_OP_DRAW, GL_COMPILE); - glDrawPixels (width, height, format, type, pixels); - glEndList (); - - listMode = cctx->listMode; - } - else - listMode = GL_COMPILE_AND_EXECUTE; - - if (listMode == GL_COMPILE_AND_EXECUTE) - { - RegionRec region; - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - - XGL_GLX_DRAW_PROLOGUE (pBox, nBox, &scissor); - - while (nBox--) - { - XGL_GLX_DRAW_BOX (&box, pBox); - - pBox++; - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - if (box.x1 < box.x2 && box.y1 < box.y2) - { - XGL_GLX_SET_SCISSOR_BOX (&box); - - glDrawPixels (width, height, format, type, pixels); - - if (format != GL_STENCIL_INDEX) - XGL_GLX_DRAW_DAMAGE (&box, ®ion); - } - } - } - - if (cctx->list) - xglStartList (XGL_LIST_OP_CALLS, cctx->listMode); -} - -static void -xglBitmap (GLsizei width, - GLsizei height, - GLfloat xorig, - GLfloat yorig, - GLfloat xmove, - GLfloat ymove, - const GLubyte *bitmap) -{ - GLenum listMode; - - if (cctx->list) - { - glEndList (); - xglStartList (XGL_LIST_OP_DRAW, GL_COMPILE); - glBitmap (width, height, xorig, yorig, 0, 0, bitmap); - glEndList (); - - listMode = cctx->listMode; - } - else - listMode = GL_COMPILE_AND_EXECUTE; - - if (listMode == GL_COMPILE_AND_EXECUTE && width && height) - { - RegionRec region; - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - - XGL_GLX_DRAW_PROLOGUE (pBox, nBox, &scissor); - - while (nBox--) - { - XGL_GLX_DRAW_BOX (&box, pBox); - - pBox++; - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - if (box.x1 < box.x2 && box.y1 < box.y2) - { - XGL_GLX_SET_SCISSOR_BOX (&box); - - glBitmap (width, height, xorig, yorig, 0, 0, bitmap); - - XGL_GLX_DRAW_DAMAGE (&box, ®ion); - } - } - } - - if (cctx->list) - xglStartList (XGL_LIST_OP_CALLS, cctx->listMode); - - glBitmap (0, 0, 0, 0, xmove, ymove, NULL); -} - -static void -xglRectdv (const GLdouble *v1, - const GLdouble *v2) -{ - GLenum listMode; - - if (cctx->list) - { - glEndList (); - xglStartList (XGL_LIST_OP_DRAW, GL_COMPILE); - glRectdv (v1, v2); - glEndList (); - - listMode = cctx->listMode; - } - else - listMode = GL_COMPILE_AND_EXECUTE; - - if (listMode == GL_COMPILE_AND_EXECUTE) - { - RegionRec region; - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - - XGL_GLX_DRAW_PROLOGUE (pBox, nBox, &scissor); - - while (nBox--) - { - XGL_GLX_DRAW_BOX (&box, pBox); - - pBox++; - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - if (box.x1 < box.x2 && box.y1 < box.y2) - { - XGL_GLX_SET_SCISSOR_BOX (&box); - - glRectdv (v1, v2); - - XGL_GLX_DRAW_DAMAGE (&box, ®ion); - } - } - } - - if (cctx->list) - xglStartList (XGL_LIST_OP_CALLS, cctx->listMode); -} - -static void -xglRectfv (const GLfloat *v1, - const GLfloat *v2) -{ - GLdouble dv1[2]; - GLdouble dv2[2]; - - dv1[0] = (GLdouble) v1[0]; - dv1[1] = (GLdouble) v1[1]; - dv2[0] = (GLdouble) v2[0]; - dv2[1] = (GLdouble) v2[1]; - - xglRectdv (dv1, dv2); -} - -static void -xglRectiv (const GLint *v1, - const GLint *v2) -{ - GLdouble dv1[2]; - GLdouble dv2[2]; - - dv1[0] = (GLdouble) v1[0]; - dv1[1] = (GLdouble) v1[1]; - dv2[0] = (GLdouble) v2[0]; - dv2[1] = (GLdouble) v2[1]; - - xglRectdv (dv1, dv2); -} - -static void -xglRectsv (const GLshort *v1, - const GLshort *v2) -{ - GLdouble dv1[2]; - GLdouble dv2[2]; - - dv1[0] = (GLdouble) v1[0]; - dv1[1] = (GLdouble) v1[1]; - dv2[0] = (GLdouble) v2[0]; - dv2[1] = (GLdouble) v2[1]; - - xglRectdv (dv1, dv2); -} - -static void -xglBegin (GLenum mode) -{ - if (mode > GL_POLYGON) - { - xglRecordError (GL_INVALID_ENUM); - return; - } - - if (cctx->beginCnt) - { - xglRecordError (GL_INVALID_OPERATION); - return; - } - - cctx->beginCnt++; - - if (cctx->list) - { - glEndList (); - xglStartList (XGL_LIST_OP_DRAW, GL_COMPILE); - } - else - { - if (REGION_NUM_RECTS (cctx->pDrawBuffer->pGC->pCompositeClip) == 1) - { - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - - XGL_GLX_DRAW_PROLOGUE (pBox, nBox, &scissor); - - XGL_GLX_DRAW_BOX (&box, pBox); - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - XGL_GLX_SET_SCISSOR_BOX (&box); - } - else - { - if (!cctx->groupList) - cctx->groupList = glGenLists (1); - - glNewList (cctx->groupList, GL_COMPILE); - } - } - - glBegin (mode); -} - -static void -xglEnd (void) -{ - if (!cctx->beginCnt) - { - xglRecordError (GL_INVALID_OPERATION); - return; - } - - cctx->beginCnt--; - - glEnd (); - - if (!cctx->list || cctx->listMode == GL_COMPILE_AND_EXECUTE) - { - RegionRec region; - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - GLuint list = 0; - - if (cctx->list) - { - XGL_GLX_DRAW_PROLOGUE (pBox, nBox, &scissor); - - list = cctx->pList->pOp[cctx->pList->nOp - 1].u.list; - } - else - { - if (REGION_NUM_RECTS (cctx->pDrawBuffer->pGC->pCompositeClip) == 1) - { - XGL_GLX_DRAW_PROLOGUE_WITHOUT_TEXTURES (pBox, nBox, &scissor); - } - else - { - XGL_GLX_DRAW_PROLOGUE (pBox, nBox, &scissor); - - list = cctx->groupList; - } - } - - if (list) - glEndList (); - - while (nBox--) - { - XGL_GLX_DRAW_BOX (&box, pBox); - - pBox++; - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - if (box.x1 < box.x2 && box.y1 < box.y2) - { - if (list) - { - XGL_GLX_SET_SCISSOR_BOX (&box); - - glCallList (list); - } - - XGL_GLX_DRAW_DAMAGE (&box, ®ion); - } - } - } - else - { - glEndList (); - } - - if (cctx->list) - xglStartList (XGL_LIST_OP_CALLS, cctx->listMode); -} - -static void -xglCopyPixelsProc (xglGLOpPtr pOp) -{ - RegionRec region; - BoxRec scissor, box; - BoxPtr pBox; - int nBox; - - XGL_GLX_DRAW_PROLOGUE (pBox, nBox, &scissor); - - while (nBox--) - { - XGL_GLX_DRAW_BOX (&box, pBox); - - pBox++; - - if (cctx->attrib.scissorTest) - XGL_GLX_INTERSECT_BOX (&box, &scissor); - - if (box.x1 < box.x2 && box.y1 < box.y2) - { - XGL_GLX_SET_SCISSOR_BOX (&box); - - glCopyPixels (pOp->u.copy_pixels.x + cctx->pReadBuffer->xOff, - pOp->u.copy_pixels.y + cctx->pReadBuffer->yOff, - pOp->u.copy_pixels.width, - pOp->u.copy_pixels.height, - pOp->u.copy_pixels.type); - - if (pOp->u.copy_pixels.type == GL_COLOR) - XGL_GLX_DRAW_DAMAGE (&box, ®ion); - } - } -} - -static void -xglCopyPixels (GLint x, - GLint y, - GLsizei width, - GLsizei height, - GLenum type) -{ - xglGLOpRec gl; - - gl.glProc = xglCopyPixelsProc; - - gl.u.copy_pixels.x = x; - gl.u.copy_pixels.y = y; - gl.u.copy_pixels.width = width; - gl.u.copy_pixels.height = height; - gl.u.copy_pixels.type = type; - - xglGLOp (&gl); -} - -static void -xglReadPixels (GLint x, - GLint y, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - GLvoid *pixels) -{ - glReadPixels (x + cctx->pReadBuffer->xOff, - y + cctx->pReadBuffer->yOff, - width, height, format, type, pixels); -} - -static void -xglCopyTexImage1DProc (xglGLOpPtr pOp) -{ - glCopyTexImage1D (pOp->u.copy_tex_image_1d.target, - pOp->u.copy_tex_image_1d.level, - pOp->u.copy_tex_image_1d.internalformat, - pOp->u.copy_tex_image_1d.x + cctx->pReadBuffer->xOff, - pOp->u.copy_tex_image_1d.y + cctx->pReadBuffer->yOff, - pOp->u.copy_tex_image_1d.width, - pOp->u.copy_tex_image_1d.border); -} - -static void -xglCopyTexImage1D (GLenum target, - GLint level, - GLenum internalformat, - GLint x, - GLint y, - GLsizei width, - GLint border) -{ - xglGLOpRec gl; - - gl.glProc = xglCopyTexImage1DProc; - - gl.u.copy_tex_image_1d.target = target; - gl.u.copy_tex_image_1d.level = level; - gl.u.copy_tex_image_1d.internalformat = internalformat; - gl.u.copy_tex_image_1d.x = x; - gl.u.copy_tex_image_1d.y = y; - gl.u.copy_tex_image_1d.width = width; - gl.u.copy_tex_image_1d.border = border; - - xglGLOp (&gl); -} - -static void -xglCopyTexImage2DProc (xglGLOpPtr pOp) -{ - glCopyTexImage2D (pOp->u.copy_tex_image_2d.target, - pOp->u.copy_tex_image_2d.level, - pOp->u.copy_tex_image_2d.internalformat, - pOp->u.copy_tex_image_2d.x + cctx->pReadBuffer->xOff, - pOp->u.copy_tex_image_2d.y + cctx->pReadBuffer->yOff, - pOp->u.copy_tex_image_2d.width, - pOp->u.copy_tex_image_2d.height, - pOp->u.copy_tex_image_2d.border); -} - -static void -xglCopyTexImage2D (GLenum target, - GLint level, - GLenum internalformat, - GLint x, - GLint y, - GLsizei width, - GLsizei height, - GLint border) -{ - xglGLOpRec gl; - - gl.glProc = xglCopyTexImage2DProc; - - gl.u.copy_tex_image_2d.target = target; - gl.u.copy_tex_image_2d.level = level; - gl.u.copy_tex_image_2d.internalformat = internalformat; - gl.u.copy_tex_image_2d.x = x; - gl.u.copy_tex_image_2d.y = y; - gl.u.copy_tex_image_2d.width = width; - gl.u.copy_tex_image_2d.height = height; - gl.u.copy_tex_image_2d.border = border; - - xglGLOp (&gl); -} - -static void -xglCopyTexSubImage1DProc (xglGLOpPtr pOp) -{ - glCopyTexSubImage1D (pOp->u.copy_tex_sub_image_1d.target, - pOp->u.copy_tex_sub_image_1d.level, - pOp->u.copy_tex_sub_image_1d.xoffset, - pOp->u.copy_tex_sub_image_1d.x + - cctx->pReadBuffer->xOff, - pOp->u.copy_tex_sub_image_1d.y + - cctx->pReadBuffer->yOff, - pOp->u.copy_tex_sub_image_1d.width); -} - -static void -xglCopyTexSubImage1D (GLenum target, - GLint level, - GLint xoffset, - GLint x, - GLint y, - GLsizei width) -{ - xglGLOpRec gl; - - gl.glProc = xglCopyTexSubImage1DProc; - - gl.u.copy_tex_sub_image_1d.target = target; - gl.u.copy_tex_sub_image_1d.level = level; - gl.u.copy_tex_sub_image_1d.xoffset = xoffset; - gl.u.copy_tex_sub_image_1d.x = x; - gl.u.copy_tex_sub_image_1d.y = y; - gl.u.copy_tex_sub_image_1d.width = width; - - xglGLOp (&gl); -} - -static void -xglCopyTexSubImage2DProc (xglGLOpPtr pOp) -{ - glCopyTexSubImage2D (pOp->u.copy_tex_sub_image_2d.target, - pOp->u.copy_tex_sub_image_2d.level, - pOp->u.copy_tex_sub_image_2d.xoffset, - pOp->u.copy_tex_sub_image_2d.yoffset, - pOp->u.copy_tex_sub_image_2d.x + - cctx->pReadBuffer->xOff, - pOp->u.copy_tex_sub_image_2d.y + - cctx->pReadBuffer->yOff, - pOp->u.copy_tex_sub_image_2d.width, - pOp->u.copy_tex_sub_image_2d.height); -} - -static void -xglCopyTexSubImage2D (GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLint x, - GLint y, - GLsizei width, - GLsizei height) -{ - xglGLOpRec gl; - - gl.glProc = xglCopyTexSubImage2DProc; - - gl.u.copy_tex_sub_image_2d.target = target; - gl.u.copy_tex_sub_image_2d.level = level; - gl.u.copy_tex_sub_image_2d.xoffset = xoffset; - gl.u.copy_tex_sub_image_2d.yoffset = yoffset; - gl.u.copy_tex_sub_image_2d.x = x; - gl.u.copy_tex_sub_image_2d.y = y; - gl.u.copy_tex_sub_image_2d.width = width; - gl.u.copy_tex_sub_image_2d.height = height; - - xglGLOp (&gl); -} - -static void -xglCopyColorTableProc (xglGLOpPtr pOp) -{ - glCopyColorTable (pOp->u.copy_color_table.target, - pOp->u.copy_color_table.internalformat, - pOp->u.copy_color_table.x + cctx->pReadBuffer->xOff, - pOp->u.copy_color_table.y + cctx->pReadBuffer->yOff, - pOp->u.copy_color_table.width); -} - -static void -xglCopyColorTable (GLenum target, - GLenum internalformat, - GLint x, - GLint y, - GLsizei width) -{ - xglGLOpRec gl; - - gl.glProc = xglCopyColorTableProc; - - gl.u.copy_color_table.target = target; - gl.u.copy_color_table.internalformat = internalformat; - gl.u.copy_color_table.x = x; - gl.u.copy_color_table.y = y; - gl.u.copy_color_table.width = width; - - xglGLOp (&gl); -} - -static void -xglCopyColorSubTableProc (xglGLOpPtr pOp) -{ - glCopyColorTable (pOp->u.copy_color_sub_table.target, - pOp->u.copy_color_sub_table.start, - pOp->u.copy_color_sub_table.x + cctx->pReadBuffer->xOff, - pOp->u.copy_color_sub_table.y + cctx->pReadBuffer->yOff, - pOp->u.copy_color_sub_table.width); -} - -static void -xglCopyColorSubTable (GLenum target, - GLsizei start, - GLint x, - GLint y, - GLsizei width) -{ - xglGLOpRec gl; - - gl.glProc = xglCopyColorSubTableProc; - - gl.u.copy_color_sub_table.target = target; - gl.u.copy_color_sub_table.start = start; - gl.u.copy_color_sub_table.x = x; - gl.u.copy_color_sub_table.y = y; - gl.u.copy_color_sub_table.width = width; - - xglGLOp (&gl); -} - -static void -xglCopyConvolutionFilter1DProc (xglGLOpPtr pOp) -{ - GLenum internalformat = pOp->u.copy_convolution_filter_1d.internalformat; - - glCopyConvolutionFilter1D (pOp->u.copy_convolution_filter_1d.target, - internalformat, - pOp->u.copy_convolution_filter_1d.x + - cctx->pReadBuffer->xOff, - pOp->u.copy_convolution_filter_1d.y + - cctx->pReadBuffer->yOff, - pOp->u.copy_convolution_filter_1d.width); -} - -static void -xglCopyConvolutionFilter1D (GLenum target, - GLenum internalformat, - GLint x, - GLint y, - GLsizei width) -{ - xglGLOpRec gl; - - gl.glProc = xglCopyConvolutionFilter1DProc; - - gl.u.copy_convolution_filter_1d.target = target; - gl.u.copy_convolution_filter_1d.internalformat = internalformat; - gl.u.copy_convolution_filter_1d.x = x; - gl.u.copy_convolution_filter_1d.y = y; - gl.u.copy_convolution_filter_1d.width = width; - - xglGLOp (&gl); -} - -static void -xglCopyConvolutionFilter2DProc (xglGLOpPtr pOp) -{ - GLenum internalformat = pOp->u.copy_convolution_filter_2d.internalformat; - - glCopyConvolutionFilter2D (pOp->u.copy_convolution_filter_2d.target, - internalformat, - pOp->u.copy_convolution_filter_2d.x + - cctx->pReadBuffer->xOff, - pOp->u.copy_convolution_filter_2d.y + - cctx->pReadBuffer->yOff, - pOp->u.copy_convolution_filter_2d.width, - pOp->u.copy_convolution_filter_2d.height); -} - -static void -xglCopyConvolutionFilter2D (GLenum target, - GLenum internalformat, - GLint x, - GLint y, - GLsizei width, - GLsizei height) -{ - xglGLOpRec gl; - - gl.glProc = xglCopyConvolutionFilter2DProc; - - gl.u.copy_convolution_filter_2d.target = target; - gl.u.copy_convolution_filter_2d.internalformat = internalformat; - gl.u.copy_convolution_filter_2d.x = x; - gl.u.copy_convolution_filter_2d.y = y; - gl.u.copy_convolution_filter_2d.width = width; - gl.u.copy_convolution_filter_2d.height = height; - - xglGLOp (&gl); -} - -static void -xglCopyTexSubImage3DProc (xglGLOpPtr pOp) -{ - glCopyTexSubImage3D (pOp->u.copy_tex_sub_image_3d.target, - pOp->u.copy_tex_sub_image_3d.level, - pOp->u.copy_tex_sub_image_3d.xoffset, - pOp->u.copy_tex_sub_image_3d.yoffset, - pOp->u.copy_tex_sub_image_3d.zoffset, - pOp->u.copy_tex_sub_image_3d.x + - cctx->pReadBuffer->xOff, - pOp->u.copy_tex_sub_image_3d.y + - cctx->pReadBuffer->yOff, - pOp->u.copy_tex_sub_image_3d.width, - pOp->u.copy_tex_sub_image_3d.height); -} - -static void -xglCopyTexSubImage3D (GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLint zoffset, - GLint x, - GLint y, - GLsizei width, - GLsizei height) -{ - xglGLOpRec gl; - - gl.glProc = xglCopyTexSubImage3DProc; - - gl.u.copy_tex_sub_image_3d.target = target; - gl.u.copy_tex_sub_image_3d.level = level; - gl.u.copy_tex_sub_image_3d.xoffset = xoffset; - gl.u.copy_tex_sub_image_3d.yoffset = yoffset; - gl.u.copy_tex_sub_image_3d.zoffset = zoffset; - gl.u.copy_tex_sub_image_3d.x = x; - gl.u.copy_tex_sub_image_3d.y = y; - gl.u.copy_tex_sub_image_3d.width = width; - gl.u.copy_tex_sub_image_3d.height = height; - - xglGLOp (&gl); -} - -/* GL_ARB_multitexture */ -static void -xglNoOpActiveTextureARB (GLenum texture) {} -static void -xglActiveTextureARBProc (xglGLOpPtr pOp) -{ - GLenum texUnit; - - texUnit = pOp->u.enumeration - GL_TEXTURE0; - if (texUnit < 0 || texUnit >= cctx->maxTexUnits) - { - xglRecordError (GL_INVALID_ENUM); - } - else - { - cctx->activeTexUnit = texUnit; - (*cctx->ActiveTextureARB) (pOp->u.enumeration); - } -} -static void -xglActiveTextureARB (GLenum texture) -{ - xglGLOpRec gl; - - gl.glProc = xglActiveTextureARBProc; - - gl.u.enumeration = texture; - - xglGLOp (&gl); -} -static void -xglNoOpClientActiveTextureARB (GLenum texture) {} -static void -xglNoOpMultiTexCoord1dvARB (GLenum target, const GLdouble *v) {} -static void -xglNoOpMultiTexCoord1fvARB (GLenum target, const GLfloat *v) {} -static void -xglNoOpMultiTexCoord1ivARB (GLenum target, const GLint *v) {} -static void -xglNoOpMultiTexCoord1svARB (GLenum target, const GLshort *v) {} -static void -xglNoOpMultiTexCoord2dvARB (GLenum target, const GLdouble *v) {} -static void -xglNoOpMultiTexCoord2fvARB (GLenum target, const GLfloat *v) {} -static void -xglNoOpMultiTexCoord2ivARB (GLenum target, const GLint *v) {} -static void -xglNoOpMultiTexCoord2svARB (GLenum target, const GLshort *v) {} -static void -xglNoOpMultiTexCoord3dvARB (GLenum target, const GLdouble *v) {} -static void -xglNoOpMultiTexCoord3fvARB (GLenum target, const GLfloat *v) {} -static void -xglNoOpMultiTexCoord3ivARB (GLenum target, const GLint *v) {} -static void -xglNoOpMultiTexCoord3svARB (GLenum target, const GLshort *v) {} -static void -xglNoOpMultiTexCoord4dvARB (GLenum target, const GLdouble *v) {} -static void -xglNoOpMultiTexCoord4fvARB (GLenum target, const GLfloat *v) {} -static void -xglNoOpMultiTexCoord4ivARB (GLenum target, const GLint *v) {} -static void -xglNoOpMultiTexCoord4svARB (GLenum target, const GLshort *v) {} - -/* GL_ARB_multisample */ -static void -xglNoOpSampleCoverageARB (GLclampf value, GLboolean invert) {} - -/* GL_EXT_texture_object */ -static GLboolean -xglNoOpAreTexturesResidentEXT (GLsizei n, - const GLuint *textures, - GLboolean *residences) -{ - return GL_FALSE; -} -static void -xglNoOpGenTexturesEXT (GLsizei n, GLuint *textures) {} -static GLboolean -xglNoOpIsTextureEXT (GLuint texture) -{ - return GL_FALSE; -} - -/* GL_SGIS_multisample */ -static void -xglNoOpSampleMaskSGIS (GLclampf value, GLboolean invert) {} -static void -xglNoOpSamplePatternSGIS (GLenum pattern) {} - -/* GL_EXT_point_parameters */ -static void -xglNoOpPointParameterfEXT (GLenum pname, GLfloat param) {} -static void -xglNoOpPointParameterfvEXT (GLenum pname, const GLfloat *params) {} - -/* GL_MESA_window_pos */ -static void -xglNoOpWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z) {} -static void -xglWindowPos3fMESAProc (xglGLOpPtr pOp) -{ - (*cctx->WindowPos3fMESA) (pOp->u.window_pos_3f.x + cctx->pDrawBuffer->xOff, - pOp->u.window_pos_3f.y + cctx->pDrawBuffer->yOff, - pOp->u.window_pos_3f.z); -} -static void -xglWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z) -{ - xglGLOpRec gl; - - gl.glProc = xglWindowPos3fMESAProc; - - gl.u.window_pos_3f.x = x; - gl.u.window_pos_3f.y = y; - gl.u.window_pos_3f.z = z; - - xglGLOp (&gl); -} - -/* GL_EXT_blend_func_separate */ -static void -xglNoOpBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, - GLenum sfactorAlpha, GLenum dfactorAlpha) {} - -/* GL_EXT_fog_coord */ -static void -xglNoOpFogCoordfvEXT (const GLfloat *coord) {} -static void -xglNoOpFogCoorddvEXT (const GLdouble *coord) {} -static void -xglNoOpFogCoordPointerEXT (GLenum type, GLsizei stride, - const GLvoid *pointer) {} - -/* GL_EXT_secondary_color */ -static void -xglNoOpSecondaryColor3bvEXT (const GLbyte *v) {} -static void -xglNoOpSecondaryColor3dvEXT (const GLdouble *v) {} -static void -xglNoOpSecondaryColor3fvEXT (const GLfloat *v) {} -static void -xglNoOpSecondaryColor3ivEXT (const GLint *v) {} -static void -xglNoOpSecondaryColor3svEXT (const GLshort *v) {} -static void -xglNoOpSecondaryColor3ubvEXT (const GLubyte *v) {} -static void -xglNoOpSecondaryColor3uivEXT (const GLuint *v) {} -static void -xglNoOpSecondaryColor3usvEXT (const GLushort *v) {} -static void -xglNoOpSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, - const GLvoid *pointer) {} - -/* GL_NV_point_sprite */ -static void -xglNoOpPointParameteriNV (GLenum pname, GLint params) {} -static void -xglNoOpPointParameterivNV (GLenum pname, const GLint *params) {} - -/* GL_EXT_stencil_two_side */ -static void -xglNoOpActiveStencilFaceEXT (GLenum face) {} - -/* GL_EXT_framebuffer_object */ -static GLboolean -xglNoOpIsRenderbufferEXT (GLuint renderbuffer) -{ - return FALSE; -} -static void -xglNoOpBindRenderbufferEXT (GLenum target, GLuint renderbuffer) {} -static void -xglNoOpDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers) {} -static void -xglNoOpGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers) {} -static void -xglNoOpRenderbufferStorageEXT (GLenum target, GLenum internalformat, - GLsizei width, GLsizei height) {} -static void -xglNoOpGetRenderbufferParameterivEXT (GLenum target, GLenum pname, - GLint *params) {} -static GLboolean -xglNoOpIsFramebufferEXT (GLuint framebuffer) -{ - return FALSE; -} -static void -xglNoOpBindFramebufferEXT (GLenum target, GLuint framebuffer) {} -static void -xglNoOpDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers) {} -static void -xglNoOpGenFramebuffersEXT (GLsizei n, GLuint *framebuffers) {} -static GLenum -xglNoOpCheckFramebufferStatusEXT (GLenum target) -{ - return GL_FRAMEBUFFER_UNSUPPORTED_EXT; -} -static void -xglNoOpFramebufferTexture1DEXT (GLenum target, GLenum attachment, - GLenum textarget, GLuint texture, - GLint level) {} -static void -xglNoOpFramebufferTexture2DEXT (GLenum target, GLenum attachment, - GLenum textarget, GLuint texture, - GLint level) {} -static void -xglNoOpFramebufferTexture3DEXT (GLenum target, GLenum attachment, - GLenum textarget, GLuint texture, - GLint level, GLint zoffset) {} -static void -xglNoOpFramebufferRenderbufferEXT (GLenum target, GLenum attachment, - GLenum renderbuffertarget, - GLuint renderbuffer) {} -static void -xglNoOpGetFramebufferAttachmentParameterivEXT (GLenum target, - GLenum attachment, - GLenum pname, - GLint *params) {} -static void -xglNoOpGenerateMipmapEXT (GLenum target) {} - -static struct _glapi_table __glNativeRenderTable = { - xglNewList, - xglEndList, - xglCallList, - xglCallLists, - xglDeleteLists, - xglGenLists, - glListBase, - xglBegin, - xglBitmap, - 0, /* glColor3b */ - glColor3bv, - 0, /* glColor3d */ - glColor3dv, - 0, /* glColor3f */ - glColor3fv, - 0, /* glColor3i */ - glColor3iv, - 0, /* glColor3s */ - glColor3sv, - 0, /* glColor3ub */ - glColor3ubv, - 0, /* glColor3ui */ - glColor3uiv, - 0, /* glColor3us */ - glColor3usv, - 0, /* glColor4b */ - glColor4bv, - 0, /* glColor4d */ - glColor4dv, - 0, /* glColor4f */ - glColor4fv, - 0, /* glColor4i */ - glColor4iv, - 0, /* glColor4s */ - glColor4sv, - 0, /* glColor4ub */ - glColor4ubv, - 0, /* glColor4ui */ - glColor4uiv, - 0, /* glColor4us */ - glColor4usv, - 0, /* glEdgeFlag */ - glEdgeFlagv, - xglEnd, - 0, /* glIndexd */ - glIndexdv, - 0, /* glIndexf */ - glIndexfv, - 0, /* glIndexi */ - glIndexiv, - 0, /* glIndexs */ - glIndexsv, - 0, /* glNormal3b */ - glNormal3bv, - 0, /* glNormal3d */ - glNormal3dv, - 0, /* glNormal3f */ - glNormal3fv, - 0, /* glNormal3i */ - glNormal3iv, - 0, /* glNormal3s */ - glNormal3sv, - 0, /* glRasterPos2d */ - glRasterPos2dv, - 0, /* glRasterPos2f */ - glRasterPos2fv, - 0, /* glRasterPos2i */ - glRasterPos2iv, - 0, /* glRasterPos2s */ - glRasterPos2sv, - 0, /* glRasterPos3d */ - glRasterPos3dv, - 0, /* glRasterPos3f */ - glRasterPos3fv, - 0, /* glRasterPos3i */ - glRasterPos3iv, - 0, /* glRasterPos3s */ - glRasterPos3sv, - 0, /* glRasterPos4d */ - glRasterPos4dv, - 0, /* glRasterPos4f */ - glRasterPos4fv, - 0, /* glRasterPos4i */ - glRasterPos4iv, - 0, /* glRasterPos4s */ - glRasterPos4sv, - 0, /* glRectd */ - xglRectdv, - 0, /* glRectf */ - xglRectfv, - 0, /* glRecti */ - xglRectiv, - 0, /* glRects */ - xglRectsv, - 0, /* glTexCoord1d */ - glTexCoord1dv, - 0, /* glTexCoord1f */ - glTexCoord1fv, - 0, /* glTexCoord1i */ - glTexCoord1iv, - 0, /* glTexCoord1s */ - glTexCoord1sv, - 0, /* glTexCoord2d */ - glTexCoord2dv, - 0, /* glTexCoord2f */ - glTexCoord2fv, - 0, /* glTexCoord2i */ - glTexCoord2iv, - 0, /* glTexCoord2s */ - glTexCoord2sv, - 0, /* glTexCoord3d */ - glTexCoord3dv, - 0, /* glTexCoord3f */ - glTexCoord3fv, - 0, /* glTexCoord3i */ - glTexCoord3iv, - 0, /* glTexCoord3s */ - glTexCoord3sv, - 0, /* glTexCoord4d */ - glTexCoord4dv, - 0, /* glTexCoord4f */ - glTexCoord4fv, - 0, /* glTexCoord4i */ - glTexCoord4iv, - 0, /* glTexCoord4s */ - glTexCoord4sv, - 0, /* glVertex2d */ - glVertex2dv, - 0, /* glVertex2f */ - glVertex2fv, - 0, /* glVertex2i */ - glVertex2iv, - 0, /* glVertex2s */ - glVertex2sv, - 0, /* glVertex3d */ - glVertex3dv, - 0, /* glVertex3f */ - glVertex3fv, - 0, /* glVertex3i */ - glVertex3iv, - 0, /* glVertex3s */ - glVertex3sv, - 0, /* glVertex4d */ - glVertex4dv, - 0, /* glVertex4f */ - glVertex4fv, - 0, /* glVertex4i */ - glVertex4iv, - 0, /* glVertex4s */ - glVertex4sv, - glClipPlane, - glColorMaterial, - glCullFace, - glFogf, - glFogfv, - glFogi, - glFogiv, - glFrontFace, - glHint, - glLightf, - glLightfv, - glLighti, - glLightiv, - glLightModelf, - glLightModelfv, - glLightModeli, - glLightModeliv, - glLineStipple, - glLineWidth, - glMaterialf, - glMaterialfv, - glMateriali, - glMaterialiv, - glPointSize, - glPolygonMode, - glPolygonStipple, - xglScissor, - glShadeModel, - xglTexParameterf, - xglTexParameterfv, - xglTexParameteri, - xglTexParameteriv, - glTexImage1D, - glTexImage2D, - glTexEnvf, - glTexEnvfv, - glTexEnvi, - glTexEnviv, - glTexGend, - glTexGendv, - glTexGenf, - glTexGenfv, - glTexGeni, - glTexGeniv, - glFeedbackBuffer, - glSelectBuffer, - glRenderMode, - glInitNames, - glLoadName, - glPassThrough, - glPopName, - glPushName, - xglDrawBuffer, - xglClear, - glClearAccum, - glClearIndex, - glClearColor, - glClearStencil, - glClearDepth, - glStencilMask, - glColorMask, - glDepthMask, - glIndexMask, - xglAccum, - xglDisable, - xglEnable, - xglFinish, - xglFlush, - xglPopAttrib, - xglPushAttrib, - glMap1d, - glMap1f, - glMap2d, - glMap2f, - glMapGrid1d, - glMapGrid1f, - glMapGrid2d, - glMapGrid2f, - 0, /* glEvalCoord1d */ - glEvalCoord1dv, - 0, /* glEvalCoord1f */ - glEvalCoord1fv, - 0, /* glEvalCoord2d */ - glEvalCoord2dv, - 0, /* glEvalCoord2f */ - glEvalCoord2fv, - glEvalMesh1, - glEvalPoint1, - glEvalMesh2, - glEvalPoint2, - glAlphaFunc, - glBlendFunc, - glLogicOp, - glStencilFunc, - glStencilOp, - glDepthFunc, - glPixelZoom, - glPixelTransferf, - glPixelTransferi, - glPixelStoref, - glPixelStorei, - glPixelMapfv, - glPixelMapuiv, - glPixelMapusv, - xglReadBuffer, - xglCopyPixels, - xglReadPixels, - xglDrawPixels, - xglGetBooleanv, - glGetClipPlane, - xglGetDoublev, - xglGetError, - xglGetFloatv, - xglGetIntegerv, - glGetLightfv, - glGetLightiv, - glGetMapdv, - glGetMapfv, - glGetMapiv, - glGetMaterialfv, - glGetMaterialiv, - glGetPixelMapfv, - glGetPixelMapuiv, - glGetPixelMapusv, - glGetPolygonStipple, - xglGetString, - glGetTexEnvfv, - glGetTexEnviv, - glGetTexGendv, - glGetTexGenfv, - glGetTexGeniv, - glGetTexImage, - glGetTexParameterfv, - glGetTexParameteriv, - xglGetTexLevelParameterfv, - xglGetTexLevelParameteriv, - xglIsEnabled, - xglIsList, - glDepthRange, - glFrustum, - glLoadIdentity, - glLoadMatrixf, - glLoadMatrixd, - glMatrixMode, - glMultMatrixf, - glMultMatrixd, - glOrtho, - glPopMatrix, - glPushMatrix, - glRotated, - glRotatef, - glScaled, - glScalef, - glTranslated, - glTranslatef, - xglViewport, - glArrayElement, - xglBindTexture, - glColorPointer, - glDisableClientState, - xglDrawArrays, - xglDrawElements, - glEdgeFlagPointer, - glEnableClientState, - glIndexPointer, - 0, /* glIndexub */ - glIndexubv, - glInterleavedArrays, - glNormalPointer, - glPolygonOffset, - glTexCoordPointer, - glVertexPointer, - xglAreTexturesResident, - xglCopyTexImage1D, - xglCopyTexImage2D, - xglCopyTexSubImage1D, - xglCopyTexSubImage2D, - xglDeleteTextures, - xglGenTextures, - glGetPointerv, - xglIsTexture, - xglPrioritizeTextures, - glTexSubImage1D, - glTexSubImage2D, - glPopClientAttrib, - glPushClientAttrib, - glBlendColor, - glBlendEquation, - 0, /* glDrawRangeElements */ - glColorTable, - glColorTableParameterfv, - glColorTableParameteriv, - xglCopyColorTable, - glGetColorTable, - glGetColorTableParameterfv, - glGetColorTableParameteriv, - glColorSubTable, - xglCopyColorSubTable, - glConvolutionFilter1D, - glConvolutionFilter2D, - glConvolutionParameterf, - glConvolutionParameterfv, - glConvolutionParameteri, - glConvolutionParameteriv, - xglCopyConvolutionFilter1D, - xglCopyConvolutionFilter2D, - glGetConvolutionFilter, - glGetConvolutionParameterfv, - glGetConvolutionParameteriv, - glGetSeparableFilter, - glSeparableFilter2D, - glGetHistogram, - glGetHistogramParameterfv, - glGetHistogramParameteriv, - glGetMinmax, - glGetMinmaxParameterfv, - glGetMinmaxParameteriv, - glHistogram, - glMinmax, - glResetHistogram, - glResetMinmax, - glTexImage3D, - glTexSubImage3D, - xglCopyTexSubImage3D, - xglNoOpActiveTextureARB, - xglNoOpClientActiveTextureARB, - 0, /* glMultiTexCoord1dARB */ - xglNoOpMultiTexCoord1dvARB, - 0, /* glMultiTexCoord1fARB */ - xglNoOpMultiTexCoord1fvARB, - 0, /* glMultiTexCoord1iARB */ - xglNoOpMultiTexCoord1ivARB, - 0, /* glMultiTexCoord1sARB */ - xglNoOpMultiTexCoord1svARB, - 0, /* glMultiTexCoord2dARB */ - xglNoOpMultiTexCoord2dvARB, - 0, /* glMultiTexCoord2fARB */ - xglNoOpMultiTexCoord2fvARB, - 0, /* glMultiTexCoord2iARB */ - xglNoOpMultiTexCoord2ivARB, - 0, /* glMultiTexCoord2sARB */ - xglNoOpMultiTexCoord2svARB, - 0, /* glMultiTexCoord3dARB */ - xglNoOpMultiTexCoord3dvARB, - 0, /* glMultiTexCoord3fARB */ - xglNoOpMultiTexCoord3fvARB, - 0, /* glMultiTexCoord3iARB */ - xglNoOpMultiTexCoord3ivARB, - 0, /* glMultiTexCoord3sARB */ - xglNoOpMultiTexCoord3svARB, - 0, /* glMultiTexCoord4dARB */ - xglNoOpMultiTexCoord4dvARB, - 0, /* glMultiTexCoord4fARB */ - xglNoOpMultiTexCoord4fvARB, - 0, /* glMultiTexCoord4iARB */ - xglNoOpMultiTexCoord4ivARB, - 0, /* glMultiTexCoord4sARB */ - xglNoOpMultiTexCoord4svARB, - 0, /* glLoadTransposeMatrixfARB */ - 0, /* glLoadTransposeMatrixdARB */ - 0, /* glMultTransposeMatrixfARB */ - 0, /* glMultTransposeMatrixdARB */ - xglNoOpSampleCoverageARB, - 0, /* glDrawBuffersARB */ - 0, /* glPolygonOffsetEXT */ - 0, /* glGetTexFilterFuncSGIS */ - 0, /* glTexFilterFuncSGIS */ - 0, /* glGetHistogramEXT */ - 0, /* glGetHistogramParameterfvEXT */ - 0, /* glGetHistogramParameterivEXT */ - 0, /* glGetMinmaxEXT */ - 0, /* glGetMinmaxParameterfvEXT */ - 0, /* glGetMinmaxParameterivEXT */ - 0, /* glGetConvolutionFilterEXT */ - 0, /* glGetConvolutionParameterfvEXT */ - 0, /* glGetConvolutionParameterivEXT */ - 0, /* glGetSeparableFilterEXT */ - 0, /* glGetColorTableSGI */ - 0, /* glGetColorTableParameterfvSGI */ - 0, /* glGetColorTableParameterivSGI */ - 0, /* glPixelTexGenSGIX */ - 0, /* glPixelTexGenParameteriSGIS */ - 0, /* glPixelTexGenParameterivSGIS */ - 0, /* glPixelTexGenParameterfSGIS */ - 0, /* glPixelTexGenParameterfvSGIS */ - 0, /* glGetPixelTexGenParameterivSGIS */ - 0, /* glGetPixelTexGenParameterfvSGIS */ - 0, /* glTexImage4DSGIS */ - 0, /* glTexSubImage4DSGIS */ - xglNoOpAreTexturesResidentEXT, - xglNoOpGenTexturesEXT, - xglNoOpIsTextureEXT, - 0, /* glDetailTexFuncSGIS */ - 0, /* glGetDetailTexFuncSGIS */ - 0, /* glSharpenTexFuncSGIS */ - 0, /* glGetSharpenTexFuncSGIS */ - xglNoOpSampleMaskSGIS, - xglNoOpSamplePatternSGIS, - 0, /* glColorPointerEXT */ - 0, /* glEdgeFlagPointerEXT */ - 0, /* glIndexPointerEXT */ - 0, /* glNormalPointerEXT */ - 0, /* glTexCoordPointerEXT */ - 0, /* glVertexPointerEXT */ - 0, /* glSpriteParameterfSGIX */ - 0, /* glSpriteParameterfvSGIX */ - 0, /* glSpriteParameteriSGIX */ - 0, /* glSpriteParameterivSGIX */ - xglNoOpPointParameterfEXT, - xglNoOpPointParameterfvEXT, - 0, /* glGetInstrumentsSGIX */ - 0, /* glInstrumentsBufferSGIX */ - 0, /* glPollInstrumentsSGIX */ - 0, /* glReadInstrumentsSGIX */ - 0, /* glStartInstrumentsSGIX */ - 0, /* glStopInstrumentsSGIX */ - 0, /* glFrameZoomSGIX */ - 0, /* glTagSampleBufferSGIX */ - 0, /* glReferencePlaneSGIX */ - 0, /* glFlushRasterSGIX */ - 0, /* glGetListParameterfvSGIX */ - 0, /* glGetListParameterivSGIX */ - 0, /* glListParameterfSGIX */ - 0, /* glListParameterfvSGIX */ - 0, /* glListParameteriSGIX */ - 0, /* glListParameterivSGIX */ - 0, /* glFragmentColorMaterialSGIX */ - 0, /* glFragmentLightfSGIX */ - 0, /* glFragmentLightfvSGIX */ - 0, /* glFragmentLightiSGIX */ - 0, /* glFragmentLightivSGIX */ - 0, /* glFragmentLightModelfSGIX */ - 0, /* glFragmentLightModelfvSGIX */ - 0, /* glFragmentLightModeliSGIX */ - 0, /* glFragmentLightModelivSGIX */ - 0, /* glFragmentMaterialfSGIX */ - 0, /* glFragmentMaterialfvSGIX */ - 0, /* glFragmentMaterialiSGIX */ - 0, /* glFragmentMaterialivSGIX */ - 0, /* glGetFragmentLightfvSGIX */ - 0, /* glGetFragmentLightivSGIX */ - 0, /* glGetFragmentMaterialfvSGIX */ - 0, /* glGetFragmentMaterialivSGIX */ - 0, /* glLightEnviSGIX */ - 0, /* glVertexWeightfEXT */ - 0, /* glVertexWeightfvEXT */ - 0, /* glVertexWeightPointerEXT */ - 0, /* glFlushVertexArrayRangeNV */ - 0, /* glVertexArrayRangeNV */ - 0, /* glCombinerParameterfvNV */ - 0, /* glCombinerParameterfNV */ - 0, /* glCombinerParameterivNV */ - 0, /* glCombinerParameteriNV */ - 0, /* glCombinerInputNV */ - 0, /* glCombinerOutputNV */ - 0, /* glFinalCombinerInputNV */ - 0, /* glGetCombinerInputParameterfvNV */ - 0, /* glGetCombinerInputParameterivNV */ - 0, /* glGetCombinerOutputParameterfvNV */ - 0, /* glGetCombinerOutputParameterivNV */ - 0, /* glGetFinalCombinerInputParameterfvNV */ - 0, /* glGetFinalCombinerInputParameterivNV */ - 0, /* glResizeBuffersMESA */ - 0, /* glWindowPos2dMESA */ - 0, /* glWindowPos2dvMESA */ - 0, /* glWindowPos2fMESA */ - 0, /* glWindowPos2fvMESA */ - 0, /* glWindowPos2iMESA */ - 0, /* glWindowPos2ivMESA */ - 0, /* glWindowPos2sMESA */ - 0, /* glWindowPos2svMESA */ - 0, /* glWindowPos3dMESA */ - 0, /* glWindowPos3dvMESA */ - xglNoOpWindowPos3fMESA, - 0, /* glWindowPos3fvMESA */ - 0, /* glWindowPos3iMESA */ - 0, /* glWindowPos3ivMESA */ - 0, /* glWindowPos3sMESA */ - 0, /* glWindowPos3svMESA */ - 0, /* glWindowPos4dMESA */ - 0, /* glWindowPos4dvMESA */ - 0, /* glWindowPos4fMESA */ - 0, /* glWindowPos4fvMESA */ - 0, /* glWindowPos4iMESA */ - 0, /* glWindowPos4ivMESA */ - 0, /* glWindowPos4sMESA */ - 0, /* glWindowPos4svMESA */ - xglNoOpBlendFuncSeparateEXT, - 0, /* glIndexMaterialEXT */ - 0, /* glIndexFuncEXT */ - 0, /* glLockArraysEXT */ - 0, /* glUnlockArraysEXT */ - 0, /* glCullParameterdvEXT */ - 0, /* glCullParameterfvEXT */ - 0, /* glHintPGI */ - 0, /* glFogCoordfEXT */ - xglNoOpFogCoordfvEXT, - 0, /* glFogCoorddEXT */ - xglNoOpFogCoorddvEXT, - xglNoOpFogCoordPointerEXT, - 0, /* glGetColorTableEXT */ - 0, /* glGetColorTableParameterivEXT */ - 0, /* glGetColorTableParameterfvEXT */ - 0, /* glTbufferMask3DFX */ - 0, /* glCompressedTexImage3DARB */ - 0, /* glCompressedTexImage2DARB */ - 0, /* glCompressedTexImage1DARB */ - 0, /* glCompressedTexSubImage3DARB */ - 0, /* glCompressedTexSubImage2DARB */ - 0, /* glCompressedTexSubImage1DARB */ - 0, /* glGetCompressedTexImageARB */ - 0, /* glSecondaryColor3bEXT */ - xglNoOpSecondaryColor3bvEXT, - 0, /* glSecondaryColor3dEXT */ - xglNoOpSecondaryColor3dvEXT, - 0, /* glSecondaryColor3fEXT */ - xglNoOpSecondaryColor3fvEXT, - 0, /* glSecondaryColor3iEXT */ - xglNoOpSecondaryColor3ivEXT, - 0, /* glSecondaryColor3sEXT */ - xglNoOpSecondaryColor3svEXT, - 0, /* glSecondaryColor3ubEXT */ - xglNoOpSecondaryColor3ubvEXT, - 0, /* glSecondaryColor3uiEXT */ - xglNoOpSecondaryColor3uivEXT, - 0, /* glSecondaryColor3usEXT */ - xglNoOpSecondaryColor3usvEXT, - xglNoOpSecondaryColorPointerEXT, - 0, /* glAreProgramsResidentNV */ - 0, /* glBindProgramNV */ - 0, /* glDeleteProgramsNV */ - 0, /* glExecuteProgramNV */ - 0, /* glGenProgramsNV */ - 0, /* glGetProgramParameterdvNV */ - 0, /* glGetProgramParameterfvNV */ - 0, /* glGetProgramivNV */ - 0, /* glGetProgramStringNV */ - 0, /* glGetTrackMatrixivNV */ - 0, /* glGetVertexAttribdvARB */ - 0, /* glGetVertexAttribfvARB */ - 0, /* glGetVertexAttribivARB */ - 0, /* glGetVertexAttribPointervNV */ - 0, /* glIsProgramNV */ - 0, /* glLoadProgramNV */ - 0, /* glProgramParameter4dNV */ - 0, /* glProgramParameter4dvNV */ - 0, /* glProgramParameter4fNV */ - 0, /* glProgramParameter4fvNV */ - 0, /* glProgramParameters4dvNV */ - 0, /* glProgramParameters4fvNV */ - 0, /* glRequestResidentProgramsNV */ - 0, /* glTrackMatrixNV */ - 0, /* glVertexAttribPointerNV */ - 0, /* glVertexAttrib1dARB */ - 0, /* glVertexAttrib1dvARB */ - 0, /* glVertexAttrib1fARB */ - 0, /* glVertexAttrib1fvARB */ - 0, /* glVertexAttrib1sARB */ - 0, /* glVertexAttrib1svARB */ - 0, /* glVertexAttrib2dARB */ - 0, /* glVertexAttrib2dvARB */ - 0, /* glVertexAttrib2fARB */ - 0, /* glVertexAttrib2fvARB */ - 0, /* glVertexAttrib2sARB */ - 0, /* glVertexAttrib2svARB */ - 0, /* glVertexAttrib3dARB */ - 0, /* glVertexAttrib3dvARB */ - 0, /* glVertexAttrib3fARB */ - 0, /* glVertexAttrib3fvARB */ - 0, /* glVertexAttrib3sARB */ - 0, /* glVertexAttrib3svARB */ - 0, /* glVertexAttrib4dARB */ - 0, /* glVertexAttrib4dvARB */ - 0, /* glVertexAttrib4fARB */ - 0, /* glVertexAttrib4fvARB */ - 0, /* glVertexAttrib4sARB */ - 0, /* glVertexAttrib4svARB */ - 0, /* glVertexAttrib4NubARB */ - 0, /* glVertexAttrib4NubvARB */ - 0, /* glVertexAttribs1dvNV */ - 0, /* glVertexAttribs1fvNV */ - 0, /* glVertexAttribs1svNV */ - 0, /* glVertexAttribs2dvNV */ - 0, /* glVertexAttribs2fvNV */ - 0, /* glVertexAttribs2svNV */ - 0, /* glVertexAttribs3dvNV */ - 0, /* glVertexAttribs3fvNV */ - 0, /* glVertexAttribs3svNV */ - 0, /* glVertexAttribs4dvNV */ - 0, /* glVertexAttribs4fvNV */ - 0, /* glVertexAttribs4svNV */ - 0, /* glVertexAttribs4ubvNV */ - xglNoOpPointParameteriNV, - xglNoOpPointParameterivNV, - 0, /* glMultiDrawArraysEXT */ - 0, /* glMultiDrawElementsEXT */ - xglNoOpActiveStencilFaceEXT, - 0, /* glDeleteFencesNV */ - 0, /* glGenFencesNV */ - 0, /* glIsFenceNV */ - 0, /* glTestFenceNV */ - 0, /* glGetFenceivNV */ - 0, /* glFinishFenceNV */ - 0, /* glSetFenceNV */ - 0, /* glVertexAttrib4bvARB */ - 0, /* glVertexAttrib4ivARB */ - 0, /* glVertexAttrib4ubvARB */ - 0, /* glVertexAttrib4usvARB */ - 0, /* glVertexAttrib4uivARB */ - 0, /* glVertexAttrib4NbvARB */ - 0, /* glVertexAttrib4NsvARB */ - 0, /* glVertexAttrib4NivARB */ - 0, /* glVertexAttrib4NusvARB */ - 0, /* glVertexAttrib4NuivARB */ - 0, /* glVertexAttribPointerARB */ - 0, /* glEnableVertexAttribArrayARB */ - 0, /* glDisableVertexAttribArrayARB */ - 0, /* glProgramStringARB */ - 0, /* glProgramEnvParameter4dARB */ - 0, /* glProgramEnvParameter4dvARB */ - 0, /* glProgramEnvParameter4fARB */ - 0, /* glProgramEnvParameter4fvARB */ - 0, /* glProgramLocalParameter4dARB */ - 0, /* glProgramLocalParameter4dvARB */ - 0, /* glProgramLocalParameter4fARB */ - 0, /* glProgramLocalParameter4fvARB */ - 0, /* glGetProgramEnvParameterdvARB */ - 0, /* glGetProgramEnvParameterfvARB */ - 0, /* glGetProgramLocalParameterdvARB */ - 0, /* glGetProgramLocalParameterfvARB */ - 0, /* glGetProgramivARB */ - 0, /* glGetProgramStringARB */ - 0, /* glProgramNamedParameter4fNV */ - 0, /* glProgramNamedParameter4dNV */ - 0, /* glProgramNamedParameter4fvNV */ - 0, /* glProgramNamedParameter4dvNV */ - 0, /* glGetProgramNamedParameterfvNV */ - 0, /* glGetProgramNamedParameterdvNV */ - 0, /* glBindBufferARB */ - 0, /* glBufferDataARB */ - 0, /* glBufferSubDataARB */ - 0, /* glDeleteBuffersARB */ - 0, /* glGenBuffersARB */ - 0, /* glGetBufferParameterivARB */ - 0, /* glGetBufferPointervARB */ - 0, /* glGetBufferSubDataARB */ - 0, /* glIsBufferARB */ - 0, /* glMapBufferARB */ - 0, /* glUnmapBufferARB */ - 0, /* glDepthBoundsEXT */ - 0, /* glGenQueriesARB */ - 0, /* glDeleteQueriesARB */ - 0, /* glIsQueryARB */ - 0, /* glBeginQueryARB */ - 0, /* glEndQueryARB */ - 0, /* glGetQueryivARB */ - 0, /* glGetQueryObjectivARB */ - 0, /* glGetQueryObjectuivARB */ - 0, /* glMultiModeDrawArraysIBM */ - 0, /* glMultiModeDrawElementsIBM */ - 0, /* glBlendEquationSeparateEXT */ - 0, /* glDeleteObjectARB */ - 0, /* glGetHandleARB */ - 0, /* glDetachObjectARB */ - 0, /* glCreateShaderObjectARB */ - 0, /* glShaderSourceARB */ - 0, /* glCompileShaderARB */ - 0, /* glCreateProgramObjectARB */ - 0, /* glAttachObjectARB */ - 0, /* glLinkProgramARB */ - 0, /* glUseProgramObjectARB */ - 0, /* glValidateProgramARB */ - 0, /* glUniform1fARB */ - 0, /* glUniform2fARB */ - 0, /* glUniform3fARB */ - 0, /* glUniform4fARB */ - 0, /* glUniform1iARB */ - 0, /* glUniform2iARB */ - 0, /* glUniform3iARB */ - 0, /* glUniform4iARB */ - 0, /* glUniform1fvARB */ - 0, /* glUniform2fvARB */ - 0, /* glUniform3fvARB */ - 0, /* glUniform4fvARB */ - 0, /* glUniform1ivARB */ - 0, /* glUniform2ivARB */ - 0, /* glUniform3ivARB */ - 0, /* glUniform4ivARB */ - 0, /* glUniformMatrix2fvARB */ - 0, /* glUniformMatrix3fvARB */ - 0, /* glUniformMatrix4fvARB */ - 0, /* glGetObjectParameterfvARB */ - 0, /* glGetObjectParameterivARB */ - 0, /* glGetInfoLogARB */ - 0, /* glGetAttachedObjectsARB */ - 0, /* glGetUniformLocationARB */ - 0, /* glGetActiveUniformARB */ - 0, /* glGetUniformfvARB */ - 0, /* glGetUniformivARB */ - 0, /* glGetShaderSourceARB */ - 0, /* glBindAttribLocationARB */ - 0, /* glGetActiveAttribARB */ - 0, /* glGetAttribLocationARB */ - 0, /* glGetVertexAttribdvNV */ - 0, /* glGetVertexAttribfvNV */ - 0, /* glGetVertexAttribivNV */ - 0, /* glVertexAttrib1dNV */ - 0, /* glVertexAttrib1dvNV */ - 0, /* glVertexAttrib1fNV */ - 0, /* glVertexAttrib1fvNV */ - 0, /* glVertexAttrib1sNV */ - 0, /* glVertexAttrib1svNV */ - 0, /* glVertexAttrib2dNV */ - 0, /* glVertexAttrib2dvNV */ - 0, /* glVertexAttrib2fNV */ - 0, /* glVertexAttrib2fvNV */ - 0, /* glVertexAttrib2sNV */ - 0, /* glVertexAttrib2svNV */ - 0, /* glVertexAttrib3dNV */ - 0, /* glVertexAttrib3dvNV */ - 0, /* glVertexAttrib3fNV */ - 0, /* glVertexAttrib3fvNV */ - 0, /* glVertexAttrib3sNV */ - 0, /* glVertexAttrib3svNV */ - 0, /* glVertexAttrib4dNV */ - 0, /* glVertexAttrib4dvNV */ - 0, /* glVertexAttrib4fNV */ - 0, /* glVertexAttrib4fvNV */ - 0, /* glVertexAttrib4sNV */ - 0, /* glVertexAttrib4svNV */ - 0, /* glVertexAttrib4ubNV */ - 0, /* glVertexAttrib4ubvNV */ - 0, /* glGenFragmentShadersATI */ - 0, /* glBindFragmentShaderATI */ - 0, /* glDeleteFragmentShaderATI */ - 0, /* glBeginFragmentShaderATI */ - 0, /* glEndFragmentShaderATI */ - 0, /* glPassTexCoordATI */ - 0, /* glSampleMapATI */ - 0, /* glColorFragmentOp1ATI */ - 0, /* glColorFragmentOp2ATI */ - 0, /* glColorFragmentOp3ATI */ - 0, /* glAlphaFragmentOp1ATI */ - 0, /* glAlphaFragmentOp2ATI */ - 0, /* glAlphaFragmentOp3ATI */ - 0, /* glSetFragmentShaderConstantATI */ - xglNoOpIsRenderbufferEXT, - xglNoOpBindRenderbufferEXT, - xglNoOpDeleteRenderbuffersEXT, - xglNoOpGenRenderbuffersEXT, - xglNoOpRenderbufferStorageEXT, - xglNoOpGetRenderbufferParameterivEXT, - xglNoOpIsFramebufferEXT, - xglNoOpBindFramebufferEXT, - xglNoOpDeleteFramebuffersEXT, - xglNoOpGenFramebuffersEXT, - xglNoOpCheckFramebufferStatusEXT, - xglNoOpFramebufferTexture1DEXT, - xglNoOpFramebufferTexture2DEXT, - xglNoOpFramebufferTexture3DEXT, - xglNoOpFramebufferRenderbufferEXT, - xglNoOpGetFramebufferAttachmentParameterivEXT, - xglNoOpGenerateMipmapEXT, - 0, /* glStencilFuncSeparate */ - 0, /* glStencilOpSeparate */ - 0, /* glStencilMaskSeparate */ - 0, /* glGetQueryObjecti64vEXT */ - 0 /* glGetQueryObjectui64vEXT */ -}; - -static void -xglInitExtensions (xglGLContextPtr pContext) -{ - const char *extensions; - - extensions = (const char *) glGetString (GL_EXTENSIONS); - - if (strstr (extensions, "GL_ARB_multitexture")) - { - pContext->ActiveTextureARB = - (PFNGLACTIVETEXTUREARBPROC) - glitz_context_get_proc_address (pContext->context, - "glActiveTextureARB"); - pContext->glRenderTable.ClientActiveTextureARB = - (PFNGLCLIENTACTIVETEXTUREARBPROC) - glitz_context_get_proc_address (pContext->context, - "glClientActiveTextureARB"); - pContext->glRenderTable.MultiTexCoord1dvARB = - (PFNGLMULTITEXCOORD1DVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord1dvARB"); - pContext->glRenderTable.MultiTexCoord1fvARB = - (PFNGLMULTITEXCOORD1FVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord1fvARB"); - pContext->glRenderTable.MultiTexCoord1ivARB = - (PFNGLMULTITEXCOORD1IVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord1ivARB"); - pContext->glRenderTable.MultiTexCoord1svARB = - (PFNGLMULTITEXCOORD1SVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord1svARB"); - pContext->glRenderTable.MultiTexCoord2dvARB = - (PFNGLMULTITEXCOORD2DVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord2dvARB"); - pContext->glRenderTable.MultiTexCoord2fvARB = - (PFNGLMULTITEXCOORD2FVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord2fvARB"); - pContext->glRenderTable.MultiTexCoord2ivARB = - (PFNGLMULTITEXCOORD2IVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord2ivARB"); - pContext->glRenderTable.MultiTexCoord2svARB = - (PFNGLMULTITEXCOORD2SVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord2svARB"); - pContext->glRenderTable.MultiTexCoord3dvARB = - (PFNGLMULTITEXCOORD3DVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord3dvARB"); - pContext->glRenderTable.MultiTexCoord3fvARB = - (PFNGLMULTITEXCOORD3FVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord3fvARB"); - pContext->glRenderTable.MultiTexCoord3ivARB = - (PFNGLMULTITEXCOORD3IVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord3ivARB"); - pContext->glRenderTable.MultiTexCoord3svARB = - (PFNGLMULTITEXCOORD3SVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord3svARB"); - pContext->glRenderTable.MultiTexCoord4dvARB = - (PFNGLMULTITEXCOORD4DVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord4dvARB"); - pContext->glRenderTable.MultiTexCoord4fvARB = - (PFNGLMULTITEXCOORD4FVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord4fvARB"); - pContext->glRenderTable.MultiTexCoord4ivARB = - (PFNGLMULTITEXCOORD4IVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord4ivARB"); - pContext->glRenderTable.MultiTexCoord4svARB = - (PFNGLMULTITEXCOORD4SVARBPROC) - glitz_context_get_proc_address (pContext->context, - "glMultiTexCoord4svARB"); - - glGetIntegerv (GL_MAX_TEXTURE_UNITS_ARB, &pContext->maxTexUnits); - if (pContext->maxTexUnits > XGL_MAX_TEXTURE_UNITS) - pContext->maxTexUnits = XGL_MAX_TEXTURE_UNITS; - - pContext->glRenderTable.ActiveTextureARB = xglActiveTextureARB; - } - else - pContext->maxTexUnits = 1; - - if (strstr (extensions, "GL_ARB_multisample")) - { - pContext->glRenderTable.SampleCoverageARB = - (PFNGLSAMPLECOVERAGEARBPROC) - glitz_context_get_proc_address (pContext->context, - "glSampleCoverageARB"); - } - - if (strstr (extensions, "GL_EXT_texture_object")) - { - pContext->glRenderTable.AreTexturesResidentEXT = - xglAreTexturesResident; - pContext->glRenderTable.GenTexturesEXT = xglGenTextures; - pContext->glRenderTable.IsTextureEXT = xglIsTexture; - } - - if (strstr (extensions, "GL_SGIS_multisample")) - { - pContext->glRenderTable.SampleMaskSGIS = - (PFNGLSAMPLEMASKSGISPROC) - glitz_context_get_proc_address (pContext->context, - "glSampleMaskSGIS"); - pContext->glRenderTable.SamplePatternSGIS = - (PFNGLSAMPLEPATTERNSGISPROC) - glitz_context_get_proc_address (pContext->context, - "glSamplePatternSGIS"); - } - - if (strstr (extensions, "GL_EXT_point_parameters")) - { - pContext->glRenderTable.PointParameterfEXT = - (PFNGLPOINTPARAMETERFEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glPointParameterfEXT"); - pContext->glRenderTable.PointParameterfvEXT = - (PFNGLPOINTPARAMETERFVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glPointParameterfvEXT"); - } - - if (strstr (extensions, "GL_MESA_window_pos")) - { - pContext->WindowPos3fMESA = - (PFNGLWINDOWPOS3FMESAPROC) - glitz_context_get_proc_address (pContext->context, - "glWindowPos3fMESA"); - - pContext->glRenderTable.WindowPos3fMESA = xglWindowPos3fMESA; - } - - if (strstr (extensions, "GL_EXT_blend_func_separate")) - { - pContext->glRenderTable.BlendFuncSeparateEXT = - (PFNGLBLENDFUNCSEPARATEEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glBlendFuncSeparateEXT"); - } - - if (strstr (extensions, "GL_EXT_fog_coord")) - { - pContext->glRenderTable.FogCoordfvEXT = - (PFNGLFOGCOORDFVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glFogCoordfvEXT"); - pContext->glRenderTable.FogCoorddvEXT = - (PFNGLFOGCOORDDVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glFogCoorddvEXT"); - pContext->glRenderTable.FogCoordPointerEXT = - (PFNGLFOGCOORDPOINTEREXTPROC) - glitz_context_get_proc_address (pContext->context, - "glFogCoordPointerEXT"); - } - - if (strstr (extensions, "GL_EXT_secondary_color")) - { - pContext->glRenderTable.SecondaryColor3bvEXT = - (PFNGLSECONDARYCOLOR3BVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glSecondaryColor3bvEXT"); - pContext->glRenderTable.SecondaryColor3dvEXT = - (PFNGLSECONDARYCOLOR3DVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glSecondaryColor3dvEXT"); - pContext->glRenderTable.SecondaryColor3fvEXT = - (PFNGLSECONDARYCOLOR3FVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glSecondaryColor3fvEXT"); - pContext->glRenderTable.SecondaryColor3ivEXT = - (PFNGLSECONDARYCOLOR3IVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glSecondaryColor3ivEXT"); - pContext->glRenderTable.SecondaryColor3svEXT = - (PFNGLSECONDARYCOLOR3SVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glSecondaryColor3svEXT"); - pContext->glRenderTable.SecondaryColor3ubvEXT = - (PFNGLSECONDARYCOLOR3UBVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glSecondaryColor3ubvEXT"); - pContext->glRenderTable.SecondaryColor3uivEXT = - (PFNGLSECONDARYCOLOR3UIVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glSecondaryColor3uivEXT"); - pContext->glRenderTable.SecondaryColor3usvEXT = - (PFNGLSECONDARYCOLOR3USVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glSecondaryColor3usvEXT"); - pContext->glRenderTable.SecondaryColorPointerEXT = - (PFNGLSECONDARYCOLORPOINTEREXTPROC) - glitz_context_get_proc_address (pContext->context, - "glSecondaryColorPointerEXT"); - } - - if (strstr (extensions, "GL_NV_point_sprite")) - { - pContext->glRenderTable.PointParameteriNV = - (PFNGLPOINTPARAMETERINVPROC) - glitz_context_get_proc_address (pContext->context, - "glPointParameteriNV"); - pContext->glRenderTable.PointParameterivNV = - (PFNGLPOINTPARAMETERIVNVPROC) - glitz_context_get_proc_address (pContext->context, - "glPointParameterivNV"); - } - - if (strstr (extensions, "GL_EXT_stencil_two_side")) - { - pContext->glRenderTable.ActiveStencilFaceEXT = - (PFNGLACTIVESTENCILFACEEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glActiveStencilFaceEXT"); - } - - if (strstr (extensions, "GL_EXT_framebuffer_object")) - { - pContext->glRenderTable.IsRenderbufferEXT = - (PFNGLISRENDERBUFFEREXTPROC) - glitz_context_get_proc_address (pContext->context, - "glIsRenderbufferEXT"); - pContext->glRenderTable.BindRenderbufferEXT = - (PFNGLBINDRENDERBUFFEREXTPROC) - glitz_context_get_proc_address (pContext->context, - "glBindRenderbufferEXT"); - pContext->glRenderTable.DeleteRenderbuffersEXT = - (PFNGLDELETERENDERBUFFERSEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glDeleteRenderbuffersEXT"); - pContext->glRenderTable.GenRenderbuffersEXT = - (PFNGLGENRENDERBUFFERSEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glGenRenderbuffersEXT"); - pContext->glRenderTable.RenderbufferStorageEXT = - (PFNGLRENDERBUFFERSTORAGEEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glRenderbufferStorageEXT"); - pContext->glRenderTable.GetRenderbufferParameterivEXT = - (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glGetRenderbufferParameterivEXT"); - pContext->glRenderTable.IsFramebufferEXT = - (PFNGLISFRAMEBUFFEREXTPROC) - glitz_context_get_proc_address (pContext->context, - "glIsFramebufferEXT"); - pContext->glRenderTable.BindFramebufferEXT = - (PFNGLBINDFRAMEBUFFEREXTPROC) - glitz_context_get_proc_address (pContext->context, - "glBindFramebufferEXT"); - pContext->glRenderTable.DeleteFramebuffersEXT = - (PFNGLDELETEFRAMEBUFFERSEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glDeleteFramebuffersEXT"); - pContext->glRenderTable.GenFramebuffersEXT = - (PFNGLGENFRAMEBUFFERSEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glGenFramebuffersEXT"); - pContext->glRenderTable.CheckFramebufferStatusEXT = - (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glCheckFramebufferStatusEXT"); - pContext->glRenderTable.FramebufferTexture1DEXT = - (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glFramebufferTexture1DEXT"); - pContext->glRenderTable.FramebufferTexture2DEXT = - (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glFramebufferTexture2DEXT"); - pContext->glRenderTable.FramebufferTexture3DEXT = - (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glFramebufferTexture3DEXT"); - pContext->glRenderTable.FramebufferRenderbufferEXT = - (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) - glitz_context_get_proc_address (pContext->context, - "glFramebufferRenderbufferEXT"); - pContext->glRenderTable.GetFramebufferAttachmentParameterivEXT = - (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glGetFramebufferAttachment" - "ParameterivEXT"); - pContext->glRenderTable.GenerateMipmapEXT = - (PFNGLGENERATEMIPMAPEXTPROC) - glitz_context_get_proc_address (pContext->context, - "glGenerateMipmapEXT"); - } -} - -static void -xglSetCurrentContext (xglGLContextPtr pContext) -{ - cctx = pContext; - - glitz_context_make_current (cctx->context, cctx->pDrawBuffer->drawable); - - GlxSetRenderTables (&cctx->glRenderTable); -} - -static void -xglFreeContext (xglGLContextPtr pContext) -{ - int i; - - pContext->refcnt--; - if (pContext->shared == pContext) - pContext->refcnt--; - - if (pContext->refcnt) - return; - - if (pContext->shared != pContext) - xglFreeContext (pContext->shared); - - if (pContext->texObjects) - { - xglTexObjPtr pTexObj; - GLuint key; - - do { - key = xglHashFirstEntry (pContext->texObjects); - if (key) - { - pTexObj = (xglTexObjPtr) xglHashLookup (pContext->texObjects, - key); - if (pTexObj) - xglUnrefTexObj (pTexObj); - - xglHashRemove (pContext->texObjects, key); - } - } while (key); - - xglDeleteHashTable (pContext->texObjects); - } - - if (pContext->displayLists) - { - xglDisplayListPtr pDisplayList; - GLuint key; - - do { - key = xglHashFirstEntry (pContext->displayLists); - if (key) - { - pDisplayList = (xglDisplayListPtr) - xglHashLookup (pContext->displayLists, key); - if (pDisplayList) - xglDestroyList (pDisplayList); - - xglHashRemove (pContext->displayLists, key); - } - } while (key); - - xglDeleteHashTable (pContext->displayLists); - } - - for (i = 0; i < pContext->maxTexUnits; i++) - { - xglUnrefTexObj (pContext->attrib.texUnits[i].p1D); - xglUnrefTexObj (pContext->attrib.texUnits[i].p2D); - xglUnrefTexObj (pContext->attrib.texUnits[i].p3D); - xglUnrefTexObj (pContext->attrib.texUnits[i].pRect); - xglUnrefTexObj (pContext->attrib.texUnits[i].pCubeMap); - } - - if (pContext->groupList) - glDeleteLists (pContext->groupList, 1); - - if (pContext->context) - glitz_context_destroy (pContext->context); - - if (pContext->versionString) - xfree (pContext->versionString); - - xfree (pContext); -} - -static GLboolean -xglDestroyContext (__GLcontext *gc) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - __GLinterface *iface = pContext->mIface; - - xglFreeContext (pContext); - - if (!iface) - return GL_TRUE; - - return (*iface->exports.destroyContext) ((__GLcontext *) iface); -} - -static GLboolean -xglLoseCurrent (__GLcontext *gc) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - __GLinterface *iface = pContext->mIface; - - GlxFlushContextCache (); - GlxSetRenderTables (0); - - if (!iface) - return GL_TRUE; - - return (*iface->exports.loseCurrent) ((__GLcontext *) iface); -} - -static GLboolean -xglMakeCurrent (__GLcontext *gc) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - __GLinterface *iface = &pContext->iface; - __GLinterface *mIface = pContext->mIface; - __GLdrawablePrivate *drawPriv = iface->imports.getDrawablePrivate (gc); - __GLdrawablePrivate *readPriv = iface->imports.getReadablePrivate (gc); - xglGLBufferPtr pDrawBufferPriv = drawPriv->private; - xglGLBufferPtr pReadBufferPriv = readPriv->private; - GLboolean status = GL_TRUE; - - if (pReadBufferPriv->pDrawable && pDrawBufferPriv->pDrawable) - { - XID values[2] = { ClipByChildren, 0 }; - int status; - -#ifdef COMPOSITE - /* XXX: temporary hack for root window drawing using - IncludeInferiors */ - if (pDrawBufferPriv->pDrawable->type == DRAWABLE_WINDOW && - (!((WindowPtr) (pDrawBufferPriv->pDrawable))->parent)) - values[0] = IncludeInferiors; -#endif - - /* this happens if client previously used this context with a buffer - not supported by the native GL stack */ - if (!pContext->context) - return GL_FALSE; - - /* XXX: GLX_SGI_make_current_read disabled for now */ - if (pDrawBufferPriv != pReadBufferPriv) - return GL_FALSE; - - if (!pReadBufferPriv->pGC) - pReadBufferPriv->pGC = - CreateGC (pReadBufferPriv->pDrawable, - GCSubwindowMode | GCGraphicsExposures, values, - &status); - - ValidateGC (pReadBufferPriv->pDrawable, pReadBufferPriv->pGC); - - if (!pDrawBufferPriv->pGC) - pDrawBufferPriv->pGC = - CreateGC (pDrawBufferPriv->pDrawable, - GCSubwindowMode | GCGraphicsExposures, values, - &status); - - ValidateGC (pDrawBufferPriv->pDrawable, pDrawBufferPriv->pGC); - - pReadBufferPriv->pPixmap = (PixmapPtr) 0; - pDrawBufferPriv->pPixmap = (PixmapPtr) 0; - - pContext->pReadBuffer = pReadBufferPriv; - pContext->pDrawBuffer = pDrawBufferPriv; - - pContext->readPriv = readPriv; - pContext->drawPriv = drawPriv; - - /* from now on this context can only be used with native GL stack */ - if (mIface) - { - (*mIface->exports.destroyContext) ((__GLcontext *) mIface); - pContext->mIface = NULL; - } - } - else - { - /* this happens if client previously used this context with a buffer - supported by the native GL stack */ - if (!mIface) - return GL_FALSE; - - drawPriv->private = pDrawBufferPriv->private; - readPriv->private = pReadBufferPriv->private; - - status = (*mIface->exports.makeCurrent) ((__GLcontext *) mIface); - - drawPriv->private = pDrawBufferPriv; - readPriv->private = pReadBufferPriv; - - /* from now on this context can not be used with native GL stack */ - if (status == GL_TRUE && pContext->context) - { - glitz_context_destroy (pContext->context); - pContext->context = NULL; - } - } - - return status; -} - -static GLboolean -xglShareContext (__GLcontext *gc, - __GLcontext *gcShare) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - xglGLContextPtr pContextShare = (xglGLContextPtr) gcShare; - __GLinterface *iface = pContext->mIface; - __GLinterface *ifaceShare = pContextShare->mIface; - - if (!iface || !ifaceShare) - return GL_TRUE; - - return (*iface->exports.shareContext) ((__GLcontext *) iface, - (__GLcontext *) ifaceShare); -} - -static GLboolean -xglCopyContext (__GLcontext *dst, - const __GLcontext *src, - GLuint mask) -{ - xglGLContextPtr pDst = (xglGLContextPtr) dst; - xglGLContextPtr pSrc = (xglGLContextPtr) src; - const __GLcontext *srcCtx = (const __GLcontext *) pSrc->mIface; - __GLinterface *dstIface = (__GLinterface *) pDst->mIface; - GLboolean status = GL_TRUE; - - if (pSrc->context && pDst->context) - glitz_context_copy (pSrc->context, pDst->context, mask); - else - status = GL_FALSE; - - if (dstIface && srcCtx) - status = (*dstIface->exports.copyContext) ((__GLcontext *) dstIface, - srcCtx, - mask); - - return status; -} - -static Bool -xglResizeBuffer (__GLdrawablePrivate *glPriv, - int x, - int y, - unsigned int width, - unsigned int height) -{ - xglGLBufferPtr pBufferPriv = glPriv->private; - DrawablePtr pDrawable = pBufferPriv->pDrawable; - - XGL_SCREEN_PRIV (pDrawable->pScreen); - XGL_DRAWABLE_PIXMAP (pBufferPriv->pDrawable); - - if (pPixmap != pScreenPriv->pScreenPixmap) - { - if (!xglCreatePixmapSurface (pPixmap)) - return FALSE; - - if (pBufferPriv->drawable == pScreenPriv->drawable) - { - if (pBufferPriv->backSurface) - glitz_surface_destroy (pBufferPriv->backSurface); - - glitz_drawable_destroy (pBufferPriv->drawable); - - pBufferPriv->drawable = NULL; - pBufferPriv->backSurface = NULL; - } - - if (pBufferPriv->drawable) - { - glitz_drawable_update_size (pBufferPriv->drawable, - pPixmap->drawable.width, - pPixmap->drawable.height); - } - else - { - glitz_drawable_format_t *format; - - format = pBufferPriv->pVisual->format.drawable; - if (pBufferPriv->pVisual->pbuffer) - { - pBufferPriv->drawable = - glitz_create_pbuffer_drawable (pScreenPriv->drawable, - format, - pPixmap->drawable.width, - pPixmap->drawable.height); - } - else - { - pBufferPriv->drawable = - glitz_create_drawable (pScreenPriv->drawable, format, - pPixmap->drawable.width, - pPixmap->drawable.height); - - if (!pBufferPriv->drawable) - return FALSE; - - if (format->doublebuffer) - { - glitz_format_t *backFormat; - - backFormat = pBufferPriv->pVisual->format.surface; - - pBufferPriv->backSurface = - glitz_surface_create (pScreenPriv->drawable, backFormat, - pPixmap->drawable.width, - pPixmap->drawable.height, - 0, NULL); - if (pBufferPriv->backSurface) - glitz_surface_attach (pBufferPriv->backSurface, - pBufferPriv->drawable, - GLITZ_DRAWABLE_BUFFER_BACK_COLOR); - } - } - } - } - else - { - glitz_drawable_reference (pScreenPriv->drawable); - - if (pBufferPriv->backSurface) - glitz_surface_destroy (pBufferPriv->backSurface); - - if (pBufferPriv->drawable) - glitz_drawable_destroy (pBufferPriv->drawable); - - pBufferPriv->drawable = pScreenPriv->drawable; - pBufferPriv->backSurface = NULL; - } - - ValidateGC (pDrawable, pBufferPriv->pGC); - - return TRUE; -} - -static GLboolean -xglForceCurrent (__GLcontext *gc) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - __GLinterface *iface = pContext->mIface; - GLboolean status = GL_TRUE; - - if (pContext && pContext->context) - { - __GLdrawablePrivate *readPriv, *drawPriv; - - readPriv = pContext->readPriv; - drawPriv = pContext->drawPriv; - - drawPriv->lockDP (drawPriv, gc); - if (readPriv != drawPriv) - readPriv->lockDP (readPriv, gc); - - cctx = pContext; - - if (cctx->pReadBuffer->pDrawable && cctx->pDrawBuffer->pDrawable) - { - DrawablePtr pDrawable = cctx->pReadBuffer->pDrawable; - PixmapPtr pReadPixmap, pDrawPixmap; - - XGL_SCREEN_PRIV (pDrawable->pScreen); - - if (pDrawable->type != DRAWABLE_PIXMAP) - { - pReadPixmap = XGL_GET_WINDOW_PIXMAP (pDrawable); - cctx->pReadBuffer->screenX = __XGL_OFF_X_WIN (pReadPixmap); - cctx->pReadBuffer->screenY = __XGL_OFF_Y_WIN (pReadPixmap); - cctx->pReadBuffer->xOff = pDrawable->x + - __XGL_OFF_X_WIN (pReadPixmap); - cctx->pReadBuffer->yOff = pReadPixmap->drawable.height - - ((pDrawable->y + __XGL_OFF_Y_WIN (pReadPixmap)) + - pDrawable->height); - cctx->pReadBuffer->yFlip = pReadPixmap->drawable.height; - } - else - { - pReadPixmap = (PixmapPtr) pDrawable; - cctx->pReadBuffer->screenX = cctx->pReadBuffer->screenY = 0; - cctx->pReadBuffer->xOff = cctx->pReadBuffer->yOff = 0; - cctx->pReadBuffer->yFlip = pDrawable->height; - } - - pDrawable = cctx->pDrawBuffer->pDrawable; - if (pDrawable->type != DRAWABLE_PIXMAP) - { - pDrawPixmap = XGL_GET_WINDOW_PIXMAP (pDrawable); - cctx->pDrawBuffer->screenX = __XGL_OFF_X_WIN (pDrawPixmap); - cctx->pDrawBuffer->screenY = __XGL_OFF_Y_WIN (pDrawPixmap); - cctx->pDrawBuffer->xOff = pDrawable->x + - __XGL_OFF_X_WIN (pDrawPixmap); - cctx->pDrawBuffer->yOff = pDrawPixmap->drawable.height - - ((pDrawable->y + __XGL_OFF_Y_WIN (pDrawPixmap)) + - pDrawable->height); - cctx->pDrawBuffer->yFlip = pDrawPixmap->drawable.height; - } - else - { - pDrawPixmap = (PixmapPtr) pDrawable; - cctx->pDrawBuffer->screenX = cctx->pDrawBuffer->screenY = 0; - cctx->pDrawBuffer->xOff = cctx->pDrawBuffer->yOff = 0; - cctx->pDrawBuffer->yFlip = pDrawable->height; - } - - /* buffer changed */ - if (cctx->pDrawBuffer->pPixmap != pDrawPixmap || - cctx->pReadBuffer->pPixmap != pReadPixmap) - { - if (!xglResizeBuffer (drawPriv, - pDrawable->x, - pDrawable->y, - pDrawable->width, - pDrawable->height)) - { - drawPriv->unlockDP (drawPriv); - if (readPriv != drawPriv) - readPriv->unlockDP (readPriv); - - return FALSE; - } - - if (!xglResizeBuffer (readPriv, - cctx->pReadBuffer->pDrawable->x, - cctx->pReadBuffer->pDrawable->y, - cctx->pReadBuffer->pDrawable->width, - cctx->pReadBuffer->pDrawable->height)) - { - drawPriv->unlockDP (drawPriv); - if (readPriv != drawPriv) - readPriv->unlockDP (readPriv); - - return FALSE; - } - - cctx->pReadBuffer->pPixmap = pReadPixmap; - cctx->pDrawBuffer->pPixmap = pDrawPixmap; - } - - if (!xglSyncSurface (pContext->pDrawBuffer->pDrawable)) - { - drawPriv->unlockDP (drawPriv); - if (readPriv != drawPriv) - readPriv->unlockDP (readPriv); - - return FALSE; - } - - if (pDrawPixmap != pScreenPriv->pScreenPixmap) - { - XGL_PIXMAP_PRIV (pDrawPixmap); - - glitz_surface_attach (pPixmapPriv->surface, - pContext->pDrawBuffer->drawable, - GLITZ_DRAWABLE_BUFFER_FRONT_COLOR); - - if (pPixmapPriv->target) - pPixmapPriv->target = xglPixmapTargetOut; - } - - xglSetCurrentContext (pContext); - - if (cctx->needInit) - { - int i; - - xglInitExtensions (cctx); - - glGetIntegerv (GL_MAX_LIST_NESTING, &cctx->maxListNesting); - glGetIntegerv (GL_MAX_ATTRIB_STACK_DEPTH, - &cctx->maxAttribStackDepth); - if (cctx->maxAttribStackDepth > XGL_MAX_ATTRIB_STACK_DEPTH) - cctx->maxAttribStackDepth = XGL_MAX_ATTRIB_STACK_DEPTH; - - cctx->attrib.scissorTest = GL_FALSE; - cctx->attrib.scissor.x = cctx->attrib.scissor.y = 0; - cctx->attrib.scissor.width = - cctx->pDrawBuffer->pDrawable->width; - cctx->attrib.scissor.height = - cctx->pDrawBuffer->pDrawable->height; - cctx->attrib.viewport = cctx->attrib.scissor; - - cctx->activeTexUnit = 0; - - for (i = 0; i < cctx->maxTexUnits; i++) - { - cctx->attrib.texUnits[i].enabled = 0; - - cctx->attrib.texUnits[i].p1D = NULL; - cctx->attrib.texUnits[i].p2D = NULL; - cctx->attrib.texUnits[i].p3D = NULL; - cctx->attrib.texUnits[i].pRect = NULL; - cctx->attrib.texUnits[i].pCubeMap = NULL; - } - - glEnable (GL_SCISSOR_TEST); - - cctx->needInit = FALSE; - } - - /* update viewport and raster position */ - if (cctx->pDrawBuffer->xOff != cctx->drawXoff || - cctx->pDrawBuffer->yOff != cctx->drawYoff) - { - glViewport (cctx->attrib.viewport.x + cctx->pDrawBuffer->xOff, - cctx->attrib.viewport.y + cctx->pDrawBuffer->yOff, - cctx->attrib.viewport.width, - cctx->attrib.viewport.height); - - glBitmap (0, 0, 0, 0, - cctx->pDrawBuffer->xOff - cctx->drawXoff, - cctx->pDrawBuffer->yOff - cctx->drawYoff, - NULL); - - cctx->drawXoff = cctx->pDrawBuffer->xOff; - cctx->drawYoff = cctx->pDrawBuffer->yOff; - } - - xglDrawBuffer (cctx->attrib.drawBuffer); - xglReadBuffer (cctx->attrib.readBuffer); - } - else - { - xglSetCurrentContext (pContext); - } - - drawPriv->unlockDP (drawPriv); - if (readPriv != drawPriv) - readPriv->unlockDP (readPriv); - } - else - { - cctx = NULL; - status = (*iface->exports.forceCurrent) ((__GLcontext *) iface); - } - - return status; -} - -static GLboolean -xglNotifyResize (__GLcontext *gc) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - __GLinterface *iface = pContext->mIface; - - if (!iface) - return GL_TRUE; - - return (*iface->exports.notifyResize) ((__GLcontext *) iface); -} - -static void -xglNotifyDestroy (__GLcontext *gc) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - __GLinterface *iface = pContext->mIface; - - pContext->pReadBuffer->pDrawable = 0; - pContext->pDrawBuffer->pDrawable = 0; - - if (iface) - (*iface->exports.notifyDestroy) ((__GLcontext *) iface); -} - -static void -xglNotifySwapBuffers (__GLcontext *gc) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - __GLinterface *iface = pContext->mIface; - - if (iface) - (*iface->exports.notifySwapBuffers) ((__GLcontext *) iface); -} - -static struct __GLdispatchStateRec * -xglDispatchExec (__GLcontext *gc) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - __GLinterface *iface = pContext->mIface; - - if (!iface) - return NULL; - - return (*iface->exports.dispatchExec) ((__GLcontext *) iface); -} - -static void -xglBeginDispatchOverride (__GLcontext *gc) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - __GLinterface *iface = pContext->mIface; - - if (iface) - (*iface->exports.beginDispatchOverride) ((__GLcontext *) iface); -} - -static void -xglEndDispatchOverride (__GLcontext *gc) -{ - xglGLContextPtr pContext = (xglGLContextPtr) gc; - __GLinterface *iface = pContext->mIface; - - if (iface) - (*iface->exports.endDispatchOverride) ((__GLcontext *) iface); -} - -static void -xglLoseCurrentContext (void *closure) -{ - if (closure == cctx) - { - cctx = NULL; - - GlxFlushContextCache (); - GlxSetRenderTables (0); - } -} - -static __GLinterface * -xglCreateContext (__GLimports *imports, - __GLcontextModes *modes, - __GLinterface *shareGC) -{ - glitz_drawable_format_t *format; - xglGLContextPtr pShareContext = (xglGLContextPtr) shareGC; - xglGLContextPtr pContext; - __GLinterface *shareIface = NULL; - __GLinterface *iface; - __GLXcontext *glxCtx = (__GLXcontext *) imports->other; - - XGL_SCREEN_PRIV (glxCtx->pScreen); - - pContext = xalloc (sizeof (xglGLContextRec)); - if (!pContext) - return NULL; - - format = glitz_drawable_get_format (pScreenPriv->drawable); - pContext->context = glitz_context_create (pScreenPriv->drawable, format); - glitz_context_set_user_data (pContext->context, pContext, - xglLoseCurrentContext); - - pContext->glRenderTable = __glNativeRenderTable; - pContext->needInit = TRUE; - pContext->versionString = NULL; - pContext->errorValue = GL_NO_ERROR; - pContext->shared = NULL; - pContext->list = 0; - pContext->groupList = 0; - pContext->beginCnt = 0; - pContext->nAttribStack = 0; - pContext->refcnt = 1; - pContext->doubleBuffer = glxCtx->modes->doubleBufferMode; - pContext->depthBits = glxCtx->modes->depthBits; - pContext->stencilBits = glxCtx->modes->stencilBits; - pContext->drawXoff = 0; - pContext->drawYoff = 0; - pContext->maxTexUnits = 0; - - if (pContext->doubleBuffer) - { - pContext->attrib.drawBuffer = GL_BACK; - pContext->attrib.readBuffer = GL_BACK; - } - else - { - pContext->attrib.drawBuffer = GL_FRONT; - pContext->attrib.readBuffer = GL_FRONT; - } - - pContext->attrib.scissorTest = GL_FALSE; - - if (shareGC) - { - pContext->texObjects = NULL; - pContext->displayLists = NULL; - - pContext->shared = pShareContext->shared; - shareIface = pShareContext->mIface; - } - else - { - pContext->texObjects = xglNewHashTable (); - if (!pContext->texObjects) - { - xglFreeContext (pContext); - return NULL; - } - - pContext->displayLists = xglNewHashTable (); - if (!pContext->displayLists) - { - xglFreeContext (pContext); - return NULL; - } - - pContext->shared = pContext; - } - - pContext->shared->refcnt++; - - iface = (*screenInfoPriv.createContext) (imports, modes, shareIface); - if (!iface) - { - xglFreeContext (pContext); - return NULL; - } - - pContext->mIface = iface; - pContext->iface.imports = *imports; - - pContext->iface.exports.destroyContext = xglDestroyContext; - pContext->iface.exports.loseCurrent = xglLoseCurrent; - pContext->iface.exports.makeCurrent = xglMakeCurrent; - pContext->iface.exports.shareContext = xglShareContext; - pContext->iface.exports.copyContext = xglCopyContext; - pContext->iface.exports.forceCurrent = xglForceCurrent; - pContext->iface.exports.notifyResize = xglNotifyResize; - pContext->iface.exports.notifyDestroy = xglNotifyDestroy; - pContext->iface.exports.notifySwapBuffers = xglNotifySwapBuffers; - pContext->iface.exports.dispatchExec = xglDispatchExec; - pContext->iface.exports.beginDispatchOverride = xglBeginDispatchOverride; - pContext->iface.exports.endDispatchOverride = xglEndDispatchOverride; - - return (__GLinterface *) pContext; -} - -static GLboolean -xglSwapBuffers (__GLXdrawablePrivate *glxPriv) -{ - __GLdrawablePrivate *glPriv = &glxPriv->glPriv; - xglGLBufferPtr pBufferPriv = glPriv->private; - DrawablePtr pDrawable = pBufferPriv->pDrawable; - GLboolean status = GL_TRUE; - - if (pDrawable) - { - if (glPriv->modes->doubleBufferMode) - { - glitz_surface_t *surface; - int xOff, yOff; - GCPtr pGC = pBufferPriv->pGC; - BoxPtr pBox = REGION_RECTS (pGC->pCompositeClip); - int nBox = REGION_NUM_RECTS (pGC->pCompositeClip); - - XGL_GET_DRAWABLE (pDrawable, surface, xOff, yOff); - - glitz_drawable_swap_buffer_region (pBufferPriv->drawable, - xOff, yOff, - (glitz_box_t *) pBox, nBox); - - xglAddBitDamage (pDrawable, pGC->pCompositeClip); - DamageDamageRegion (pDrawable, pGC->pCompositeClip); - REGION_EMPTY (pGC->pScreen, &pBufferPriv->damage); - } - } - else if (pBufferPriv->private) - { - glPriv->private = pBufferPriv->private; - status = (*pBufferPriv->swapBuffers) (glxPriv); - glPriv->private = pBufferPriv; - } - - return status; -} - -static GLboolean -xglResizeBuffers (__GLdrawableBuffer *buffer, - GLint x, - GLint y, - GLuint width, - GLuint height, - __GLdrawablePrivate *glPriv, - GLuint bufferMask) -{ - xglGLBufferPtr pBufferPriv = glPriv->private; - DrawablePtr pDrawable = pBufferPriv->pDrawable; - GLboolean status = GL_TRUE; - - if (pDrawable) - { - if (!xglResizeBuffer (glPriv, x, y, width, height)) - return GL_FALSE; - } - else if (pBufferPriv->private) - { - glPriv->private = pBufferPriv->private; - status = (*pBufferPriv->resizeBuffers) (buffer, - x, y, width, height, - glPriv, - bufferMask); - glPriv->private = pBufferPriv; - } - - return status; -} - -static int -xglBindBuffers (__GLXdrawablePrivate *glxPriv, - int buffer) -{ - __GLdrawablePrivate *glPriv = &glxPriv->glPriv; - xglGLBufferPtr pBufferPriv = glPriv->private; - - if (cctx) - { - xglTexUnitPtr pTexUnit = &cctx->attrib.texUnits[cctx->activeTexUnit]; - xglTexObjPtr pTexObj = NULL; - DrawablePtr pDrawable; - - /* XXX: front left buffer is only supported so far */ - if (buffer != GLX_FRONT_LEFT_EXT) - return BadMatch; - - /* Must be a GLXpixmap */ - if (!glxPriv->pGlxPixmap) - return BadDrawable; - - pDrawable = glxPriv->pGlxPixmap->pDraw; - - switch (glxPriv->texTarget) { - case GLX_TEXTURE_RECTANGLE_EXT: - pTexObj = pTexUnit->pRect; - break; - case GLX_TEXTURE_2D_EXT: - pTexObj = pTexUnit->p2D; - break; - default: - break; - } - - if (pTexObj) - { - glitz_texture_object_t *object; - - XGL_SCREEN_PRIV (pDrawable->pScreen); - XGL_DRAWABLE_PIXMAP (pDrawable); - XGL_PIXMAP_PRIV (pPixmap); - - if (pPixmap == pScreenPriv->pScreenPixmap) - return BadDrawable; - - object = glitz_texture_object_create (pPixmapPriv->surface); - if (object) - { - pPixmap->refcnt++; - - if (pTexObj->pPixmap) - (*pDrawable->pScreen->DestroyPixmap) (pTexObj->pPixmap); - - if (pTexObj->object) - glitz_texture_object_destroy (pTexObj->object); - - pTexObj->pPixmap = pPixmap; - pTexObj->object = object; - - return Success; - } - } - } - else if (pBufferPriv->private) - { - int status; - - glPriv->private = pBufferPriv->private; - status = (*pBufferPriv->bindBuffers) (glxPriv, buffer); - glPriv->private = pBufferPriv; - - return status; - } - - return BadDrawable; -} - -static int -xglReleaseBuffers (__GLXdrawablePrivate *glxPriv, - int buffer) -{ - __GLdrawablePrivate *glPriv = &glxPriv->glPriv; - xglGLBufferPtr pBufferPriv = glPriv->private; - - if (cctx) - { - xglTexObjPtr pTexObj; - - /* XXX: front left buffer is only supported so far */ - if (buffer != GLX_FRONT_LEFT_EXT) - return BadMatch; - - /* Must be a GLXpixmap */ - if (glxPriv->pGlxPixmap) - { - DrawablePtr pDrawable = glxPriv->pGlxPixmap->pDraw; - - XGL_DRAWABLE_PIXMAP (pDrawable); - - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].p2D; - if (pTexObj && pTexObj->pPixmap == pPixmap) - { - (*pDrawable->pScreen->DestroyPixmap) (pTexObj->pPixmap); - pTexObj->pPixmap = NULL; - glitz_texture_object_destroy (pTexObj->object); - pTexObj->object = NULL; - - return Success; - } - else - { - pTexObj = cctx->attrib.texUnits[cctx->activeTexUnit].pRect; - if (pTexObj && pTexObj->pPixmap == pPixmap) - { - (*pDrawable->pScreen->DestroyPixmap) (pTexObj->pPixmap); - pTexObj->pPixmap = NULL; - glitz_texture_object_destroy (pTexObj->object); - pTexObj->object = NULL; - - return Success; - } - } - } - } - else if (pBufferPriv->private) - { - int status; - - glPriv->private = pBufferPriv->private; - status = (*pBufferPriv->releaseBuffers) (glxPriv, buffer); - glPriv->private = pBufferPriv; - - return status; - } - - return BadDrawable; -} -static void -xglFreeBuffers (__GLdrawablePrivate *glPriv) -{ - xglGLBufferPtr pBufferPriv = glPriv->private; - - glPriv->private = pBufferPriv->private; - - if (pBufferPriv->freeBuffers) - (*pBufferPriv->freeBuffers) (glPriv); - - if (pBufferPriv->pGC) - FreeGC (pBufferPriv->pGC, (GContext) 0); - - if (pBufferPriv->backSurface) - glitz_surface_destroy (pBufferPriv->backSurface); - - if (pBufferPriv->drawable) - glitz_drawable_destroy (pBufferPriv->drawable); - - xfree (pBufferPriv); -} - -static void -xglCreateBuffer (__GLXdrawablePrivate *glxPriv) -{ - __GLdrawablePrivate *glPriv = &glxPriv->glPriv; - DrawablePtr pDrawable = glxPriv->pDraw; - ScreenPtr pScreen = pDrawable->pScreen; - xglGLBufferPtr pBufferPriv; - xglVisualPtr v; - - XGL_SCREEN_PRIV (pScreen); - XGL_DRAWABLE_PIXMAP (pDrawable); - - pBufferPriv = xalloc (sizeof (xglGLBufferRec)); - if (!pBufferPriv) - FatalError ("xglCreateBuffer: No memory\n"); - - pBufferPriv->pScreen = pScreen; - pBufferPriv->pDrawable = NULL; - pBufferPriv->pPixmap = NULL; - pBufferPriv->pGC = NULL; - - pBufferPriv->swapBuffers = NULL; - - pBufferPriv->bindBuffers = NULL; - pBufferPriv->releaseBuffers = NULL; - - pBufferPriv->resizeBuffers = NULL; - pBufferPriv->private = NULL; - pBufferPriv->freeBuffers = NULL; - - pBufferPriv->drawable = NULL; - pBufferPriv->backSurface = NULL; - - REGION_INIT (pScreen, &pBufferPriv->damage, NullBox, 0); - - pBufferPriv->pVisual = 0; - - /* glx acceleration */ - if (pScreenPriv->accel.glx.enabled && - xglCheckPixmapSize (pPixmap, &pScreenPriv->accel.glx.size)) - { - for (v = pScreenPriv->pGlxVisual; v; v = v->next) - { - glitz_drawable_format_t *format; - - if (pScreenPriv->accel.glx.pbuffer != v->pbuffer) - continue; - - format = v->format.drawable; - if (!format) - continue; - - if (format->color.red_size != glxPriv->modes->redBits || - format->color.green_size != glxPriv->modes->greenBits || - format->color.blue_size != glxPriv->modes->blueBits) - continue; - - if (format->color.alpha_size < glxPriv->modes->alphaBits || - format->depth_size < glxPriv->modes->depthBits || - format->stencil_size < glxPriv->modes->stencilBits || - format->doublebuffer < glxPriv->modes->doubleBufferMode) - continue; - - /* this is good enought for pbuffers */ - if (v->pbuffer) - break; - - /* we want an exact match for non-pbuffer formats */ - if (format->color.alpha_size == glxPriv->modes->alphaBits && - format->depth_size == glxPriv->modes->depthBits && - format->stencil_size == glxPriv->modes->stencilBits && - format->doublebuffer == glxPriv->modes->doubleBufferMode) - break; - } - - pBufferPriv->pVisual = v; - } - - if ((pDrawable->type == DRAWABLE_WINDOW) - -#ifdef COMPOSITE - && (pBufferPriv->pVisual - - /* this is a root window, can't be redirected */ - || (!((WindowPtr) pDrawable)->parent)) -#endif - - ) - { - pBufferPriv->pDrawable = pDrawable; - } - else - { - (*screenInfoPriv.createBuffer) (glxPriv); - - /* Wrap the swap buffers routine */ - pBufferPriv->swapBuffers = glxPriv->swapBuffers; - - /* Wrap the render texture routines */ - pBufferPriv->bindBuffers = glxPriv->bindBuffers; - pBufferPriv->releaseBuffers = glxPriv->releaseBuffers; - - /* Wrap the front buffer's resize routine */ - pBufferPriv->resizeBuffers = glPriv->frontBuffer.resize; - - /* Save Xgl's private buffer structure */ - pBufferPriv->freeBuffers = glPriv->freePrivate; - pBufferPriv->private = glPriv->private; - } - - glxPriv->texTarget = GLX_NO_TEXTURE_EXT; - - /* We enable render texture for all GLXPixmaps right now. Eventually, this - should only be enabled when fbconfig attribute GLX_RENDER_TEXTURE_RGB or - GLX_RENDER_TEXTURE_RGBA is set to TRUE. */ - if (pDrawable->type != DRAWABLE_WINDOW) - { - XGL_DRAWABLE_PIXMAP (pDrawable); - - if (xglCreatePixmapSurface (pPixmap)) - { - glitz_texture_object_t *texture; - - XGL_PIXMAP_PRIV (pPixmap); - - texture = glitz_texture_object_create (pPixmapPriv->surface); - if (texture) - { - switch (glitz_texture_object_get_target (texture)) { - case GLITZ_TEXTURE_TARGET_2D: - glxPriv->texTarget = GLX_TEXTURE_2D_EXT; - break; - case GLITZ_TEXTURE_TARGET_RECT: - glxPriv->texTarget = GLX_TEXTURE_RECTANGLE_EXT; - break; - } - - glitz_texture_object_destroy (texture); - } - } - } - - glxPriv->swapBuffers = xglSwapBuffers; - - glxPriv->bindBuffers = xglBindBuffers; - glxPriv->releaseBuffers = xglReleaseBuffers; - glPriv->frontBuffer.resize = xglResizeBuffers; - - glPriv->private = (void *) pBufferPriv; - glPriv->freePrivate = xglFreeBuffers; -} - -static Bool -xglScreenProbe (int screen) -{ - ScreenPtr pScreen = screenInfo.screens[screen]; - xglVisualPtr pVisual; - Bool status; - int i; - - XGL_SCREEN_PRIV (pScreen); - - status = (*screenInfoPriv.screenProbe) (screen); - - /* Create Xgl GLX visuals */ - for (i = 0; i < __xglScreenInfoPtr->numVisuals; i++) - { - pVisual = xglFindVisualWithId (pScreen, pScreen->visuals[i].vid); - if (pVisual) - { - glitz_drawable_format_t templ, *format, *screenFormat; - unsigned long mask; - - templ.color = pVisual->format.surface->color; - templ.depth_size = __xglScreenInfoPtr->modes[i].depthBits; - templ.stencil_size = __xglScreenInfoPtr->modes[i].stencilBits; - templ.doublebuffer = __xglScreenInfoPtr->modes[i].doubleBufferMode; - templ.samples = 1; - - mask = - GLITZ_FORMAT_FOURCC_MASK | - GLITZ_FORMAT_RED_SIZE_MASK | - GLITZ_FORMAT_GREEN_SIZE_MASK | - GLITZ_FORMAT_BLUE_SIZE_MASK | - GLITZ_FORMAT_ALPHA_SIZE_MASK | - GLITZ_FORMAT_DEPTH_SIZE_MASK | - GLITZ_FORMAT_STENCIL_SIZE_MASK | - GLITZ_FORMAT_DOUBLEBUFFER_MASK | - GLITZ_FORMAT_SAMPLES_MASK; - - format = glitz_find_drawable_format (pScreenPriv->drawable, - mask, &templ, 0); - if (format) - { - xglVisualPtr v, new, *prev; - - new = xalloc (sizeof (xglVisualRec)); - if (new) - { - new->next = 0; - new->vid = pVisual->vid; - new->pPixel = pVisual->pPixel; - new->pbuffer = FALSE; - - new->format.surface = pVisual->format.surface; - new->format.drawable = format; - - prev = &pScreenPriv->pGlxVisual; - while ((v = *prev)) - prev = &v->next; - - *prev = new; - } - } - - /* use same drawable format as screen for pbuffers */ - screenFormat = glitz_drawable_get_format (pScreenPriv->drawable); - templ.id = screenFormat->id; - - mask = - GLITZ_FORMAT_ID_MASK | - GLITZ_FORMAT_FOURCC_MASK | - GLITZ_FORMAT_RED_SIZE_MASK | - GLITZ_FORMAT_GREEN_SIZE_MASK | - GLITZ_FORMAT_BLUE_SIZE_MASK | - GLITZ_FORMAT_SAMPLES_MASK; - - format = glitz_find_pbuffer_format (pScreenPriv->drawable, - mask, &templ, 0); - if (format) - { - xglVisualPtr v, new, *prev; - - new = xalloc (sizeof (xglVisualRec)); - if (new) - { - new->next = 0; - new->vid = pVisual->vid; - new->pPixel = pVisual->pPixel; - new->pbuffer = TRUE; - - new->format.surface = pVisual->format.surface; - new->format.drawable = format; - - prev = &pScreenPriv->pGlxVisual; - while ((v = *prev)) - prev = &v->next; - - *prev = new; - } - } - } - } - - /* Wrap createBuffer */ - if (__xglScreenInfoPtr->createBuffer != xglCreateBuffer) - { - screenInfoPriv.createBuffer = __xglScreenInfoPtr->createBuffer; - __xglScreenInfoPtr->createBuffer = xglCreateBuffer; - } - - /* Wrap createContext */ - if (__xglScreenInfoPtr->createContext != xglCreateContext) - { - screenInfoPriv.createContext = __xglScreenInfoPtr->createContext; - __xglScreenInfoPtr->createContext = xglCreateContext; - } - - return status; -} - -Bool -xglInitVisualConfigs (ScreenPtr pScreen) -{ - miInitVisualsProcPtr initVisualsProc = NULL; - VisualPtr visuals; - int nvisuals; - DepthPtr depths; - int ndepths; - int rootDepth; - VisualID defaultVis; - glitz_drawable_format_t *format; - xglVisualPtr pVisual; - __GLXvisualConfig *pConfig; - xglGLXVisualConfigPtr pConfigPriv, *ppConfigPriv; - XID *installedCmaps; - ColormapPtr installedCmap; - int numInstalledCmaps; - int numConfig = 1; - int bpp, i; - - XGL_SCREEN_PRIV (pScreen); - - if (xglScreenInfo.depth != 16 && xglScreenInfo.depth != 24) - return FALSE; - - for (pVisual = xglVisuals; pVisual; pVisual = pVisual->next) - { - if (pVisual->pPixel->depth == xglScreenInfo.depth) - break; - } - - if (!pVisual) - return FALSE; - - bpp = pVisual->pPixel->masks.bpp; - - format = glitz_drawable_get_format (pScreenPriv->drawable); - if (format->doublebuffer) - numConfig *= 2; - - pConfig = xcalloc (sizeof (__GLXvisualConfig), numConfig); - if (!pConfig) - return FALSE; - - pConfigPriv = xcalloc (sizeof (xglGLXVisualConfigRec), numConfig); - if (!pConfigPriv) - { - xfree (pConfig); - return FALSE; - } - - ppConfigPriv = xcalloc (sizeof (xglGLXVisualConfigPtr), numConfig); - if (!ppConfigPriv) - { - xfree (pConfigPriv); - xfree (pConfig); - return FALSE; - } - - installedCmaps = xalloc (pScreen->maxInstalledCmaps * sizeof (XID)); - if (!installedCmaps) - { - xfree (ppConfigPriv); - xfree (pConfigPriv); - xfree (pConfig); - return FALSE; - } - - for (i = 0; i < numConfig; i++) - { - ppConfigPriv[i] = &pConfigPriv[i]; - - pConfig[i].vid = (VisualID) (-1); - pConfig[i].class = -1; - pConfig[i].rgba = TRUE; - - pConfig[i].redSize = format->color.red_size; - pConfig[i].greenSize = format->color.green_size; - pConfig[i].blueSize = format->color.blue_size; - pConfig[i].alphaSize = format->color.alpha_size; - - pConfig[i].redMask = pVisual->pPixel->masks.red_mask; - pConfig[i].greenMask = pVisual->pPixel->masks.green_mask; - pConfig[i].blueMask = pVisual->pPixel->masks.blue_mask; - pConfig[i].alphaMask = pVisual->pPixel->masks.alpha_mask; - - if (i == 1) - { - pConfig[i].doubleBuffer = FALSE; - pConfig[i].depthSize = 0; - pConfig[i].stencilSize = 0; - } - else - { - pConfig[i].doubleBuffer = TRUE; - pConfig[i].depthSize = format->depth_size; - pConfig[i].stencilSize = format->stencil_size; - } - - pConfig[i].stereo = FALSE; - - if (pScreen->rootDepth == 16) - pConfig[i].bufferSize = 16; - else - pConfig[i].bufferSize = 32; - - pConfig[i].auxBuffers = 0; - pConfig[i].level = 0; - - pConfig[i].visualRating = GLX_NONE; - - pConfig[i].transparentPixel = GLX_NONE; - pConfig[i].transparentRed = 0; - pConfig[i].transparentGreen = 0; - pConfig[i].transparentBlue = 0; - pConfig[i].transparentAlpha = 0; - pConfig[i].transparentIndex = 0; - } - - GlxSetVisualConfigs (numConfig, pConfig, (void **) ppConfigPriv); - - /* Wrap screenProbe */ - if (__xglScreenInfoPtr->screenProbe != xglScreenProbe) - { - screenInfoPriv.screenProbe = __xglScreenInfoPtr->screenProbe; - __xglScreenInfoPtr->screenProbe = xglScreenProbe; - } - - visuals = pScreen->visuals; - nvisuals = pScreen->numVisuals; - depths = pScreen->allowedDepths; - ndepths = pScreen->numDepths; - rootDepth = pScreen->rootDepth; - defaultVis = pScreen->rootVisual; - - /* Find installed colormaps */ - numInstalledCmaps = (*pScreen->ListInstalledColormaps) (pScreen, - installedCmaps); - - GlxWrapInitVisuals (&initVisualsProc); - GlxInitVisuals (&visuals, &depths, &nvisuals, &ndepths, &rootDepth, - &defaultVis, ((unsigned long) 1 << (bpp - 1)), 8, -1); - - /* Fix up any existing installed colormaps. */ - for (i = 0; i < numInstalledCmaps; i++) - { - int j; - - installedCmap = LookupIDByType (installedCmaps[i], RT_COLORMAP); - if (!installedCmap) - continue; - - j = installedCmap->pVisual - pScreen->visuals; - installedCmap->pVisual = &visuals[j]; - } - - pScreen->visuals = visuals; - pScreen->numVisuals = nvisuals; - pScreen->allowedDepths = depths; - pScreen->numDepths = ndepths; - pScreen->rootDepth = rootDepth; - pScreen->rootVisual = defaultVis; - -#ifndef NGLXLOG - xglInitGlxLog (); -#endif - - xfree (installedCmaps); - xfree (pConfigPriv); - xfree (pConfig); - - return TRUE; -} diff --git a/hw/xgl/glxext/xglglxext.h b/hw/xgl/glxext/xglglxext.h deleted file mode 100644 index c353783af..000000000 --- a/hw/xgl/glxext/xglglxext.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#ifndef _XGL_GLXEXT_H_ -#define _XGL_GLXEXT_H_ - -#include "scrnintstr.h" - -Bool -xglInitVisualConfigs (ScreenPtr pScreen); - -#ifndef NGLXEXTLOG - -void -xglInitGlxLog (void); - -#endif - -#endif /* _XGL_GLXEXT_H_ */ diff --git a/hw/xgl/glxext/xglglxlog.c b/hw/xgl/glxext/xglglxlog.c deleted file mode 100644 index 0f194c9ed..000000000 --- a/hw/xgl/glxext/xglglxlog.c +++ /dev/null @@ -1,4519 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xglglx.h" -#include "xglglxext.h" -#include "glapitable.h" - -#ifndef NGLXEXTLOG - -static struct _glapi_table *nativeRenderTable = 0; - -static FILE *logFp = 0; - -static Bool logVertexAttribs = FALSE; - -static struct VertexAttribCount { - int n; - char *name; -} vCnt[] = { - { 0, "glArrayElement" }, - { 0, "glCallList" }, - { 0, "glCallLists" }, - { 0, "glColor3bv" }, - { 0, "glColor3dv" }, - { 0, "glColor3fv" }, - { 0, "glColor3iv" }, - { 0, "glColor3sv" }, - { 0, "glColor3ubv" }, - { 0, "glColor3uiv" }, - { 0, "glColor3usv" }, - { 0, "glColor4bv" }, - { 0, "glColor4dv" }, - { 0, "glColor4fv" }, - { 0, "glColor4iv" }, - { 0, "glColor4sv" }, - { 0, "glColor4ubv" }, - { 0, "glColor4uiv" }, - { 0, "glColor4usv" }, - { 0, "glEdgeFlagv" }, - { 0, "glEvalCoord1dv" }, - { 0, "glEvalCoord1fv" }, - { 0, "glEvalCoord2dv" }, - { 0, "glEvalCoord2fv" }, - { 0, "glEvalPoint1" }, - { 0, "glEvalPoint2" }, - { 0, "glIndexdv" }, - { 0, "glIndexfv" }, - { 0, "glIndexiv" }, - { 0, "glIndexsv" }, - { 0, "glIndexubv" }, - { 0, "glMaterialf" }, - { 0, "glMaterialfv" }, - { 0, "glMateriali" }, - { 0, "glMaterialiv" }, - { 0, "glNormal3bv" }, - { 0, "glNormal3dv" }, - { 0, "glNormal3fv" }, - { 0, "glNormal3iv" }, - { 0, "glNormal3sv" }, - { 0, "glTexCoord1dv" }, - { 0, "glTexCoord1fv" }, - { 0, "glTexCoord1iv" }, - { 0, "glTexCoord1sv" }, - { 0, "glTexCoord2dv" }, - { 0, "glTexCoord2fv" }, - { 0, "glTexCoord2iv" }, - { 0, "glTexCoord2sv" }, - { 0, "glTexCoord3dv" }, - { 0, "glTexCoord3fv" }, - { 0, "glTexCoord3iv" }, - { 0, "glTexCoord3sv" }, - { 0, "glTexCoord4dv" }, - { 0, "glTexCoord4fv" }, - { 0, "glTexCoord4iv" }, - { 0, "glTexCoord4sv" }, - { 0, "glVertex2dv" }, - { 0, "glVertex2fv" }, - { 0, "glVertex2iv" }, - { 0, "glVertex2sv" }, - { 0, "glVertex3dv" }, - { 0, "glVertex3fv" }, - { 0, "glVertex3iv" }, - { 0, "glVertex3sv" }, - { 0, "glVertex4dv" }, - { 0, "glVertex4fv" }, - { 0, "glVertex4iv" }, - { 0, "glVertex4sv" }, - { 0, "glMultiTexCoord1dv" }, - { 0, "glMultiTexCoord1fv" }, - { 0, "glMultiTexCoord1iv" }, - { 0, "glMultiTexCoord1sv" }, - { 0, "glMultiTexCoord2dv" }, - { 0, "glMultiTexCoord2fv" }, - { 0, "glMultiTexCoord2iv" }, - { 0, "glMultiTexCoord2sv" }, - { 0, "glMultiTexCoord3dv" }, - { 0, "glMultiTexCoord3fv" }, - { 0, "glMultiTexCoord3iv" }, - { 0, "glMultiTexCoord3sv" }, - { 0, "glMultiTexCoord4dv" }, - { 0, "glMultiTexCoord4fv" }, - { 0, "glMultiTexCoord4iv" }, - { 0, "glMultiTexCoord4sv" }, - { 0, "glFogCoordfv" }, - { 0, "glFogCoorddv" }, - { 0, "glSecondaryColor3bv" }, - { 0, "glSecondaryColor3dv" }, - { 0, "glSecondaryColor3fv" }, - { 0, "glSecondaryColor3iv" }, - { 0, "glSecondaryColor3sv" }, - { 0, "glSecondaryColor3ubv" }, - { 0, "glSecondaryColor3uiv" }, - { 0, "glSecondaryColor3usv" } -}; - -#define arrayElementIndex 0 -#define callListIndex 1 -#define callListsIndex 2 -#define color3bvIndex 3 -#define color3dvIndex 4 -#define color3fvIndex 5 -#define color3ivIndex 6 -#define color3svIndex 7 -#define color3ubvIndex 8 -#define color3uivIndex 9 -#define color3usvIndex 10 -#define color4bvIndex 11 -#define color4dvIndex 12 -#define color4fvIndex 13 -#define color4ivIndex 14 -#define color4svIndex 15 -#define color4ubvIndex 16 -#define color4uivIndex 17 -#define color4usvIndex 18 -#define edgeFlagvIndex 19 -#define evalCoord1dvIndex 20 -#define evalCoord1fvIndex 21 -#define evalCoord2dvIndex 22 -#define evalCoord2fvIndex 23 -#define evalPoint1Index 24 -#define evalPoint2Index 25 -#define indexdvIndex 26 -#define indexfvIndex 27 -#define indexivIndex 28 -#define indexsvIndex 29 -#define indexubvIndex 30 -#define materialfIndex 31 -#define materialfvIndex 32 -#define materialiIndex 33 -#define materialivIndex 34 -#define normal3bvIndex 35 -#define normal3dvIndex 36 -#define normal3fvIndex 37 -#define normal3ivIndex 38 -#define normal3svIndex 39 -#define texCoord1dvIndex 40 -#define texCoord1fvIndex 41 -#define texCoord1ivIndex 42 -#define texCoord1svIndex 43 -#define texCoord2dvIndex 44 -#define texCoord2fvIndex 45 -#define texCoord2ivIndex 46 -#define texCoord2svIndex 47 -#define texCoord3dvIndex 48 -#define texCoord3fvIndex 49 -#define texCoord3ivIndex 50 -#define texCoord3svIndex 51 -#define texCoord4dvIndex 52 -#define texCoord4fvIndex 53 -#define texCoord4ivIndex 54 -#define texCoord4svIndex 55 -#define vertex2dvIndex 56 -#define vertex2fvIndex 57 -#define vertex2ivIndex 58 -#define vertex2svIndex 59 -#define vertex3dvIndex 60 -#define vertex3fvIndex 61 -#define vertex3ivIndex 62 -#define vertex3svIndex 63 -#define vertex4dvIndex 64 -#define vertex4fvIndex 65 -#define vertex4ivIndex 66 -#define vertex4svIndex 67 -#define multiTexCoord1dvIndex 68 -#define multiTexCoord1fvIndex 69 -#define multiTexCoord1ivIndex 70 -#define multiTexCoord1svIndex 71 -#define multiTexCoord2dvIndex 72 -#define multiTexCoord2fvIndex 73 -#define multiTexCoord2ivIndex 74 -#define multiTexCoord2svIndex 75 -#define multiTexCoord3dvIndex 76 -#define multiTexCoord3fvIndex 77 -#define multiTexCoord3ivIndex 78 -#define multiTexCoord3svIndex 79 -#define multiTexCoord4dvIndex 80 -#define multiTexCoord4fvIndex 81 -#define multiTexCoord4ivIndex 82 -#define multiTexCoord4svIndex 83 -#define fogCoordfvIndex 84 -#define fogCoorddvIndex 85 -#define secondaryColor3bvIndex 86 -#define secondaryColor3dvIndex 87 -#define secondaryColor3fvIndex 88 -#define secondaryColor3ivIndex 89 -#define secondaryColor3svIndex 90 -#define secondaryColor3ubvIndex 91 -#define secondaryColor3uivIndex 92 -#define secondaryColor3usvIndex 93 - -static void -logAccum (GLenum op, - GLfloat value) -{ - fprintf (logFp, "glAccum (0x%x, %f)\n", op, value); - (*nativeRenderTable->Accum) (op, value); -} - -static void -logAlphaFunc (GLenum func, - GLclampf ref) -{ - fprintf (logFp, "glAlphaFunc (0x%x, %f)\n", func, ref); - (*nativeRenderTable->AlphaFunc) (func, ref); -} - -static GLboolean -logAreTexturesResident (GLsizei n, - const GLuint *textures, - GLboolean *residences) -{ - fprintf (logFp, "glAreTexturesResident (%d, %p, %p)\n", n, textures, - residences); - return (*nativeRenderTable->AreTexturesResident) (n, textures, - residences); -} - -static void -logArrayElement (GLint i) -{ - vCnt[arrayElementIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glArrayElement (%d)\n", i); - (*nativeRenderTable->ArrayElement) (i); -} - -static void -logBegin (GLenum mode) -{ - fprintf (logFp, "glBegin (0x%x)\n", mode); - (*nativeRenderTable->Begin) (mode); -} - -static void -logBindTexture (GLenum target, - GLuint texture) -{ - fprintf (logFp, "glBindTexture (0x%x, %u)\n", target, texture); - (*nativeRenderTable->BindTexture) (target, texture); -} - -static void -logBitmap (GLsizei width, - GLsizei height, - GLfloat xorig, - GLfloat yorig, - GLfloat xmove, - GLfloat ymove, - const GLubyte *bitmap) -{ - fprintf (logFp, "glBitmap (%d, %d, %f, %f, %f, %f, %p)\n", - width, height, xorig, yorig, xmove, ymove, bitmap); - (*nativeRenderTable->Bitmap) (width, height, xorig, yorig, - xmove, ymove, bitmap); -} - -static void -logBlendFunc (GLenum sfactor, - GLenum dfactor) -{ - fprintf (logFp, "glBlendFunc (0x%x, 0x%x)\n", sfactor, dfactor); - (*nativeRenderTable->BlendFunc) (sfactor, dfactor); -} - -static void -logCallList (GLuint list) -{ - vCnt[callListIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glCallList (%u)\n", list); - (*nativeRenderTable->CallList) (list); -} - -static void -logCallLists (GLsizei n, - GLenum type, - const void *lists) -{ - vCnt[callListsIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glCallLists (%d, 0x%x, %p)\n", n, type, lists); - (*nativeRenderTable->CallLists) (n, type, lists); -} - -static void -logClear (GLbitfield mask) -{ - fprintf (logFp, "glClear (0x%x)\n", mask); - (*nativeRenderTable->Clear) (mask); -} - -static void -logClearAccum (GLfloat red, - GLfloat green, - GLfloat blue, - GLfloat alpha) -{ - fprintf (logFp, "glClearAccum (%f, %f, %f, %f)\n", - red, green, blue, alpha); - (*nativeRenderTable->ClearAccum) (red, green, blue, alpha); -} - -static void -logClearColor (GLclampf red, - GLclampf green, - GLclampf blue, - GLclampf alpha) -{ - fprintf (logFp, "glClearColor (%f, %f, %f, %f)\n", - red, green, blue, alpha); - (*nativeRenderTable->ClearColor) (red, green, blue, alpha); -} - -static void -logClearDepth (GLclampd depth) -{ - fprintf (logFp, "glClearDepth (%f)\n", depth); - (*nativeRenderTable->ClearDepth) (depth); -} - -static void -logClearIndex (GLfloat c) -{ - fprintf (logFp, "glClearIndex (%f)\n", c); - (*nativeRenderTable->ClearIndex) (c); -} - -static void -logClearStencil (GLint s) -{ - fprintf (logFp, "glClearStencil (%d)\n", s); - (*nativeRenderTable->ClearStencil) (s); -} - -static void -logClipPlane (GLenum plane, - const GLdouble *equation) -{ - fprintf (logFp, "glClipPlane (0x%x, %p)\n", plane, equation); - (*nativeRenderTable->ClipPlane) (plane, equation); -} - -static void -logColor3bv (const GLbyte *v) -{ - vCnt[color3bvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor3bv (%p)\n", v); - (*nativeRenderTable->Color3bv) (v); -} - -static void -logColor3dv (const GLdouble *v) -{ - vCnt[color3dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor3dv (%p)\n", v); - (*nativeRenderTable->Color3dv) (v); -} - -static void -logColor3fv (const GLfloat *v) -{ - vCnt[color3fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor3fv (%p)\n", v); - (*nativeRenderTable->Color3fv) (v); -} - -static void -logColor3iv (const GLint *v) -{ - vCnt[color3ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor3iv (%p)\n", v); - (*nativeRenderTable->Color3iv) (v); -} - -static void -logColor3sv (const GLshort *v) -{ - vCnt[color3svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor3sv (%p)\n", v); - (*nativeRenderTable->Color3sv) (v); -} - -static void -logColor3ubv (const GLubyte *v) -{ - vCnt[color3ubvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor3ubv (%p)\n", v); - (*nativeRenderTable->Color3ubv) (v); -} - -static void -logColor3uiv (const GLuint *v) -{ - vCnt[color3uivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor3uiv (%p)\n", v); - (*nativeRenderTable->Color3uiv) (v); -} - -static void -logColor3usv (const GLushort *v) -{ - vCnt[color3usvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor3usv (%p)\n", v); - (*nativeRenderTable->Color3usv) (v); -} - -static void -logColor4bv (const GLbyte *v) -{ - vCnt[color4bvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor4bv (%p)\n", v); - (*nativeRenderTable->Color4bv) (v); -} - -static void -logColor4dv (const GLdouble *v) -{ - vCnt[color4dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor4dv (%p)\n", v); - (*nativeRenderTable->Color4dv) (v); -} - -static void -logColor4fv (const GLfloat *v) -{ - vCnt[color4fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor4fv (%p)\n", v); - (*nativeRenderTable->Color4fv) (v); -} - -static void -logColor4iv (const GLint *v) -{ - vCnt[color4ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor4iv (%p)\n", v); - (*nativeRenderTable->Color4iv) (v); -} - -static void -logColor4sv (const GLshort *v) -{ - vCnt[color4svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor4sv (%p)\n", v); - (*nativeRenderTable->Color4sv) (v); -} - -static void -logColor4ubv (const GLubyte *v) -{ - vCnt[color4ubvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor4ubv (%p)\n", v); - (*nativeRenderTable->Color4ubv) (v); -} - -static void -logColor4uiv(const GLuint *v) -{ - vCnt[color4uivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor4uiv (%p)\n", v); - (*nativeRenderTable->Color4uiv) (v); -} - -static void -logColor4usv (const GLushort *v) -{ - vCnt[color4usvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glColor4usv (%p)\n", v); - (*nativeRenderTable->Color4usv) (v); -} - -static void -logColorMask (GLboolean red, - GLboolean green, - GLboolean blue, - GLboolean alpha) -{ - fprintf (logFp, "glColorMask (%d, %d, %d, %d)\n", red, green, blue, alpha); - (*nativeRenderTable->ColorMask) (red, green, blue, alpha); -} - -static void -logColorMaterial (GLenum face, - GLenum mode) -{ - fprintf (logFp, "glColorMaterial (0x%x, 0x%x)\n", face, mode); - (*nativeRenderTable->ColorMaterial) (face, mode); -} - -static void -logColorPointer (GLint size, - GLenum type, - GLsizei stride, - const void *pointer) -{ - fprintf (logFp, "glColorPointer (%d, 0x%x, %d, %p)\n", - size, type, stride, pointer); - (*nativeRenderTable->ColorPointer) (size, type, stride, pointer); -} - -static void -logCopyPixels (GLint x, - GLint y, - GLsizei width, - GLsizei height, - GLenum type) -{ - fprintf (logFp, "glCopyPixels (%d, %d, %d, %d, 0x%x)\n", - x, y, width, height, type); - (*nativeRenderTable->CopyPixels) (x, y, width, height, type); -} - -static void -logCopyTexImage1D (GLenum target, - GLint level, - GLenum internalFormat, - GLint x, - GLint y, - GLsizei width, - GLint border) -{ - fprintf (logFp, "glCopyTexImage1D (0x%x, %d, 0x%x, %d, %d, %d, %d)\n", - target, level, internalFormat, x, y, width, border); - (*nativeRenderTable->CopyTexImage1D) (target, level, internalFormat, - x, y, width, border); -} - -static void -logCopyTexImage2D (GLenum target, - GLint level, - GLenum internalFormat, - GLint x, - GLint y, - GLsizei width, - GLsizei height, - GLint border) -{ - fprintf (logFp, "glCopyTexImage2D (0x%x, %d, 0x%x, %d, %d, %d, %d, %d)\n", - target, level, internalFormat, x, y, width, height, border); - (*nativeRenderTable->CopyTexImage2D) (target, level, internalFormat, - x, y, width, height, border); -} - -static void -logCopyTexSubImage1D (GLenum target, - GLint level, - GLint xoffset, - GLint x, - GLint y, - GLsizei width) -{ - fprintf (logFp, "glCopyTexSubImage1D (0x%x, %d, %d, %d, %d, %d)\n", - target, level, xoffset, x, y, width); - (*nativeRenderTable->CopyTexSubImage1D) (target, level, xoffset, x, y, - width); -} - -static void -logCopyTexSubImage2D (GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLint x, - GLint y, - GLsizei width, - GLsizei height) -{ - fprintf (logFp, "glCopyTexSubImage2D (0x%x, %d, %d, %d, %d, %d, %d, %d)\n", - target, level, xoffset, yoffset, x, y, width, height); - (*nativeRenderTable->CopyTexSubImage2D) (target, level, - xoffset, yoffset, x, y, - width, height); -} - -static void -logCullFace (GLenum mode) -{ - fprintf (logFp, "glCullFace (0x%x)\n", mode); - (*nativeRenderTable->CullFace) (mode); -} - -static void -logDeleteLists (GLuint list, - GLsizei range) -{ - fprintf (logFp, "glDeleteLists (%d, %d)\n", list, range); - (*nativeRenderTable->DeleteLists) (list, range); -} - -static void -logDeleteTextures (GLsizei n, const GLuint *textures) -{ - fprintf (logFp, "glDeleteTextures (%d, %p)\n", n, textures); - (*nativeRenderTable->DeleteTextures) (n, textures); -} - -static void -logDepthFunc (GLenum func) -{ - fprintf (logFp, "glDepthFunc (0x%x)\n", func); - (*nativeRenderTable->DepthFunc) (func); -} - -static void -logDepthMask (GLboolean flag) -{ - fprintf (logFp, "glDepthMask (%d)\n", flag); - (*nativeRenderTable->DepthMask) (flag); -} - -static void -logDepthRange (GLclampd zNear, - GLclampd zFar) -{ - fprintf (logFp, "glDepthRange (%f, %f)\n", zNear, zFar); - (*nativeRenderTable->DepthRange) (zNear, zFar); -} - -static void -logDisable (GLenum cap) -{ - fprintf (logFp, "glDisable (0x%x)\n", cap); - (*nativeRenderTable->Disable) (cap); -} - -static void -logDisableClientState (GLenum array) -{ - fprintf (logFp, "glDisableClientState (0x%x)\n", array); - (*nativeRenderTable->DisableClientState) (array); -} - -static void -logDrawArrays (GLenum mode, - GLint first, - GLsizei count) -{ - fprintf (logFp, "glDrawArrays (0x%x, %d, %d)\n", mode, first, count); - (*nativeRenderTable->DrawArrays) (mode, first, count); -} - -static void -logDrawBuffer (GLenum mode) -{ - fprintf (logFp, "glDrawBuffer (0x%x)\n", mode); - (*nativeRenderTable->DrawBuffer) (mode); -} - -static void -logDrawElements (GLenum mode, - GLsizei count, - GLenum type, - const void *indices) -{ - fprintf (logFp, "glDrawElements (0x%x, %d, 0x%x, %p)\n", - mode, count, type, indices); - (*nativeRenderTable->DrawElements) (mode, count, type, indices); -} - -static void -logDrawPixels (GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - const void *pixels) -{ - fprintf (logFp, "glDrawPixels (%d, %d, 0x%x, 0x%x, %p)\n", - width, height, format, type, pixels); - (*nativeRenderTable->DrawPixels) (width, height, format, type, pixels); -} - -static void -logEdgeFlagPointer (GLsizei stride, - const void *pointer) -{ - fprintf (logFp, "glEdgeFlagPointer (%d, %p)", stride, pointer); - (*nativeRenderTable->EdgeFlagPointer) (stride, pointer); -} - -static void -logEdgeFlagv (const GLboolean *flag) -{ - vCnt[edgeFlagvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glEdgeFlagv (%p)\n", flag); - (*nativeRenderTable->EdgeFlagv) (flag); -} - -static void -logEnable (GLenum cap) -{ - fprintf (logFp, "glEnable (0x%x)\n", cap); - (*nativeRenderTable->Enable) (cap); -} - -static void -logEnableClientState (GLenum array) -{ - fprintf (logFp, "glEnableClientState (0x%x)\n", array); - (*nativeRenderTable->EnableClientState) (array); -} - -static void -logEnd (void) -{ - int i; - - for (i = 0; i < sizeof (vCnt) / sizeof (vCnt[0]); i++) - { - if (vCnt[i].n) - { - fprintf (logFp, " %s: %d\n", vCnt[i].name, vCnt[i].n); - vCnt[i].n = 0; - } - } - - fprintf (logFp, "glEnd ()\n" ); - (*nativeRenderTable->End) (); -} - -static void -logEndList (void) -{ - fprintf (logFp, "glEndList ()\n" ); - (*nativeRenderTable->EndList) (); -} - -static void -logEvalCoord1dv (const GLdouble *u) -{ - vCnt[evalCoord1dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glEvalCoord1dv (%p)\n", u); - (*nativeRenderTable->EvalCoord1dv) (u); -} - -static void -logEvalCoord1fv (const GLfloat *u) -{ - vCnt[evalCoord1fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glEvalCoord1fv (%p)\n", u); - (*nativeRenderTable->EvalCoord1fv) (u); -} - -static void -logEvalCoord2dv (const GLdouble *u) -{ - vCnt[evalCoord2dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glEvalCoord2dv (%p)\n", u); - (*nativeRenderTable->EvalCoord2dv) (u); -} - -static void -logEvalCoord2fv (const GLfloat *u) -{ - vCnt[evalCoord1fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glEvalCoord2fv (%p)\n", u); - (*nativeRenderTable->EvalCoord2fv) (u); -} - -static void -logEvalMesh1 (GLenum mode, - GLint i1, - GLint i2) -{ - fprintf (logFp, "glEvalMesh1 (0x%x, %d, %d)\n", mode, i1, i2); - (*nativeRenderTable->EvalMesh1) (mode, i1, i2 ); -} - -static void -logEvalMesh2 (GLenum mode, - GLint i1, - GLint i2, - GLint j1, - GLint j2) -{ - fprintf (logFp, "glEvalMesh2 (0x%x, %d, %d, %d, %d)\n", - mode, i1, i2, j1, j2); - (*nativeRenderTable->EvalMesh2) (mode, i1, i2, j1, j2); -} - -static void -logEvalPoint1 (GLint i) -{ - vCnt[evalPoint1Index].n++; - if (logVertexAttribs) - fprintf (logFp, "glEvalPoint1 (%d)\n", i); - (*nativeRenderTable->EvalPoint1) (i); -} - -static void -logEvalPoint2 (GLint i, GLint j) -{ - vCnt[evalPoint2Index].n++; - if (logVertexAttribs) - fprintf (logFp, "glEvalPoint2 (%d, %d)\n", i, j); - (*nativeRenderTable->EvalPoint2) (i, j); -} - -static void -logFeedbackBuffer (GLsizei size, - GLenum type, - GLfloat *buffer) -{ - fprintf (logFp, "glFeedbackBuffer (%d, 0x%x, %p)\n", size, type, buffer); - (*nativeRenderTable->FeedbackBuffer) (size, type, buffer); -} - -static void -logFinish (void) -{ - fprintf (logFp, "glFinish ()\n"); - (*nativeRenderTable->Finish) (); -} - -static void -logFlush (void) -{ - fprintf (logFp, "glFlush ()\n"); - (*nativeRenderTable->Flush) (); -} - -static void -logFogf (GLenum pname, - GLfloat param) -{ - fprintf (logFp, "glFogf (0x%x, %f)\n", pname, param); - (*nativeRenderTable->Fogf) (pname, param); -} - -static void -logFogfv (GLenum pname, - const GLfloat *params) -{ - fprintf (logFp, "glFogfv (0x%x, %p)\n", pname, params); - (*nativeRenderTable->Fogfv) (pname, params); -} - -static void -logFogi (GLenum pname, - GLint param) -{ - fprintf (logFp, "glFogi (0x%x, %d)\n", pname, param); - (*nativeRenderTable->Fogi) (pname, param); -} - -static void -logFogiv (GLenum pname, - const GLint *params) -{ - fprintf (logFp, "glFogiv (0x%x, %p)\n", pname, params); - (*nativeRenderTable->Fogiv) (pname, params); -} - -static void -logFrontFace (GLenum mode) -{ - fprintf (logFp, "glFrontFace (0x%x)\n", mode); - (*nativeRenderTable->FrontFace) (mode); -} - -static void -logFrustum (GLdouble left, - GLdouble right, - GLdouble bottom, - GLdouble top, - GLdouble zNear, - GLdouble zFar) -{ - fprintf (logFp, "glFrustum (%f, %f, %f, %f, %f, %f)\n", - left, right, bottom, top, zNear, zFar); - (*nativeRenderTable->Frustum) (left, right, bottom, top, zNear, zFar); -} - -static GLuint -logGenLists (GLsizei range) -{ - fprintf (logFp, "glGenLists (%d)\n", range); - return (*nativeRenderTable->GenLists) (range); -} - -static void -logGenTextures (GLsizei n, - GLuint *textures) -{ - fprintf (logFp, "glGenTextures (%d, %p)\n", n, textures); - (*nativeRenderTable->GenTextures) (n, textures); -} -static void -logGetBooleanv (GLenum pname, - GLboolean *params) -{ - fprintf (logFp, "glGetBooleanv (0x%x, %p)\n", pname, params); - (*nativeRenderTable->GetBooleanv) (pname, params); -} - -static void -logGetClipPlane (GLenum plane, - GLdouble *equation) -{ - fprintf (logFp, "glGetClipPlane (0x%x, %p)\n", plane, equation); - (*nativeRenderTable->GetClipPlane) (plane, equation); -} - -static void -logGetDoublev (GLenum pname, - GLdouble *params) -{ - fprintf (logFp, "glGetDoublev (0x%x, %p)\n", pname, params); - (*nativeRenderTable->GetDoublev) (pname, params); -} - -static GLenum -logGetError (void) -{ - fprintf (logFp, "glGetError ()\n"); - return (*nativeRenderTable->GetError) (); -} - -static void -logGetFloatv (GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "glGetFloatv (0x%x, %p)\n", pname, params); - (*nativeRenderTable->GetFloatv) (pname, params); -} - -static void -logGetIntegerv (GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetIntegerv (0x%x, %p)\n", pname, params); - (*nativeRenderTable->GetIntegerv) (pname, params); -} - -static void -logGetLightfv (GLenum light, - GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "glGetLightfv (0x%x, 0x%x, %p)\n", light, pname, params); - (*nativeRenderTable->GetLightfv) (light, pname, params); -} - -static void -logGetLightiv (GLenum light, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetLightiv (0x%x, 0x%x, %p)\n", - light, pname, params); - (*nativeRenderTable->GetLightiv) (light, pname, params); -} - -static void -logGetMapdv (GLenum target, - GLenum query, - GLdouble *v) -{ - fprintf (logFp, "glGetMapdv (0x%x, 0x%x, %p)\n", target, query, v); - (*nativeRenderTable->GetMapdv) (target, query, v); -} - -static void -logGetMapfv (GLenum target, - GLenum query, - GLfloat *v) -{ - fprintf (logFp, "glGetMapfv (0x%x, 0x%x, %p)\n", target, query, v); - (*nativeRenderTable->GetMapfv) (target, query, v); -} - -static void -logGetMapiv (GLenum target, - GLenum query, - GLint *v) -{ - fprintf (logFp, "glGetMapiv (0x%x, 0x%x, %p)\n", target, query, v); - (*nativeRenderTable->GetMapiv) (target, query, v); -} - -static void -logGetMaterialfv (GLenum face, - GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "glGetMaterialfv (0x%x, 0x%x, %p)\n", face, pname, params); - (*nativeRenderTable->GetMaterialfv) (face, pname, params); -} - -static void -logGetMaterialiv (GLenum face, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetMaterialiv (0x%x, 0x%x, %p)\n", face, pname, params); - (*nativeRenderTable->GetMaterialiv) (face, pname, params); -} - -static void -logGetPixelMapfv (GLenum map, - GLfloat *values) -{ - fprintf (logFp, "glGetPixelMapfv (0x%x, %p)\n", map, values); - (*nativeRenderTable->GetPixelMapfv) (map, values); -} - -static void -logGetPixelMapuiv (GLenum map, - GLuint *values) -{ - fprintf (logFp, "glGetPixelMapuiv (0x%x, %p)\n", map, values); - (*nativeRenderTable->GetPixelMapuiv) (map, values); -} - -static void -logGetPixelMapusv (GLenum map, - GLushort *values) -{ - fprintf (logFp, "glGetPixelMapusv (0x%x, %p)\n", map, values); - (*nativeRenderTable->GetPixelMapusv) (map, values); -} - -static void -logGetPointerv (GLenum pname, - GLvoid **params) -{ - fprintf (logFp, "glGetPointerv (0x%x, %p)\n", pname, params); - (*nativeRenderTable->GetPointerv) (pname, params); -} - -static void -logGetPolygonStipple (GLubyte *mask) -{ - fprintf (logFp, "glGetPolygonStipple (%p)\n", mask); - (*nativeRenderTable->GetPolygonStipple) (mask); -} - -static const GLubyte * -logGetString (GLenum name) -{ - fprintf (logFp, "glGetString (0x%x)\n", name); - return (*nativeRenderTable->GetString) (name); -} - -static void -logGetTexEnvfv (GLenum target, - GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "glGetTexEnvfv (0x%x, 0x%x, %p)\n", target, pname, params); - (*nativeRenderTable->GetTexEnvfv) (target, pname, params); -} - -static void -logGetTexEnviv (GLenum target, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetTexEnviv (0x%x, 0x%x, %p)\n", target, pname, params); - (*nativeRenderTable->GetTexEnviv) (target, pname, params); -} - -static void -logGetTexGendv (GLenum coord, - GLenum pname, - GLdouble *params) -{ - fprintf (logFp, "glGetTexGendv (0x%x, 0x%x, %p)\n", coord, pname, params); - (*nativeRenderTable->GetTexGendv) (coord, pname, params); -} - -static void -logGetTexGenfv (GLenum coord, - GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "glGetTexGenfv (0x%x, 0x%x, %p)\n", coord, pname, params); - (*nativeRenderTable->GetTexGenfv) (coord, pname, params); -} - -static void -logGetTexGeniv (GLenum coord, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetTexGeniv (0x%x, 0x%x, %p)\n", coord, pname, params); - (*nativeRenderTable->GetTexGeniv) (coord, pname, params); -} - -static void -logGetTexImage (GLenum target, - GLint level, - GLenum format, - GLenum type, - void *pixels) -{ - fprintf (logFp, "glGetTexImage (0x%x, %d, 0x%x, 0x%x, %p)\n", - target, level, format, type, pixels); - (*nativeRenderTable->GetTexImage) (target, level, format, type, - pixels); -} -static void -logGetTexLevelParameterfv (GLenum target, - GLint level, - GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "glGetTexLevelParameterfv (0x%x, %d, 0x%x, %p)\n", - target, level, pname, params); - (*nativeRenderTable->GetTexLevelParameterfv) (target, level, - pname, params); -} - -static void -logGetTexLevelParameteriv (GLenum target, - GLint level, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetTexLevelParameteriv (0x%x, %d, 0x%x, %p)\n", - target, level, pname, params); - (*nativeRenderTable->GetTexLevelParameteriv) (target, level, - pname, params); -} - -static void -logGetTexParameterfv (GLenum target, - GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "glGetTexParameterfv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetTexParameterfv) (target, pname, params); -} - -static void -logGetTexParameteriv (GLenum target, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetTexParameteriv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetTexParameteriv) (target, pname, params); -} - -static void -logHint (GLenum target, - GLenum mode) -{ - fprintf (logFp, "glHint (0x%x, 0x%x)\n", target, mode); - (*nativeRenderTable->Hint) (target, mode); -} - -static void -logIndexMask (GLuint mask) -{ - fprintf (logFp, "glIndexMask (%d)\n", mask); - (*nativeRenderTable->IndexMask) (mask); -} - -static void -logIndexPointer (GLenum type, - GLsizei stride, - const void *pointer) -{ - fprintf (logFp, "glIndexPointer (0x%x, %d, %p)\n", type, stride, pointer); - (*nativeRenderTable->IndexPointer) (type, stride, pointer); -} - -static void -logIndexdv (const GLdouble *c) -{ - vCnt[indexdvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glIndexdv (%p)\n", c); - (*nativeRenderTable->Indexdv) (c); -} - -static void -logIndexfv (const GLfloat *c) -{ - vCnt[indexfvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glIndexfv (%p)\n", c); - (*nativeRenderTable->Indexfv) (c); -} - -static void -logIndexiv (const GLint *c) -{ - vCnt[indexivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glIndexiv (%p)\n", c); - (*nativeRenderTable->Indexiv) (c); -} - -static void -logIndexsv (const GLshort *c) -{ - vCnt[indexsvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glIndexsv (%p)\n", c); - (*nativeRenderTable->Indexsv) (c); -} - -static void -logIndexubv (const GLubyte *c) -{ - vCnt[indexubvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glIndexubv (%p)\n", c); - (*nativeRenderTable->Indexubv) (c); -} - -static void -logInitNames (void) -{ - fprintf (logFp, "glInitNames ()\n" ); - (*nativeRenderTable->InitNames) (); -} - -static void -logInterleavedArrays (GLenum format, - GLsizei stride, - const void *pointer) -{ - fprintf (logFp, "glInterleavedArrays (0x%x, %d, %p)\n", - format, stride, pointer); - (*nativeRenderTable->InterleavedArrays) (format, stride, pointer); -} - -static GLboolean -logIsEnabled (GLenum cap) -{ - fprintf (logFp, "glIsEnabled (0x%x)\n", cap); - return (*nativeRenderTable->IsEnabled) (cap); -} - -static GLboolean -logIsList (GLuint list) -{ - fprintf (logFp, "glIsList (%d)\n", list); - return (*nativeRenderTable->IsList) (list); -} - -static GLboolean -logIsTexture (GLuint texture) -{ - fprintf (logFp, "glIsTexture (%d)\n", texture); - return (*nativeRenderTable->IsTexture) (texture); -} - -static void -logLightModelf (GLenum pname, - GLfloat param) -{ - fprintf (logFp, "glLightModelf (0x%x, %f)\n", pname, param); - (*nativeRenderTable->LightModelf) (pname, param); -} - -static void -logLightModelfv (GLenum pname, - const GLfloat *params) -{ - fprintf (logFp, "glLightModelfv (0x%x, %p)\n", pname, params); - (*nativeRenderTable->LightModelfv) (pname, params); -} - -static void -logLightModeli (GLenum pname, - GLint param) -{ - fprintf (logFp, "glLightModeli (0x%x, %d)\n", pname, param); - (*nativeRenderTable->LightModeli) (pname, param); -} - -static void -logLightModeliv (GLenum pname, - const GLint *params) -{ - fprintf (logFp, "glLightModeliv (0x%x, %p)\n", pname, params); - (*nativeRenderTable->LightModeliv) (pname, params); -} - -static void -logLightf (GLenum light, - GLenum pname, - GLfloat param) -{ - fprintf (logFp, "glLightf (0x%x, 0x%x, %f)\n", light, pname, param); - (*nativeRenderTable->Lightf) (light, pname, param); -} - -static void -logLightfv (GLenum light, - GLenum pname, - const GLfloat *params) -{ - fprintf (logFp, "glLightfv (0x%x, 0x%x, %p)\n", light, pname, params); - (*nativeRenderTable->Lightfv) (light, pname, params); -} - -static void -logLighti (GLenum light, - GLenum pname, - GLint param) -{ - fprintf (logFp, "glLighti (0x%x, 0x%x, %d)\n", light, pname, param); - (*nativeRenderTable->Lighti) (light, pname, param); -} - -static void -logLightiv (GLenum light, - GLenum pname, - const GLint *params) -{ - fprintf (logFp, "glLightiv (0x%x, 0x%x, %p)\n", light, pname, params); - (*nativeRenderTable->Lightiv) (light, pname, params); -} - -static void -logLineStipple (GLint factor, - GLushort pattern) -{ - fprintf (logFp, "glLineStipple (%d, %d)\n", factor, pattern); - (*nativeRenderTable->LineStipple) (factor, pattern); -} - -static void -logLineWidth (GLfloat width) -{ - fprintf (logFp, "glLineWidth (%f)\n", width); - (*nativeRenderTable->LineWidth) (width); -} - -static void -logListBase (GLuint base) -{ - fprintf (logFp, "glListBase (%d)\n", base); - (*nativeRenderTable->ListBase) (base); -} - -static void -logLoadIdentity (void) -{ - fprintf (logFp, "glLoadIdentity ()\n"); - (*nativeRenderTable->LoadIdentity) (); -} - -static void -logLoadMatrixd (const GLdouble *m) -{ - fprintf (logFp, "glLoadMatrixd (%p)\n", m); - (*nativeRenderTable->LoadMatrixd) (m); -} - -static void -logLoadMatrixf (const GLfloat *m) -{ - fprintf (logFp, "glLoadMatrixf (%p)\n", m); - (*nativeRenderTable->LoadMatrixf) (m); -} - -static void -logLoadName (GLuint name) -{ - fprintf (logFp, "glLoadName (%d)\n", name); - (*nativeRenderTable->LoadName) (name); -} - -static void -logLogicOp (GLenum opcode) -{ - fprintf (logFp, "glLogicOp(0x%x)\n", opcode); - (*nativeRenderTable->LogicOp) (opcode); -} - -static void -logMap1d (GLenum target, - GLdouble u1, - GLdouble u2, - GLint stride, - GLint order, - const GLdouble *points) -{ - fprintf (logFp, "glMap1d (0x%x, %f, %f, %d, %d, %p)\n", - target, u1, u2, stride, order, points); - (*nativeRenderTable->Map1d) (target, u1, u2, stride, order, points); -} - -static void -logMap1f (GLenum target, - GLfloat u1, - GLfloat u2, - GLint stride, - GLint order, - const GLfloat *points) -{ - fprintf (logFp, "glMap1f (0x%x, %f, %f, %d, %d, %p)\n", - target, u1, u2, stride, order, points); - (*nativeRenderTable->Map1f) (target, u1, u2, stride, order, points); -} - -static void -logMap2d (GLenum target, - GLdouble u1, - GLdouble u2, - GLint ustride, - GLint uorder, - GLdouble v1, - GLdouble v2, - GLint vstride, - GLint vorder, - const GLdouble *points) -{ - fprintf (logFp, "glMap2d (0x%x, %f, %f, %d, %d, %f, %f, %d, %d, %p)\n", - target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); - (*nativeRenderTable->Map2d) (target, u1, u2, ustride, uorder, v1, v2, - vstride, vorder, points); -} - -static void -logMap2f (GLenum target, - GLfloat u1, - GLfloat u2, - GLint ustride, - GLint uorder, - GLfloat v1, - GLfloat v2, - GLint vstride, - GLint vorder, - const GLfloat *points) -{ - fprintf (logFp, "glMap2f (0x%x, %f, %f, %d, %d, %f, %f, %d, %d, %p)\n", - target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); - (*nativeRenderTable->Map2f) (target, u1, u2, ustride, uorder, v1, v2, - vstride, vorder, points); -} - -static void -logMapGrid1d (GLint un, - GLdouble u1, - GLdouble u2) -{ - fprintf (logFp, "glMapGrid1d (%d, %f, %f)\n", un, u1, u2); - (*nativeRenderTable->MapGrid1d) (un, u1, u2); -} - -static void -logMapGrid1f (GLint un, - GLfloat u1, - GLfloat u2) -{ - fprintf (logFp, "glMapGrid1f (%d, %f, %f)\n", un, u1, u2); - (*nativeRenderTable->MapGrid1f) (un, u1, u2); -} - -static void -logMapGrid2d (GLint un, - GLdouble u1, - GLdouble u2, - GLint vn, - GLdouble v1, - GLdouble v2) -{ - fprintf (logFp, "glMapGrid2d (%d, %f, %f, %d, %f, %f)\n", - un, u1, u2, vn, v1, v2); - (*nativeRenderTable->MapGrid2d) (un, u1, u2, vn, v1, v2); -} - -static void -logMapGrid2f (GLint un, - GLfloat u1, - GLfloat u2, - GLint vn, - GLfloat v1, - GLfloat v2) -{ - fprintf (logFp, "glMapGrid2f (%d, %f, %f, %d, %f, %f)\n", - un, u1, u2, vn, v1, v2); - (*nativeRenderTable->MapGrid2f) (un, u1, u2, vn, v1, v2); -} - -static void -logMaterialf (GLenum face, - GLenum pname, - GLfloat param) -{ - vCnt[materialfIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMaterialf (0x%x, 0x%x, %f)\n", face, pname, param); - (*nativeRenderTable->Materialf) (face, pname, param); -} - -static void -logMaterialfv (GLenum face, - GLenum pname, - const GLfloat *params) -{ - vCnt[materialfvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMaterialfv (0x%x, 0x%x, %p)\n", - face, pname, params); - (*nativeRenderTable->Materialfv) (face, pname, params); -} - -static void -logMateriali (GLenum face, - GLenum pname, - GLint param) -{ - vCnt[materialiIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMateriali (0x%x, 0x%x, %d)\n", face, pname, param); - (*nativeRenderTable->Materiali) (face, pname, param); -} - -static void -logMaterialiv (GLenum face, - GLenum pname, - const GLint *params) -{ - vCnt[materialivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMaterialiv (0x%x, 0x%x, %p)\n", - face, pname, params); - (*nativeRenderTable->Materialiv) (face, pname, params); -} - -static void -logMatrixMode (GLenum mode) -{ - fprintf (logFp, "glMatrixMode (0x%x)\n", mode); - (*nativeRenderTable->MatrixMode) (mode); -} - -static void -logMultMatrixd (const GLdouble *m) -{ - fprintf (logFp, "glMultMatrixd (%p)\n", m); - (*nativeRenderTable->MultMatrixd) (m); -} - -static void -logMultMatrixf (const GLfloat *m) -{ - fprintf (logFp, "glMultMatrixf (%p)\n", m); - (*nativeRenderTable->MultMatrixf) (m); -} - -static void -logNewList (GLuint list, - GLenum mode) -{ - fprintf (logFp, "glNewList (%d, 0x%x)\n", list, mode); - (*nativeRenderTable->NewList) (list, mode); -} - -static void -logNormal3bv (const GLbyte *v) -{ - vCnt[normal3bvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glNormal3bv (%p)\n", v); - (*nativeRenderTable->Normal3bv) (v); -} - -static void -logNormal3dv (const GLdouble *v) -{ - vCnt[normal3dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glNormal3dv (%p)\n", v); - (*nativeRenderTable->Normal3dv) (v); -} - -static void -logNormal3fv (const GLfloat *v) -{ - vCnt[normal3fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glNormal3fv (%p)\n", v); - (*nativeRenderTable->Normal3fv) (v); -} - -static void -logNormal3iv (const GLint *v) -{ - vCnt[normal3ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glNormal3iv (%p)\n", v); - (*nativeRenderTable->Normal3iv) (v); -} - -static void -logNormal3sv (const GLshort *v) -{ - vCnt[normal3svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glNormal3sv (%p)\n", v); - (*nativeRenderTable->Normal3sv) (v); -} - -static void -logNormalPointer (GLenum type, - GLsizei stride, - const void *pointer) -{ - fprintf (logFp, "glNormalPointer (0x%x, %d, %p)\n", type, stride, pointer); - (*nativeRenderTable->NormalPointer) (type, stride, pointer); -} - -static void -logOrtho (GLdouble left, - GLdouble right, - GLdouble bottom, - GLdouble top, - GLdouble zNear, - GLdouble zFar) -{ - fprintf (logFp, "glOrtho (%f, %f, %f, %f, %f, %f)\n", - left, right, bottom, top, zNear, zFar); - (*nativeRenderTable->Ortho) (left, right, bottom, top, zNear, zFar); -} - -static void -logPassThrough (GLfloat token) -{ - fprintf (logFp, "glPassThrough (%f)\n", token); - (*nativeRenderTable->PassThrough) (token); -} - -static void -logPixelMapfv (GLenum map, - GLsizei mapsize, - const GLfloat *values) -{ - fprintf (logFp, "glPixelMapfv (0x%x, %d, %p)\n", map, mapsize, values); - (*nativeRenderTable->PixelMapfv) (map, mapsize, values); -} - -static void -logPixelMapuiv (GLenum map, - GLsizei mapsize, - const GLuint *values) -{ - fprintf (logFp, "glPixelMapuiv (0x%x, %d, %p)\n", map, mapsize, values); - (*nativeRenderTable->PixelMapuiv) (map, mapsize, values); -} - -static void -logPixelMapusv (GLenum map, - GLsizei mapsize, - const GLushort *values) -{ - fprintf (logFp, "glPixelMapusv (0x%x, %d, %p)\n", map, mapsize, values); - (*nativeRenderTable->PixelMapusv) (map, mapsize, values); -} - -static void -logPixelStoref (GLenum pname, - GLfloat param) -{ - fprintf (logFp, "glPixelStoref (0x%x, %f)\n", pname, param); - (*nativeRenderTable->PixelStoref) (pname, param); -} - -static void -logPixelStorei (GLenum pname, - GLint param) -{ - fprintf (logFp, "glPixelStorei (0x%x, %d)\n", pname, param); - (*nativeRenderTable->PixelStorei) (pname, param); -} - -static void -logPixelTransferf (GLenum pname, GLfloat param) -{ - fprintf (logFp, "glPixelTransferf (0x%x, %f)\n", pname, param); - (*nativeRenderTable->PixelTransferf) (pname, param); -} - -static void -logPixelTransferi (GLenum pname, - GLint param) -{ - fprintf (logFp, "glPixelTransferi (0x%x, %d)\n", pname, param); - (*nativeRenderTable->PixelTransferi) (pname, param); -} - -static void -logPixelZoom (GLfloat xfactor, - GLfloat yfactor) -{ - fprintf (logFp, "glPixelZoom (%f, %f)\n", xfactor, yfactor); - (*nativeRenderTable->PixelZoom) (xfactor, yfactor); -} - -static void -logPointSize (GLfloat size) -{ - fprintf (logFp, "glPointSize" ); - (*nativeRenderTable->PointSize) (size); -} - -static void -logPolygonMode (GLenum face, - GLenum mode) -{ - fprintf (logFp, "glPolygonMode (0x%x, 0x%x)\n", face, mode ); - (*nativeRenderTable->PolygonMode) (face, mode); -} - -static void -logPolygonOffset (GLfloat factor, - GLfloat units) -{ - fprintf (logFp, "glPolygonOffset (%f, %f)\n", factor, units); - (*nativeRenderTable->PolygonOffset) (factor, units); -} - -static void -logPolygonStipple (const GLubyte *mask) -{ - fprintf (logFp, "glPolygonStipple (%p)\n", mask); - (*nativeRenderTable->PolygonStipple) (mask); -} - -static void -logPopAttrib (void) -{ - fprintf (logFp, "glPopAttrib ()\n"); - (*nativeRenderTable->PopAttrib) (); -} - -static void -logPopClientAttrib (void) -{ - fprintf (logFp, "glPopClientAttrib ()\n" ); - (*nativeRenderTable->PopClientAttrib) (); -} - -static void -logPopMatrix (void) -{ - fprintf (logFp, "glPopMatrix ()\n" ); - (*nativeRenderTable->PopMatrix) (); -} - -static void -logPopName (void) -{ - fprintf (logFp, "glPopName ()\n"); - (*nativeRenderTable->PopName) (); -} - -static void -logPrioritizeTextures (GLsizei n, - const GLuint *textures, - const GLclampf *priorities) -{ - fprintf (logFp, "glPrioritizeTextures (%d, %p, %p)\n", - n, textures, priorities); - (*nativeRenderTable->PrioritizeTextures) (n, textures, priorities); -} - -static void -logPushAttrib (GLbitfield mask) -{ - fprintf (logFp, "glPushAttrib (0x%x)\n", mask); - (*nativeRenderTable->PushAttrib) (mask); -} - -static void -logPushClientAttrib (GLbitfield mask) -{ - fprintf (logFp, "glPushClientAttrib (0x%x)\n", mask); - (*nativeRenderTable->PushClientAttrib) (mask); -} - -static void -logPushMatrix (void) -{ - fprintf (logFp, "glPushMatrix ()\n" ); - (*nativeRenderTable->PushMatrix) (); -} - -static void -logPushName (GLuint name) -{ - fprintf (logFp, "glPushName (%d)\n", name); - (*nativeRenderTable->PushName) (name); -} - -static void -logRasterPos2dv (const GLdouble *v) -{ - fprintf (logFp, "glRasterPos2dv (%p)\n", v); - (*nativeRenderTable->RasterPos2dv) (v); -} - -static void -logRasterPos2fv (const GLfloat *v) -{ - fprintf (logFp, "glRasterPos2dv (%p)\n", v); - (*nativeRenderTable->RasterPos2fv) (v); -} - -static void -logRasterPos2iv (const GLint *v) -{ - fprintf (logFp, "glRasterPos2iv (%p)\n", v); - (*nativeRenderTable->RasterPos2iv) (v); -} - -static void -logRasterPos2sv (const GLshort *v) -{ - fprintf (logFp, "glRasterPos2sv (%p)\n", v); - (*nativeRenderTable->RasterPos2sv) (v); -} - -static void -logRasterPos3dv (const GLdouble *v) -{ - fprintf (logFp, "glRasterPos3dv (%p)\n", v); - (*nativeRenderTable->RasterPos3dv) (v); -} - -static void -logRasterPos3fv (const GLfloat *v) -{ - fprintf (logFp, "glRasterPos3fv (%p)\n", v); - (*nativeRenderTable->RasterPos3fv) (v); -} - -static void -logRasterPos3iv (const GLint *v) -{ - fprintf (logFp, "glRasterPos3iv (%p)\n", v); - (*nativeRenderTable->RasterPos3iv) (v); -} - -static void -logRasterPos3sv (const GLshort *v) -{ - fprintf (logFp, "glRasterPos3sv (%p)\n", v); - (*nativeRenderTable->RasterPos3sv) (v); -} - -static void -logRasterPos4dv (const GLdouble *v) -{ - fprintf (logFp, "glRasterPos4dv (%p)\n", v); - (*nativeRenderTable->RasterPos4dv) (v); -} - -static void -logRasterPos4fv (const GLfloat *v) -{ - fprintf (logFp, "glRasterPos4fv (%p)\n", v); - (*nativeRenderTable->RasterPos4fv) (v); -} - -static void -logRasterPos4iv (const GLint *v) -{ - fprintf (logFp, "glRasterPos4iv (%p)\n", v); - (*nativeRenderTable->RasterPos4iv) (v); -} - -static void -logRasterPos4sv (const GLshort *v) -{ - fprintf (logFp, "glRasterPos4sv (%p)\n", v); - (*nativeRenderTable->RasterPos4sv) (v); -} - -static void -logReadBuffer (GLenum mode) -{ - fprintf (logFp, "glReadBuffer (0x%x)\n", mode); - (*nativeRenderTable->ReadBuffer) (mode); -} - -static void -logReadPixels (GLint x, - GLint y, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - void *pixels) -{ - fprintf (logFp, "glReadPixels (%d, %d, %d, %d, 0x%x, 0x%x, %p)\n", - x, y, width, height, format, type, pixels); - (*nativeRenderTable->ReadPixels) (x, y, width, height, format, type, - pixels); -} - -static void -logRectdv (const GLdouble *v1, - const GLdouble *v2) -{ - fprintf (logFp, "glRectdv (%p, %p)\n", v1, v2); - (*nativeRenderTable->Rectdv) (v1, v2); -} - -static void -logRectfv (const GLfloat *v1, - const GLfloat *v2) -{ - fprintf (logFp, "glRectfv (%p, %p)\n", v1, v2); - (*nativeRenderTable->Rectfv) (v1, v2); -} - -static void -logRectiv (const GLint *v1, - const GLint *v2) -{ - fprintf (logFp, "glRectiv (%p, %p)\n", v1, v2); - (*nativeRenderTable->Rectiv) (v1, v2); -} - -static void -logRectsv (const GLshort *v1, - const GLshort *v2) -{ - fprintf (logFp, "glRectsv (%p, %p)\n", v1, v2); - (*nativeRenderTable->Rectsv) (v1, v2); -} - -static GLint -logRenderMode (GLenum mode) -{ - fprintf (logFp, "glRenderMode (0x%x)\n", mode); - return (*nativeRenderTable->RenderMode) (mode); -} - -static void -logRotated (GLdouble angle, - GLdouble x, - GLdouble y, - GLdouble z) -{ - fprintf (logFp, "glRotated (%f, %f, %f, %f)\n", angle, x, y, z); - (*nativeRenderTable->Rotated) (angle, x, y, z); -} - -static void -logRotatef (GLfloat angle, - GLfloat x, - GLfloat y, - GLfloat z) -{ - fprintf (logFp, "glRotatef (%f, %f, %f, %f)\n", angle, x, y, z); - (*nativeRenderTable->Rotatef) (angle, x, y, z); -} - -static void -logScaled (GLdouble x, - GLdouble y, - GLdouble z) -{ - fprintf (logFp, "glScaled (%f, %f, %f)\n", x, y, z); - (*nativeRenderTable->Scaled) (x, y, z); -} - -static void -logScalef (GLfloat x, - GLfloat y, - GLfloat z) -{ - fprintf (logFp, "glScalef (%f, %f, %f)\n", x, y, z); - (*nativeRenderTable->Scalef) (x, y, z); -} - -static void -logScissor (GLint x, - GLint y, - GLsizei width, - GLsizei height) -{ - fprintf (logFp, "glScissor (%d, %d, %d, %d)\n", x, y, width, height); - (*nativeRenderTable->Scissor) (x, y, width, height); -} - -static void -logSelectBuffer (GLsizei size, - GLuint *buffer) -{ - fprintf (logFp, "glSelectBuffer (%d, %p)\n", size, buffer); - (*nativeRenderTable->SelectBuffer) (size, buffer); -} - -static void -logShadeModel (GLenum mode) -{ - fprintf (logFp, "glShadeModel (0x%x)\n", mode); - (*nativeRenderTable->ShadeModel) (mode); -} - -static void -logStencilFunc (GLenum func, - GLint ref, - GLuint mask) -{ - fprintf (logFp, "glStencilFunc (0x%x, %d, %d)\n", func, ref, mask); - (*nativeRenderTable->StencilFunc) (func, ref, mask); -} - -static void -logStencilMask (GLuint mask) -{ - fprintf (logFp, "glStencilMask (0x%x)\n", mask); - (*nativeRenderTable->StencilMask) (mask); -} - -static void -logStencilOp (GLenum fail, - GLenum zfail, - GLenum zpass) -{ - fprintf (logFp, "glStencilOp (0x%x, 0x%x, 0x%x)\n", fail, zfail, zpass); - (*nativeRenderTable->StencilOp) (fail, zfail, zpass); -} - -static void -logTexCoord1dv (const GLdouble *v) -{ - vCnt[texCoord1dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord1dv (%p)\n", v); - (*nativeRenderTable->TexCoord1dv) (v); -} - -static void -logTexCoord1fv (const GLfloat *v) -{ - vCnt[texCoord1fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord1fv (%p)\n", v); - (*nativeRenderTable->TexCoord1fv) (v); -} - -static void -logTexCoord1iv (const GLint *v) -{ - vCnt[texCoord1ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord1iv (%p)\n", v); - (*nativeRenderTable->TexCoord1iv) (v); -} - -static void -logTexCoord1sv (const GLshort *v) -{ - vCnt[texCoord1svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord1sv (%p)\n", v); - (*nativeRenderTable->TexCoord1sv) (v); -} - -static void -logTexCoord2dv (const GLdouble *v) -{ - vCnt[texCoord2dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord2dv (%p)\n", v); - (*nativeRenderTable->TexCoord2dv) (v); -} - -static void -logTexCoord2fv (const GLfloat *v) -{ - vCnt[texCoord2fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord2fv (%p)\n", v); - (*nativeRenderTable->TexCoord2fv) (v); -} - -static void -logTexCoord2iv (const GLint *v) -{ - vCnt[texCoord2ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord2iv (%p)\n", v); - (*nativeRenderTable->TexCoord2iv) (v); -} - -static void -logTexCoord2sv (const GLshort *v) -{ - vCnt[texCoord2svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord2sv (%p)\n", v); - (*nativeRenderTable->TexCoord2sv) (v); -} - - -static void -logTexCoord3dv (const GLdouble *v) -{ - vCnt[texCoord3dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord3dv (%p)\n", v); - (*nativeRenderTable->TexCoord3dv) (v); -} - -static void -logTexCoord3fv (const GLfloat *v) -{ - vCnt[texCoord3fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord3fv (%p)\n", v); - (*nativeRenderTable->TexCoord3fv) (v); -} - -static void -logTexCoord3iv (const GLint *v) -{ - vCnt[texCoord3ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord3iv (%p)\n", v); - (*nativeRenderTable->TexCoord3iv) (v); -} - -static void -logTexCoord3sv (const GLshort *v) -{ - vCnt[texCoord3svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord3sv (%p)\n", v); - (*nativeRenderTable->TexCoord3sv) (v); -} - -static void -logTexCoord4dv (const GLdouble *v) -{ - vCnt[texCoord4dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord4dv (%p)\n", v); - (*nativeRenderTable->TexCoord4dv) (v); -} - -static void -logTexCoord4fv (const GLfloat *v) -{ - vCnt[texCoord4fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord4fv (%p)\n", v); - (*nativeRenderTable->TexCoord4fv) (v); -} - -static void -logTexCoord4iv (const GLint *v) -{ - vCnt[texCoord4ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord4iv (%p)\n", v); - (*nativeRenderTable->TexCoord4iv) (v); -} - -static void -logTexCoord4sv (const GLshort *v) -{ - vCnt[texCoord4svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glTexCoord4sv (%p)\n", v); - (*nativeRenderTable->TexCoord4sv) (v); -} - -static void -logTexCoordPointer (GLint size, - GLenum type, - GLsizei stride, - const void *pointer) -{ - fprintf (logFp, "glTexCoordPointer (%d, 0x%x, %d, %p)\n", - size, type, stride, pointer); - (*nativeRenderTable->TexCoordPointer) (size, type, stride, pointer); -} - -static void -logTexEnvf (GLenum target, - GLenum pname, - GLfloat param) -{ - fprintf (logFp, "glTexEnvf (0x%x, 0x%x, %f)\n", target, pname, param); - (*nativeRenderTable->TexEnvf) (target, pname, param); -} - -static void -logTexEnvfv (GLenum target, - GLenum pname, - const GLfloat *params) -{ - fprintf (logFp, "glTexEnvfv (0x%x, 0x%x, %p)\n", target, pname, params); - (*nativeRenderTable->TexEnvfv) (target, pname, params); -} - -static void -logTexEnvi (GLenum target, - GLenum pname, - GLint param) -{ - fprintf (logFp, "glTexEnvi (0x%x, 0x%x, %d)\n", target, pname, param); - (*nativeRenderTable->TexEnvi) (target, pname, param); -} - -static void -logTexEnviv (GLenum target, - GLenum pname, - const GLint *params) -{ - fprintf (logFp, "glTexEnviv (0x%x, 0x%x, %p)\n", target, pname, params); - (*nativeRenderTable->TexEnviv) (target, pname, params); -} - -static void -logTexGend (GLenum coord, - GLenum pname, - GLdouble param) -{ - fprintf (logFp, "glTexGend (0x%x, 0x%x, %f)\n", coord, pname, param); - (*nativeRenderTable->TexGend) (coord, pname, param); -} - -static void -logTexGendv (GLenum coord, - GLenum pname, - const GLdouble *params) -{ - fprintf (logFp, "glTexGendv (0x%x, 0x%x, %p)\n", coord, pname, params); - (*nativeRenderTable->TexGendv) (coord, pname, params); -} - -static void -logTexGenf (GLenum coord, - GLenum pname, - GLfloat param) -{ - fprintf (logFp, "glTexGenf (0x%x, 0x%x, %f)\n", coord, pname, param); - (*nativeRenderTable->TexGenf) (coord, pname, param); -} - -static void -logTexGenfv (GLenum coord, - GLenum pname, - const GLfloat *params) -{ - fprintf (logFp, "glTexGenfv (0x%x, 0x%x, %p)\n", coord, pname, params); - (*nativeRenderTable->TexGenfv) (coord, pname, params); -} - -static void -logTexGeni (GLenum coord, - GLenum pname, - GLint param) -{ - fprintf (logFp, "glTexGeni (0x%x, 0x%x, %d)\n", coord, pname, param); - (*nativeRenderTable->TexGeni) (coord, pname, param); -} - -static void -logTexGeniv (GLenum coord, - GLenum pname, - const GLint *params) -{ - fprintf (logFp, "glTexGeniv (0x%x, 0x%x, %p)\n", coord, pname, params); - (*nativeRenderTable->TexGeniv) (coord, pname, params); -} - -static void -logTexImage1D (GLenum target, - GLint level, - GLint internalformat, - GLsizei width, - GLint border, - GLenum format, - GLenum type, - const void *pixels) -{ - fprintf (logFp, "glTexImage1D (0x%x, %d, %d, %d, %d, 0x%x, 0x%x, %p)\n", - target, level, internalformat, width, border, format, type, - pixels); - (*nativeRenderTable->TexImage1D) (target, level, internalformat, - width, border, format, type, - pixels); -} - -static void -logTexImage2D (GLenum target, - GLint level, - GLint internalformat, - GLsizei width, - GLsizei height, - GLint border, - GLenum format, - GLenum type, - const void *pixels) -{ - fprintf (logFp, "glTexImage2D (0x%x, %d, %d, %d, %d, %d, " - "0x%x, 0x%x, %p)\n", target, level, internalformat, - width, height, border, format, type, pixels); - (*nativeRenderTable->TexImage2D) (target, level, internalformat, - width, height, border, format, type, - pixels); -} - -static void -logTexParameterf (GLenum target, - GLenum pname, - GLfloat param) -{ - fprintf (logFp, "glTexParameterf (0x%x, 0x%x, %f)\n", - target, pname, param); - (*nativeRenderTable->TexParameterf) (target, pname, param); -} - -static void -logTexParameterfv (GLenum target, - GLenum pname, - const GLfloat *params) -{ - fprintf (logFp, "glTexParameterfv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->TexParameterfv) (target, pname, params); -} - -static void -logTexParameteri (GLenum target, - GLenum pname, - GLint param) -{ - fprintf (logFp, "glTexParameteri (0x%x, 0x%x, 0x%x)\n", - target, pname, param); - (*nativeRenderTable->TexParameteri) (target, pname, param); -} - -static void -logTexParameteriv (GLenum target, - GLenum pname, - const GLint *params) -{ - fprintf (logFp, "glTexParameteriv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->TexParameteriv) (target, pname, params); -} - -static void -logTexSubImage1D (GLenum target, - GLint level, - GLint xoffset, - GLsizei width, - GLenum format, - GLenum type, - const void *pixels) -{ - fprintf (logFp, "glTexSubImage1D (0x%x, %d, %d, %d, 0x%x, 0x%x, %p)\n", - target, level, xoffset, width, format, type, pixels); - (*nativeRenderTable->TexSubImage1D) (target, level, xoffset, width, - format, type, pixels); -} - -static void -logTexSubImage2D (GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - const void *pixels) -{ - fprintf (logFp, "glTexSubImage2D (0x%x, %d, %d, %d, %d, %d, " - "0x%x, 0x%x, %p)\n", target, level, xoffset, yoffset, - width, height, format, type, pixels); - (*nativeRenderTable->TexSubImage2D) (target, level, xoffset, yoffset, - width, height, format, type, - pixels); -} - -static void -logTranslated (GLdouble x, - GLdouble y, - GLdouble z) -{ - fprintf (logFp, "glTranslated (%f, %f, %f)\n", x, y, z); - (*nativeRenderTable->Translated) (x, y, z); -} - -static void -logTranslatef (GLfloat x, - GLfloat y, - GLfloat z) -{ - fprintf (logFp, "glTranslatef (%f, %f, %f)\n", x, y, z); - (*nativeRenderTable->Translatef) (x, y, z); -} - -static void -logVertex2dv (const GLdouble *v) -{ - vCnt[vertex2dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex2dv (%p)\n", v); - (*nativeRenderTable->Vertex2dv) (v); -} - -static void -logVertex2fv (const GLfloat *v) -{ - vCnt[vertex2fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex2dv (%p)\n", v); - (*nativeRenderTable->Vertex2fv) (v); -} - -static void -logVertex2iv (const GLint *v) -{ - vCnt[vertex2ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex2iv (%p)\n", v); - (*nativeRenderTable->Vertex2iv) (v); -} - -static void -logVertex2sv (const GLshort *v) -{ - vCnt[vertex2svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex2sv (%p)\n", v); - (*nativeRenderTable->Vertex2sv) (v); -} - -static void -logVertex3dv (const GLdouble *v) -{ - vCnt[vertex3dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex3dv (%p)\n", v); - (*nativeRenderTable->Vertex3dv) (v); -} - -static void -logVertex3fv (const GLfloat *v) -{ - vCnt[vertex3fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex3fv (%p)\n", v); - (*nativeRenderTable->Vertex3fv) (v); -} - -static void -logVertex3iv (const GLint *v) -{ - vCnt[vertex3ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex3iv (%p)\n", v); - (*nativeRenderTable->Vertex3iv) (v); -} - -static void -logVertex3sv (const GLshort *v) -{ - vCnt[vertex3svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex3sv (%p)\n", v); - (*nativeRenderTable->Vertex3sv) (v); -} - -static void -logVertex4dv (const GLdouble *v) -{ - vCnt[vertex4dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex4dv (%p)\n", v); - (*nativeRenderTable->Vertex4dv) (v); -} - -static void -logVertex4fv (const GLfloat *v) -{ - vCnt[vertex4fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex4fv (%p)\n", v); - (*nativeRenderTable->Vertex4fv) (v); -} - -static void -logVertex4iv (const GLint *v) -{ - vCnt[vertex4ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex4iv (%p)\n", v); - (*nativeRenderTable->Vertex4iv) (v); -} - -static void -logVertex4sv (const GLshort *v) -{ - vCnt[vertex4svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glVertex4sv (%p)\n", v); - (*nativeRenderTable->Vertex4sv) (v); -} - -static void -logVertexPointer (GLint size, - GLenum type, - GLsizei stride, - const void *pointer) -{ - fprintf (logFp, "glVertexPointer (%d, 0x%x, %d, %p)\n", - size, type, stride, pointer); - (*nativeRenderTable->VertexPointer) (size, type, stride, pointer); -} - -static void -logViewport (GLint x, - GLint y, - GLsizei width, - GLsizei height) -{ - fprintf (logFp, "glViewport (%d %d %d %d)\n", x, y, width, height); - (*nativeRenderTable->Viewport) (x, y, width, height); -} - -static void -logBlendColor (GLclampf red, - GLclampf green, - GLclampf blue, - GLclampf alpha) -{ - fprintf (logFp, "glBlendColor (%f, %f, %f, %f)\n", - red, green, blue, alpha); - (*nativeRenderTable->BlendColor) (red, green, blue, alpha); -} - -static void -logBlendEquation (GLenum mode) -{ - fprintf (logFp, "glBlendEquation (0x%x)\n", mode); - (*nativeRenderTable->BlendEquation) (mode); -} - -static void -logColorTable (GLenum target, - GLenum internalformat, - GLsizei width, - GLenum format, - GLenum type, - const GLvoid *table) -{ - fprintf (logFp, "glColorTable (0x%x, 0x%x, %d, 0x%x, 0x%x, %p)\n", - target, internalformat, width, format, type, table); - (*nativeRenderTable->ColorTable) (target, internalformat, width, - format, type, table); -} - -static void -logColorTableParameterfv (GLenum target, - GLenum pname, - const GLfloat *params) -{ - fprintf (logFp, "glColorTableParameterfv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->ColorTableParameterfv) (target, pname, params); -} - -static void -logColorTableParameteriv (GLenum target, - GLenum pname, - const GLint *params) -{ - fprintf (logFp, "glColorTableParameterfv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->ColorTableParameteriv) (target, pname, params); -} - -static void -logCopyColorTable (GLenum target, - GLenum internalformat, - GLint x, - GLint y, - GLsizei width) -{ - fprintf (logFp, "glCopyColorTable (0x%x, 0x%x, %d, %d, %d)\n", - target, internalformat, x, y, width); - (*nativeRenderTable->CopyColorTable) (target, internalformat, - x, y, width); -} - -static void -logGetColorTable (GLenum target, - GLenum format, - GLenum type, - GLvoid *table) -{ - fprintf (logFp, "glGetColorTable (0x%x, 0x%x, 0x%x, %p)\n", - target, format, type, table); - (*nativeRenderTable->GetColorTable) (target, format, type, table); -} - -static void -logGetColorTableParameterfv (GLenum target, - GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "glGetColorTableParameterfv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetColorTableParameterfv) (target, pname, params); -} - -static void -logGetColorTableParameteriv (GLenum target, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetColorTableParameteriv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetColorTableParameteriv) (target, pname, params); -} - -static void -logColorSubTable (GLenum target, - GLsizei start, - GLsizei count, - GLenum format, - GLenum type, - const GLvoid *data) -{ - fprintf (logFp, "glColorSubTable (0x%x, %d, %d, 0x%x, 0x%x, %p)\n", - target, start, count, format, type, data); - (*nativeRenderTable->ColorSubTable) (target, start, count, - format, type, data); -} - -static void -logCopyColorSubTable (GLenum target, - GLsizei start, - GLint x, - GLint y, - GLsizei width) -{ - fprintf (logFp, "glCopyColorSubTable (0x%x, %d, %d, %d, %d)\n", - target, start, x, y, width); - (*nativeRenderTable->CopyColorSubTable) (target, start, x, y, width); -} - -static void -logConvolutionFilter1D (GLenum target, - GLenum internalformat, - GLsizei width, - GLenum format, - GLenum type, - const GLvoid *image) -{ - fprintf (logFp, "glConvolutionFilter1D (0x%x, 0x%x, %d, 0x%x, 0x%x, %p)\n", - target, internalformat, width, format, type, image); - (*nativeRenderTable->ConvolutionFilter1D) (target, internalformat, - width, format, type, image); -} - -static void -logConvolutionFilter2D (GLenum target, - GLenum internalformat, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - const GLvoid *image) -{ - fprintf (logFp, "glConvolutionFilter2D (0x%x, 0x%x, %d, %d, " - "0x%x, 0x%x, %p)\n", target, internalformat, width, height, - format, type, image); - (*nativeRenderTable->ConvolutionFilter2D) (target, internalformat, - width, height, format, - type, image); -} - -static void -logConvolutionParameterf (GLenum target, - GLenum pname, - GLfloat param) -{ - fprintf (logFp, "glConvolutionParameterf (0x%x, 0x%x, %f)\n", - target, pname, param); - (*nativeRenderTable->ConvolutionParameterf) (target, pname, param); -} - -static void -logConvolutionParameterfv (GLenum target, - GLenum pname, - const GLfloat *params) -{ - fprintf (logFp, "glConvolutionParameterfv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->ConvolutionParameterfv) (target, pname, params); -} - -static void -logConvolutionParameteri (GLenum target, - GLenum pname, - GLint param) -{ - fprintf (logFp, "glConvolutionParameterf (0x%x, 0x%x, %d)\n", - target, pname, param); - (*nativeRenderTable->ConvolutionParameteri) (target, pname, param); -} - -static void -logConvolutionParameteriv (GLenum target, - GLenum pname, - const GLint *params) -{ - fprintf (logFp, "glConvolutionParameteriv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->ConvolutionParameteriv) (target, pname, params); -} - -static void -logCopyConvolutionFilter1D (GLenum target, - GLenum internalformat, - GLint x, - GLint y, - GLsizei width) -{ - fprintf (logFp, "glCopyConvolutionFilter1D (0x%x, 0x%x, %d, %d, %d)\n", - target, internalformat, x, y, width); - (*nativeRenderTable->CopyConvolutionFilter1D) (target, internalformat, - x, y, width); -} - -static void -logCopyConvolutionFilter2D (GLenum target, - GLenum internalformat, - GLint x, - GLint y, - GLsizei width, - GLsizei height) -{ - fprintf (logFp, "glCopyConvolutionFilter2D (0x%x, 0x%x, %d, %d, %d, %d)\n", - target, internalformat, x, y, width, height); - (*nativeRenderTable->CopyConvolutionFilter2D) (target, internalformat, - x, y, width, height); -} - -static void -logGetConvolutionFilter (GLenum target, - GLenum format, - GLenum type, - GLvoid *image) -{ - fprintf (logFp, "glGetConvolutionFilter (0x%x, 0x%x, 0x%x, %p)\n", - target, format, type, image); - (*nativeRenderTable->GetConvolutionFilter) (target, format, type, - image); -} - -static void -logGetConvolutionParameterfv (GLenum target, - GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "glGetConvolutionParameterfv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetConvolutionParameterfv) (target, pname, - params); -} - -static void -logGetConvolutionParameteriv (GLenum target, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetConvolutionParameteriv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetConvolutionParameteriv) (target, pname, - params); -} - -static void -logGetSeparableFilter (GLenum target, - GLenum format, - GLenum type, - GLvoid *row, - GLvoid *column, - GLvoid *span) -{ - fprintf (logFp, "glGetSeparableFilter (0x%x, 0x%x, 0x%x, %p, %p, %p)\n", - target, format, type, row, column, span); - (*nativeRenderTable->GetSeparableFilter) (target, format, type, - row, column, span); -} - -static void -logSeparableFilter2D (GLenum target, - GLenum internalformat, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - const GLvoid *row, - const GLvoid *column) -{ - fprintf (logFp, "glSeparableFilter2D (0x%x, 0x%x, %d, %d, " - "0x%x, 0x%x, %p, %p)\n", target, internalformat, width, height, - format, type, row, column); - (*nativeRenderTable->SeparableFilter2D) (target, internalformat, - width, height, format, - type, row, column); -} - -static void -logGetHistogram (GLenum target, - GLboolean reset, - GLenum format, - GLenum type, - GLvoid *values) -{ - fprintf (logFp, "glGetHistogram (0x%x, %d, 0x%x, 0x%x, %p)\n", - target, reset, format, type, values); - (*nativeRenderTable->GetHistogram) (target, reset, format, type, - values); -} - -static void -logGetHistogramParameterfv (GLenum target, - GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "glGetHistogramParameterfv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetHistogramParameterfv) (target, pname, params); -} - -static void -logGetHistogramParameteriv (GLenum target, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetHistogramParameteriv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetHistogramParameteriv) (target, pname, params); -} - -static void -logGetMinmax (GLenum target, - GLboolean reset, - GLenum format, - GLenum type, - GLvoid *values) -{ - fprintf (logFp, "glGetMinmax (0x%x, %d, 0x%x, 0x%x, %p)\n", - target, reset, format, type, values); - (*nativeRenderTable->GetMinmax) (target, reset, format, type, values); -} - -static void -logGetMinmaxParameterfv (GLenum target, - GLenum pname, - GLfloat *params) -{ - fprintf (logFp, "GetMinmaxParameterfv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetMinmaxParameterfv) (target, pname, params); -} - -static void -logGetMinmaxParameteriv (GLenum target, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "GetMinmaxParameteriv (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetMinmaxParameteriv) (target, pname, params); -} - -static void -logHistogram (GLenum target, - GLsizei width, - GLenum internalformat, - GLboolean sink) -{ - fprintf (logFp, "glHistogram (0x%x, %d, 0x%x, %d)\n", - target, width, internalformat, sink); - (*nativeRenderTable->Histogram) (target, width, internalformat, sink); -} - -static void -logMinmax (GLenum target, - GLenum internalformat, - GLboolean sink) -{ - fprintf (logFp, "glMinmax (0x%x, 0x%x, %d)\n", - target, internalformat, sink); - (*nativeRenderTable->Minmax) (target, internalformat, sink); -} - -static void -logResetHistogram (GLenum target) -{ - fprintf (logFp, "glResetHistogram (0x%x)\n", target); - (*nativeRenderTable->ResetHistogram) (target); -} - -static void -logResetMinmax (GLenum target) -{ - fprintf (logFp, "glResetMinmax (0x%x)\n", target); - (*nativeRenderTable->ResetMinmax) (target); -} - -static void -logCopyTexSubImage3D (GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLint zoffset, - GLint x, - GLint y, - GLsizei width, - GLsizei height) -{ - fprintf (logFp, "glCopyTexSubImage3D (0x%x, %d, %d, %d, %d, %d, %d, " - "%d, %d)\n", target, level, xoffset, yoffset, zoffset, - x, y, width, height); - (*nativeRenderTable->CopyTexSubImage3D) (target, level, - xoffset, yoffset, zoffset, - x, y, width, height); -} - -static void -logTexImage3D (GLenum target, - GLint level, - GLint internalformat, - GLsizei width, - GLsizei height, - GLsizei depth, - GLint border, - GLenum format, - GLenum type, - const GLvoid *pixels) -{ - fprintf (logFp, "glTexImage3D (0x%x, %d, %d, %d, %d, %d, %d, " - "0x%x, 0x%x, %p)\n", target, level, internalformat, - width, height, depth, border, format, type, pixels); - (*nativeRenderTable->TexImage3D) (target, level, internalformat, - width, height, depth, border, - format, type, pixels); -} - -static void -logTexSubImage3D (GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLint zoffset, - GLsizei width, - GLsizei height, - GLsizei depth, - GLenum format, - GLenum type, - const GLvoid *pixels) -{ - fprintf (logFp, "glTexSubImage3D (0x%x, %d, %d, %d, %d, %d, %d, %d, " - "0x%x, 0x%x, %p)\n", target, level, xoffset, yoffset, zoffset, - width, height, depth, format, type, pixels); - (*nativeRenderTable->TexSubImage3D) (target, level, - xoffset, yoffset, zoffset, - width, height, depth, - format, type, pixels); -} - -/* GL_ARB_multitexture */ - -static void -logActiveTextureARB (GLenum texture) -{ - fprintf (logFp, "glActiveTextureARB (0x%x)\n", texture); - (*nativeRenderTable->ActiveTextureARB) (texture); -} - -static void -logClientActiveTextureARB (GLenum texture) -{ - fprintf (logFp, "glClientActiveTextureARB (0x%x)\n", texture); - (*nativeRenderTable->ClientActiveTextureARB) (texture); -} - -static void -logMultiTexCoord1dvARB (GLenum target, - const GLdouble *v) -{ - vCnt[multiTexCoord1dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord1dvARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord1dvARB) (target, v); -} - -static void -logMultiTexCoord1fvARB (GLenum target, - const GLfloat *v) -{ - vCnt[multiTexCoord1fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord1fvARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord1fvARB) (target, v); -} - -static void -logMultiTexCoord1ivARB (GLenum target, - const GLint *v) -{ - vCnt[multiTexCoord1ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord1ivARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord1ivARB) (target, v); -} - -static void -logMultiTexCoord1svARB (GLenum target, - const GLshort *v) -{ - vCnt[multiTexCoord1svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord1svARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord1svARB) (target, v); -} - -static void -logMultiTexCoord2dvARB (GLenum target, - const GLdouble *v) -{ - vCnt[multiTexCoord2dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord2dvARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord2dvARB) (target, v); -} - -static void -logMultiTexCoord2fvARB (GLenum target, - const GLfloat *v) -{ - vCnt[multiTexCoord2fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord2fvARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord2fvARB) (target, v); -} - -static void -logMultiTexCoord2ivARB (GLenum target, - const GLint *v) -{ - vCnt[multiTexCoord2ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord2ivARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord2ivARB) (target, v); -} - -static void -logMultiTexCoord2svARB (GLenum target, - const GLshort *v) -{ - vCnt[multiTexCoord2svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord2svARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord2svARB) (target, v); -} - -static void -logMultiTexCoord3dvARB (GLenum target, - const GLdouble *v) -{ - vCnt[multiTexCoord3dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord3dvARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord3dvARB) (target, v); -} - -static void -logMultiTexCoord3fvARB (GLenum target, - const GLfloat *v) -{ - vCnt[multiTexCoord3fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord3fvARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord3fvARB) (target, v); -} - -static void -logMultiTexCoord3ivARB (GLenum target, - const GLint *v) -{ - vCnt[multiTexCoord3ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord3ivARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord3ivARB) (target, v); -} - -static void -logMultiTexCoord3svARB (GLenum target, - const GLshort *v) -{ - vCnt[multiTexCoord3svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord3svARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord3svARB) (target, v); -} - -static void -logMultiTexCoord4dvARB (GLenum target, - const GLdouble *v) -{ - vCnt[multiTexCoord4dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord4dvARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord4dvARB) (target, v); -} - -static void -logMultiTexCoord4fvARB (GLenum target, - const GLfloat *v) -{ - vCnt[multiTexCoord4fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord4fvARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord4fvARB) (target, v); -} - -static void -logMultiTexCoord4ivARB (GLenum target, - const GLint *v) -{ - vCnt[multiTexCoord4ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord4ivARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord4ivARB) (target, v); -} - -static void -logMultiTexCoord4svARB (GLenum target, - const GLshort *v) -{ - vCnt[multiTexCoord4svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glMultiTexCoord4svARB (0x%x, %p)\n", target, v); - (*nativeRenderTable->MultiTexCoord4svARB) (target, v); -} - - -/* GL_ARB_multisample */ - -static void -logSampleCoverageARB (GLclampf value, - GLboolean invert) -{ - fprintf (logFp, "glSampleCoverageARB (%f, %d)\n", value, invert); - (*nativeRenderTable->SampleCoverageARB) (value, invert); -} - - -/* GL_EXT_texture_object */ - -static GLboolean -logAreTexturesResidentEXT (GLsizei n, - const GLuint *textures, - GLboolean *residences) -{ - fprintf (logFp, "glAreTexturesResidentEXT (%d, %p, %p)\n", - n, textures, residences); - return (*nativeRenderTable->AreTexturesResidentEXT) (n, textures, - residences); -} -static void -logGenTexturesEXT (GLsizei n, - GLuint *textures) -{ - fprintf (logFp, "glGenTexturesEXT (%d, %p)\n", n, textures); - (*nativeRenderTable->GenTexturesEXT) (n, textures); -} - -static GLboolean -logIsTextureEXT (GLuint texture) -{ - fprintf (logFp, "glIsTextureEXT (%d)\n", texture); - return (*nativeRenderTable->IsTextureEXT) (texture); -} - - -/* GL_SGIS_multisample */ - -static void -logSampleMaskSGIS (GLclampf value, - GLboolean invert) -{ - fprintf (logFp, "glSampleMaskSGIS (%f, %d)\n", value, invert); - (*nativeRenderTable->SampleMaskSGIS) (value, invert); -} - -static void -logSamplePatternSGIS (GLenum pattern) -{ - fprintf (logFp, "glSamplePatternSGIS (0x%x)\n", pattern); - (*nativeRenderTable->SamplePatternSGIS) (pattern); -} - - -/* GL_EXT_point_parameters */ - -static void -logPointParameterfEXT (GLenum pname, - GLfloat param) -{ - fprintf (logFp, "glPointParameterfEXT (0x%x, %f)\n", pname, param); - (*nativeRenderTable->PointParameterfEXT) (pname, param); -} - -static void -logPointParameterfvEXT (GLenum pname, - const GLfloat *params) -{ - fprintf (logFp, "glPointParameterfvEXT (0x%x, %p)\n", pname, params); - (*nativeRenderTable->PointParameterfvEXT) (pname, params); -} - - -/* GL_MESA_window_pos */ - -static void -logWindowPos3fMESA (GLfloat x, - GLfloat y, - GLfloat z) -{ - fprintf (logFp, "glWindowPos3fMESA (%f, %f, %f)\n", x, y, z); - (*nativeRenderTable->WindowPos3fMESA) (x, y, z); -} - - -/* GL_EXT_blend_func_separate */ - -static void -logBlendFuncSeparateEXT (GLenum sfactorRGB, - GLenum dfactorRGB, - GLenum sfactorAlpha, - GLenum dfactorAlpha) -{ - fprintf (logFp, "glBlendFuncSeparateEXT (0x%x, 0x%x, 0x%x, 0x%x)\n", - sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); - (*nativeRenderTable->BlendFuncSeparateEXT) (sfactorRGB, - dfactorRGB, - sfactorAlpha, - dfactorAlpha); -} - - -/* GL_EXT_fog_coord */ - -static void -logFogCoordfvEXT (const GLfloat *coord) -{ - vCnt[fogCoordfvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glFogCoordfvEXT (%p)\n", coord); - (*nativeRenderTable->FogCoordfvEXT) (coord); -} - -static void -logFogCoorddvEXT (const GLdouble *coord) -{ - vCnt[fogCoorddvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glFogCoorddvEXT (%p)\n", coord); - (*nativeRenderTable->FogCoorddvEXT) (coord); -} - -static void -logFogCoordPointerEXT (GLenum type, - GLsizei stride, - const GLvoid *pointer) -{ - fprintf (logFp, "glFogCoordPointerEXT (0x%x, %d, %p)\n", - type, stride, pointer); - (*nativeRenderTable->FogCoordPointerEXT) (type, stride, pointer); -} - - -/* GL_EXT_secondary_color */ - -static void -logSecondaryColor3bvEXT (const GLbyte *v) -{ - vCnt[secondaryColor3bvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glSecondaryColor3bvEXT (%p)\n", v); - (*nativeRenderTable->SecondaryColor3bvEXT) (v); -} - -static void -logSecondaryColor3dvEXT (const GLdouble *v) -{ - vCnt[secondaryColor3dvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glSecondaryColor3dvEXT (%p)\n", v); - (*nativeRenderTable->SecondaryColor3dvEXT) (v); -} - -static void -logSecondaryColor3fvEXT (const GLfloat *v) -{ - vCnt[secondaryColor3fvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glSecondaryColor3fvEXT (%p)\n", v); - (*nativeRenderTable->SecondaryColor3fvEXT) (v); -} - -static void -logSecondaryColor3ivEXT (const GLint *v) -{ - vCnt[secondaryColor3ivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glSecondaryColor3ivEXT (%p)\n", v); - (*nativeRenderTable->SecondaryColor3ivEXT) (v); -} - -static void -logSecondaryColor3svEXT (const GLshort *v) -{ - vCnt[secondaryColor3svIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glSecondaryColor3svEXT (%p)\n", v); - (*nativeRenderTable->SecondaryColor3svEXT) (v); -} - -static void -logSecondaryColor3ubvEXT (const GLubyte *v) -{ - vCnt[secondaryColor3ubvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glSecondaryColor3ubvEXT (%p)\n", v); - (*nativeRenderTable->SecondaryColor3ubvEXT) (v); -} - -static void -logSecondaryColor3uivEXT (const GLuint *v) -{ - vCnt[secondaryColor3uivIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glSecondaryColor3uivEXT (%p)\n", v); - (*nativeRenderTable->SecondaryColor3uivEXT) (v); -} - -static void -logSecondaryColor3usvEXT (const GLushort *v) -{ - vCnt[secondaryColor3usvIndex].n++; - if (logVertexAttribs) - fprintf (logFp, "glSecondaryColor3usvEXT (%p)\n", v); - (*nativeRenderTable->SecondaryColor3usvEXT) (v); -} - -static void -logSecondaryColorPointerEXT (GLint size, - GLenum type, - GLsizei stride, - const GLvoid *pointer) -{ - fprintf (logFp, "glSecondaryColorPointerEXT (%d, 0x%x, %d, %p)\n", - size, type, stride, pointer); - (*nativeRenderTable->SecondaryColorPointerEXT) (size, type, - stride, pointer); -} - - -/* GL_NV_point_sprite */ - -static void -logPointParameteriNV (GLenum pname, - GLint param) -{ - fprintf (logFp, "glPointParameteriNV (0x%x, %d)\n", pname, param); - (*nativeRenderTable->PointParameteriNV) (pname, param); -} - -static void -logPointParameterivNV (GLenum pname, - const GLint *params) -{ - fprintf (logFp, "glPointParameterivNV (0x%x, %p)\n", pname, params); - (*nativeRenderTable->PointParameterivNV) (pname, params); -} - - -/* GL_EXT_stencil_two_side */ - -static void -logActiveStencilFaceEXT (GLenum face) -{ - fprintf (logFp, "glActiveStencilFaceEXT (0x%x)\n", face); - (*nativeRenderTable->ActiveStencilFaceEXT) (face); -} - - -/* GL_EXT_framebuffer_object */ - -static GLboolean -logIsRenderbufferEXT (GLuint renderbuffer) -{ - fprintf (logFp, "glIsRenderbufferEXT (%d)\n", renderbuffer); - return (*nativeRenderTable->IsRenderbufferEXT) (renderbuffer); -} - -static void -logBindRenderbufferEXT (GLenum target, - GLuint renderbuffer) -{ - fprintf (logFp, "glBindRenderbufferEXT (0x%x, %d)\n", - target, renderbuffer); - (*nativeRenderTable->BindRenderbufferEXT) (target, renderbuffer); -} - -static void -logDeleteRenderbuffersEXT (GLsizei n, - const GLuint *renderbuffers) -{ - fprintf (logFp, "glDeleteRenderbuffersEXT (%d, %p)\n", n, renderbuffers); - (*nativeRenderTable->DeleteRenderbuffersEXT) (n, renderbuffers); -} - -static void -logGenRenderbuffersEXT (GLsizei n, - GLuint *renderbuffers) -{ - fprintf (logFp, "glGenRenderbuffersEXT (%d, %p)\n", n, renderbuffers); - (*nativeRenderTable->GenRenderbuffersEXT) (n, renderbuffers); -} - -static void -logRenderbufferStorageEXT (GLenum target, - GLenum internalformat, - GLsizei width, - GLsizei height) -{ - fprintf (logFp, "glRenderbufferStorageEXT (0x%x, 0x%x, %d, %d)\n", - target, internalformat, width, height); - (*nativeRenderTable->RenderbufferStorageEXT) (target, - internalformat, - width, height); -} - -static void -logGetRenderbufferParameterivEXT (GLenum target, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetRenderbufferParameterivEXT (0x%x, 0x%x, %p)\n", - target, pname, params); - (*nativeRenderTable->GetRenderbufferParameterivEXT) (target, - pname, - params); -} - -static GLboolean -logIsFramebufferEXT (GLuint framebuffer) -{ - fprintf (logFp, "glIsFramebufferEXT (%d)\n", framebuffer); - return (*nativeRenderTable->IsFramebufferEXT) (framebuffer); -} - -static void -logBindFramebufferEXT (GLenum target, - GLuint framebuffer) -{ - fprintf (logFp, "glBindFramebufferEXT (0x%x, %d)\n", target, framebuffer); - (*nativeRenderTable->BindFramebufferEXT) (target, framebuffer); -} - -static void -logDeleteFramebuffersEXT (GLsizei n, - const GLuint *framebuffers) -{ - fprintf (logFp, "glDeleteFramebuffersEXT (%d, %p)\n", n, framebuffers); - (*nativeRenderTable->DeleteFramebuffersEXT) (n, framebuffers); -} - -static void -logGenFramebuffersEXT (GLsizei n, - GLuint *framebuffers) -{ - fprintf (logFp, "glGenFramebuffersEXT (%d, %p)\n", n, framebuffers); - (*nativeRenderTable->GenFramebuffersEXT) (n, framebuffers); -} - -static GLenum -logCheckFramebufferStatusEXT (GLenum target) -{ - fprintf (logFp, "glCheckFramebufferStatusEXT (0x%x)\n", target); - return (*nativeRenderTable->CheckFramebufferStatusEXT) (target); -} - -static void -logFramebufferTexture1DEXT (GLenum target, - GLenum attachment, - GLenum textarget, - GLuint texture, - GLint level) -{ - fprintf (logFp, "glFramebufferTexture1DEXT (0x%x, 0x%x, 0x%x, %d, %d)\n", - target, attachment, textarget, texture, level); - (*nativeRenderTable->FramebufferTexture1DEXT) (target, attachment, - textarget, texture, - level); -} - -static void -logFramebufferTexture2DEXT (GLenum target, - GLenum attachment, - GLenum textarget, - GLuint texture, - GLint level) -{ - fprintf (logFp, "glFramebufferTexture2DEXT (0x%x, 0x%x, 0x%x, %d, %d)\n", - target, attachment, textarget, texture, level); - (*nativeRenderTable->FramebufferTexture2DEXT) (target, attachment, - textarget, texture, - level); -} - -static void -logFramebufferTexture3DEXT (GLenum target, - GLenum attachment, - GLenum textarget, - GLuint texture, - GLint level, - GLint zoffset) -{ - fprintf (logFp, "glFramebufferTexture3DEXT (0x%x, 0x%x, 0x%x, " - "%d, %d, %d)\n", target, attachment, textarget, texture, - level, zoffset); - (*nativeRenderTable->FramebufferTexture3DEXT) (target, attachment, - textarget, texture, - level, zoffset); -} - -static void -logFramebufferRenderbufferEXT (GLenum target, - GLenum attachment, - GLenum buffertarget, - GLuint renderbuffer) -{ - fprintf (logFp, "glFramebufferRenderbufferEXT (0x%x, 0x%x, 0x%x, %d)\n", - target, attachment, buffertarget, renderbuffer); - (*nativeRenderTable->FramebufferRenderbufferEXT) (target, - attachment, - buffertarget, - renderbuffer); -} - -static void -logGetFramebufferAttachmentParameterivEXT (GLenum target, - GLenum attach, - GLenum pname, - GLint *params) -{ - fprintf (logFp, "glGetFramebufferAttachmentParameterivEXT (0x%x, " - "0x%x, 0x%x, %p)\n", target, attach, pname, params); - (*nativeRenderTable->GetFramebufferAttachmentParameterivEXT) (target, - attach, - pname, - params); -} - -static void -logGenerateMipmapEXT (GLenum target) -{ - fprintf (logFp, "glGenerateMipmapEXT (0x%x)\n", target); - (*nativeRenderTable->GenerateMipmapEXT) (target); -} - -static struct _glapi_table __logRenderTable = { - logNewList, - logEndList, - logCallList, - logCallLists, - logDeleteLists, - logGenLists, - logListBase, - logBegin, - logBitmap, - 0, /* glColor3b */ - logColor3bv, - 0, /* glColor3d */ - logColor3dv, - 0, /* glColor3f */ - logColor3fv, - 0, /* glColor3i */ - logColor3iv, - 0, /* glColor3s */ - logColor3sv, - 0, /* glColor3ub */ - logColor3ubv, - 0, /* glColor3ui */ - logColor3uiv, - 0, /* glColor3us */ - logColor3usv, - 0, /* glColor4b */ - logColor4bv, - 0, /* glColor4d */ - logColor4dv, - 0, /* glColor4f */ - logColor4fv, - 0, /* glColor4i */ - logColor4iv, - 0, /* glColor4s */ - logColor4sv, - 0, /* glColor4ub */ - logColor4ubv, - 0, /* glColor4ui */ - logColor4uiv, - 0, /* glColor4us */ - logColor4usv, - 0, /* glEdgeFlag */ - logEdgeFlagv, - logEnd, - 0, /* glIndexd */ - logIndexdv, - 0, /* glIndexf */ - logIndexfv, - 0, /* glIndexi */ - logIndexiv, - 0, /* glIndexs */ - logIndexsv, - 0, /* glNormal3b */ - logNormal3bv, - 0, /* glNormal3d */ - logNormal3dv, - 0, /* glNormal3f */ - logNormal3fv, - 0, /* glNormal3i */ - logNormal3iv, - 0, /* glNormal3s */ - logNormal3sv, - 0, /* glRasterPos2d */ - logRasterPos2dv, - 0, /* glRasterPos2f */ - logRasterPos2fv, - 0, /* glRasterPos2i */ - logRasterPos2iv, - 0, /* glRasterPos2s */ - logRasterPos2sv, - 0, /* glRasterPos3d */ - logRasterPos3dv, - 0, /* glRasterPos3f */ - logRasterPos3fv, - 0, /* glRasterPos3i */ - logRasterPos3iv, - 0, /* glRasterPos3s */ - logRasterPos3sv, - 0, /* glRasterPos4d */ - logRasterPos4dv, - 0, /* glRasterPos4f */ - logRasterPos4fv, - 0, /* glRasterPos4i */ - logRasterPos4iv, - 0, /* glRasterPos4s */ - logRasterPos4sv, - 0, /* glRectd */ - logRectdv, - 0, /* glRectf */ - logRectfv, - 0, /* glRecti */ - logRectiv, - 0, /* glRects */ - logRectsv, - 0, /* glTexCoord1d */ - logTexCoord1dv, - 0, /* glTexCoord1f */ - logTexCoord1fv, - 0, /* glTexCoord1i */ - logTexCoord1iv, - 0, /* glTexCoord1s */ - logTexCoord1sv, - 0, /* glTexCoord2d */ - logTexCoord2dv, - 0, /* glTexCoord2f */ - logTexCoord2fv, - 0, /* glTexCoord2i */ - logTexCoord2iv, - 0, /* glTexCoord2s */ - logTexCoord2sv, - 0, /* glTexCoord3d */ - logTexCoord3dv, - 0, /* glTexCoord3f */ - logTexCoord3fv, - 0, /* glTexCoord3i */ - logTexCoord3iv, - 0, /* glTexCoord3s */ - logTexCoord3sv, - 0, /* glTexCoord4d */ - logTexCoord4dv, - 0, /* glTexCoord4f */ - logTexCoord4fv, - 0, /* glTexCoord4i */ - logTexCoord4iv, - 0, /* glTexCoord4s */ - logTexCoord4sv, - 0, /* glVertex2d */ - logVertex2dv, - 0, /* glVertex2f */ - logVertex2fv, - 0, /* glVertex2i */ - logVertex2iv, - 0, /* glVertex2s */ - logVertex2sv, - 0, /* glVertex3d */ - logVertex3dv, - 0, /* glVertex3f */ - logVertex3fv, - 0, /* glVertex3i */ - logVertex3iv, - 0, /* glVertex3s */ - logVertex3sv, - 0, /* glVertex4d */ - logVertex4dv, - 0, /* glVertex4f */ - logVertex4fv, - 0, /* glVertex4i */ - logVertex4iv, - 0, /* glVertex4s */ - logVertex4sv, - logClipPlane, - logColorMaterial, - logCullFace, - logFogf, - logFogfv, - logFogi, - logFogiv, - logFrontFace, - logHint, - logLightf, - logLightfv, - logLighti, - logLightiv, - logLightModelf, - logLightModelfv, - logLightModeli, - logLightModeliv, - logLineStipple, - logLineWidth, - logMaterialf, - logMaterialfv, - logMateriali, - logMaterialiv, - logPointSize, - logPolygonMode, - logPolygonStipple, - logScissor, - logShadeModel, - logTexParameterf, - logTexParameterfv, - logTexParameteri, - logTexParameteriv, - logTexImage1D, - logTexImage2D, - logTexEnvf, - logTexEnvfv, - logTexEnvi, - logTexEnviv, - logTexGend, - logTexGendv, - logTexGenf, - logTexGenfv, - logTexGeni, - logTexGeniv, - logFeedbackBuffer, - logSelectBuffer, - logRenderMode, - logInitNames, - logLoadName, - logPassThrough, - logPopName, - logPushName, - logDrawBuffer, - logClear, - logClearAccum, - logClearIndex, - logClearColor, - logClearStencil, - logClearDepth, - logStencilMask, - logColorMask, - logDepthMask, - logIndexMask, - logAccum, - logDisable, - logEnable, - logFinish, - logFlush, - logPopAttrib, - logPushAttrib, - logMap1d, - logMap1f, - logMap2d, - logMap2f, - logMapGrid1d, - logMapGrid1f, - logMapGrid2d, - logMapGrid2f, - 0, /* glEvalCoord1d */ - logEvalCoord1dv, - 0, /* glEvalCoord1f */ - logEvalCoord1fv, - 0, /* glEvalCoord2d */ - logEvalCoord2dv, - 0, /* glEvalCoord2f */ - logEvalCoord2fv, - logEvalMesh1, - logEvalPoint1, - logEvalMesh2, - logEvalPoint2, - logAlphaFunc, - logBlendFunc, - logLogicOp, - logStencilFunc, - logStencilOp, - logDepthFunc, - logPixelZoom, - logPixelTransferf, - logPixelTransferi, - logPixelStoref, - logPixelStorei, - logPixelMapfv, - logPixelMapuiv, - logPixelMapusv, - logReadBuffer, - logCopyPixels, - logReadPixels, - logDrawPixels, - logGetBooleanv, - logGetClipPlane, - logGetDoublev, - logGetError, - logGetFloatv, - logGetIntegerv, - logGetLightfv, - logGetLightiv, - logGetMapdv, - logGetMapfv, - logGetMapiv, - logGetMaterialfv, - logGetMaterialiv, - logGetPixelMapfv, - logGetPixelMapuiv, - logGetPixelMapusv, - logGetPolygonStipple, - logGetString, - logGetTexEnvfv, - logGetTexEnviv, - logGetTexGendv, - logGetTexGenfv, - logGetTexGeniv, - logGetTexImage, - logGetTexParameterfv, - logGetTexParameteriv, - logGetTexLevelParameterfv, - logGetTexLevelParameteriv, - logIsEnabled, - logIsList, - logDepthRange, - logFrustum, - logLoadIdentity, - logLoadMatrixf, - logLoadMatrixd, - logMatrixMode, - logMultMatrixf, - logMultMatrixd, - logOrtho, - logPopMatrix, - logPushMatrix, - logRotated, - logRotatef, - logScaled, - logScalef, - logTranslated, - logTranslatef, - logViewport, - logArrayElement, - logBindTexture, - logColorPointer, - logDisableClientState, - logDrawArrays, - logDrawElements, - logEdgeFlagPointer, - logEnableClientState, - logIndexPointer, - 0, /* glIndexub */ - logIndexubv, - logInterleavedArrays, - logNormalPointer, - logPolygonOffset, - logTexCoordPointer, - logVertexPointer, - logAreTexturesResident, - logCopyTexImage1D, - logCopyTexImage2D, - logCopyTexSubImage1D, - logCopyTexSubImage2D, - logDeleteTextures, - logGenTextures, - logGetPointerv, - logIsTexture, - logPrioritizeTextures, - logTexSubImage1D, - logTexSubImage2D, - logPopClientAttrib, - logPushClientAttrib, - logBlendColor, - logBlendEquation, - 0, /* glDrawRangeElements */ - logColorTable, - logColorTableParameterfv, - logColorTableParameteriv, - logCopyColorTable, - logGetColorTable, - logGetColorTableParameterfv, - logGetColorTableParameteriv, - logColorSubTable, - logCopyColorSubTable, - logConvolutionFilter1D, - logConvolutionFilter2D, - logConvolutionParameterf, - logConvolutionParameterfv, - logConvolutionParameteri, - logConvolutionParameteriv, - logCopyConvolutionFilter1D, - logCopyConvolutionFilter2D, - logGetConvolutionFilter, - logGetConvolutionParameterfv, - logGetConvolutionParameteriv, - logGetSeparableFilter, - logSeparableFilter2D, - logGetHistogram, - logGetHistogramParameterfv, - logGetHistogramParameteriv, - logGetMinmax, - logGetMinmaxParameterfv, - logGetMinmaxParameteriv, - logHistogram, - logMinmax, - logResetHistogram, - logResetMinmax, - logTexImage3D, - logTexSubImage3D, - logCopyTexSubImage3D, - logActiveTextureARB, - logClientActiveTextureARB, - 0, /* glMultiTexCoord1dARB */ - logMultiTexCoord1dvARB, - 0, /* glMultiTexCoord1fARB */ - logMultiTexCoord1fvARB, - 0, /* glMultiTexCoord1iARB */ - logMultiTexCoord1ivARB, - 0, /* glMultiTexCoord1sARB */ - logMultiTexCoord1svARB, - 0, /* glMultiTexCoord2dARB */ - logMultiTexCoord2dvARB, - 0, /* glMultiTexCoord2fARB */ - logMultiTexCoord2fvARB, - 0, /* glMultiTexCoord2iARB */ - logMultiTexCoord2ivARB, - 0, /* glMultiTexCoord2sARB */ - logMultiTexCoord2svARB, - 0, /* glMultiTexCoord3dARB */ - logMultiTexCoord3dvARB, - 0, /* glMultiTexCoord3fARB */ - logMultiTexCoord3fvARB, - 0, /* glMultiTexCoord3iARB */ - logMultiTexCoord3ivARB, - 0, /* glMultiTexCoord3sARB */ - logMultiTexCoord3svARB, - 0, /* glMultiTexCoord4dARB */ - logMultiTexCoord4dvARB, - 0, /* glMultiTexCoord4fARB */ - logMultiTexCoord4fvARB, - 0, /* glMultiTexCoord4iARB */ - logMultiTexCoord4ivARB, - 0, /* glMultiTexCoord4sARB */ - logMultiTexCoord4svARB, - 0, /* glLoadTransposeMatrixfARB */ - 0, /* glLoadTransposeMatrixdARB */ - 0, /* glMultTransposeMatrixfARB */ - 0, /* glMultTransposeMatrixdARB */ - logSampleCoverageARB, - 0, /* glDrawBuffersARB */ - 0, /* glPolygonOffsetEXT */ - 0, /* glGetTexFilterFuncSGIS */ - 0, /* glTexFilterFuncSGIS */ - 0, /* glGetHistogramEXT */ - 0, /* glGetHistogramParameterfvEXT */ - 0, /* glGetHistogramParameterivEXT */ - 0, /* glGetMinmaxEXT */ - 0, /* glGetMinmaxParameterfvEXT */ - 0, /* glGetMinmaxParameterivEXT */ - 0, /* glGetConvolutionFilterEXT */ - 0, /* glGetConvolutionParameterfvEXT */ - 0, /* glGetConvolutionParameterivEXT */ - 0, /* glGetSeparableFilterEXT */ - 0, /* glGetColorTableSGI */ - 0, /* glGetColorTableParameterfvSGI */ - 0, /* glGetColorTableParameterivSGI */ - 0, /* glPixelTexGenSGIX */ - 0, /* glPixelTexGenParameteriSGIS */ - 0, /* glPixelTexGenParameterivSGIS */ - 0, /* glPixelTexGenParameterfSGIS */ - 0, /* glPixelTexGenParameterfvSGIS */ - 0, /* glGetPixelTexGenParameterivSGIS */ - 0, /* glGetPixelTexGenParameterfvSGIS */ - 0, /* glTexImage4DSGIS */ - 0, /* glTexSubImage4DSGIS */ - logAreTexturesResidentEXT, - logGenTexturesEXT, - logIsTextureEXT, - 0, /* glDetailTexFuncSGIS */ - 0, /* glGetDetailTexFuncSGIS */ - 0, /* glSharpenTexFuncSGIS */ - 0, /* glGetSharpenTexFuncSGIS */ - logSampleMaskSGIS, - logSamplePatternSGIS, - 0, /* glColorPointerEXT */ - 0, /* glEdgeFlagPointerEXT */ - 0, /* glIndexPointerEXT */ - 0, /* glNormalPointerEXT */ - 0, /* glTexCoordPointerEXT */ - 0, /* glVertexPointerEXT */ - 0, /* glSpriteParameterfSGIX */ - 0, /* glSpriteParameterfvSGIX */ - 0, /* glSpriteParameteriSGIX */ - 0, /* glSpriteParameterivSGIX */ - logPointParameterfEXT, - logPointParameterfvEXT, - 0, /* glGetInstrumentsSGIX */ - 0, /* glInstrumentsBufferSGIX */ - 0, /* glPollInstrumentsSGIX */ - 0, /* glReadInstrumentsSGIX */ - 0, /* glStartInstrumentsSGIX */ - 0, /* glStopInstrumentsSGIX */ - 0, /* glFrameZoomSGIX */ - 0, /* glTagSampleBufferSGIX */ - 0, /* glReferencePlaneSGIX */ - 0, /* glFlushRasterSGIX */ - 0, /* glGetListParameterfvSGIX */ - 0, /* glGetListParameterivSGIX */ - 0, /* glListParameterfSGIX */ - 0, /* glListParameterfvSGIX */ - 0, /* glListParameteriSGIX */ - 0, /* glListParameterivSGIX */ - 0, /* glFragmentColorMaterialSGIX */ - 0, /* glFragmentLightfSGIX */ - 0, /* glFragmentLightfvSGIX */ - 0, /* glFragmentLightiSGIX */ - 0, /* glFragmentLightivSGIX */ - 0, /* glFragmentLightModelfSGIX */ - 0, /* glFragmentLightModelfvSGIX */ - 0, /* glFragmentLightModeliSGIX */ - 0, /* glFragmentLightModelivSGIX */ - 0, /* glFragmentMaterialfSGIX */ - 0, /* glFragmentMaterialfvSGIX */ - 0, /* glFragmentMaterialiSGIX */ - 0, /* glFragmentMaterialivSGIX */ - 0, /* glGetFragmentLightfvSGIX */ - 0, /* glGetFragmentLightivSGIX */ - 0, /* glGetFragmentMaterialfvSGIX */ - 0, /* glGetFragmentMaterialivSGIX */ - 0, /* glLightEnviSGIX */ - 0, /* glVertexWeightfEXT */ - 0, /* glVertexWeightfvEXT */ - 0, /* glVertexWeightPointerEXT */ - 0, /* glFlushVertexArrayRangeNV */ - 0, /* glVertexArrayRangeNV */ - 0, /* glCombinerParameterfvNV */ - 0, /* glCombinerParameterfNV */ - 0, /* glCombinerParameterivNV */ - 0, /* glCombinerParameteriNV */ - 0, /* glCombinerInputNV */ - 0, /* glCombinerOutputNV */ - 0, /* glFinalCombinerInputNV */ - 0, /* glGetCombinerInputParameterfvNV */ - 0, /* glGetCombinerInputParameterivNV */ - 0, /* glGetCombinerOutputParameterfvNV */ - 0, /* glGetCombinerOutputParameterivNV */ - 0, /* glGetFinalCombinerInputParameterfvNV */ - 0, /* glGetFinalCombinerInputParameterivNV */ - 0, /* glResizeBuffersMESA */ - 0, /* glWindowPos2dMESA */ - 0, /* glWindowPos2dvMESA */ - 0, /* glWindowPos2fMESA */ - 0, /* glWindowPos2fvMESA */ - 0, /* glWindowPos2iMESA */ - 0, /* glWindowPos2ivMESA */ - 0, /* glWindowPos2sMESA */ - 0, /* glWindowPos2svMESA */ - 0, /* glWindowPos3dMESA */ - 0, /* glWindowPos3dvMESA */ - logWindowPos3fMESA, - 0, /* glWindowPos3fvMESA */ - 0, /* glWindowPos3iMESA */ - 0, /* glWindowPos3ivMESA */ - 0, /* glWindowPos3sMESA */ - 0, /* glWindowPos3svMESA */ - 0, /* glWindowPos4dMESA */ - 0, /* glWindowPos4dvMESA */ - 0, /* glWindowPos4fMESA */ - 0, /* glWindowPos4fvMESA */ - 0, /* glWindowPos4iMESA */ - 0, /* glWindowPos4ivMESA */ - 0, /* glWindowPos4sMESA */ - 0, /* glWindowPos4svMESA */ - logBlendFuncSeparateEXT, - 0, /* glIndexMaterialEXT */ - 0, /* glIndexFuncEXT */ - 0, /* glLockArraysEXT */ - 0, /* glUnlockArraysEXT */ - 0, /* glCullParameterdvEXT */ - 0, /* glCullParameterfvEXT */ - 0, /* glHintPGI */ - 0, /* glFogCoordfEXT */ - logFogCoordfvEXT, - 0, /* glFogCoorddEXT */ - logFogCoorddvEXT, - logFogCoordPointerEXT, - 0, /* glGetColorTableEXT */ - 0, /* glGetColorTableParameterivEXT */ - 0, /* glGetColorTableParameterfvEXT */ - 0, /* glTbufferMask3DFX */ - 0, /* glCompressedTexImage3DARB */ - 0, /* glCompressedTexImage2DARB */ - 0, /* glCompressedTexImage1DARB */ - 0, /* glCompressedTexSubImage3DARB */ - 0, /* glCompressedTexSubImage2DARB */ - 0, /* glCompressedTexSubImage1DARB */ - 0, /* glGetCompressedTexImageARB */ - 0, /* glSecondaryColor3bEXT */ - logSecondaryColor3bvEXT, - 0, /* glSecondaryColor3dEXT */ - logSecondaryColor3dvEXT, - 0, /* glSecondaryColor3fEXT */ - logSecondaryColor3fvEXT, - 0, /* glSecondaryColor3iEXT */ - logSecondaryColor3ivEXT, - 0, /* glSecondaryColor3sEXT */ - logSecondaryColor3svEXT, - 0, /* glSecondaryColor3ubEXT */ - logSecondaryColor3ubvEXT, - 0, /* glSecondaryColor3uiEXT */ - logSecondaryColor3uivEXT, - 0, /* glSecondaryColor3usEXT */ - logSecondaryColor3usvEXT, - logSecondaryColorPointerEXT, - 0, /* glAreProgramsResidentNV */ - 0, /* glBindProgramNV */ - 0, /* glDeleteProgramsNV */ - 0, /* glExecuteProgramNV */ - 0, /* glGenProgramsNV */ - 0, /* glGetProgramParameterdvNV */ - 0, /* glGetProgramParameterfvNV */ - 0, /* glGetProgramivNV */ - 0, /* glGetProgramStringNV */ - 0, /* glGetTrackMatrixivNV */ - 0, /* glGetVertexAttribdvARB */ - 0, /* glGetVertexAttribfvARB */ - 0, /* glGetVertexAttribivARB */ - 0, /* glGetVertexAttribPointervNV */ - 0, /* glIsProgramNV */ - 0, /* glLoadProgramNV */ - 0, /* glProgramParameter4dNV */ - 0, /* glProgramParameter4dvNV */ - 0, /* glProgramParameter4fNV */ - 0, /* glProgramParameter4fvNV */ - 0, /* glProgramParameters4dvNV */ - 0, /* glProgramParameters4fvNV */ - 0, /* glRequestResidentProgramsNV */ - 0, /* glTrackMatrixNV */ - 0, /* glVertexAttribPointerNV */ - 0, /* glVertexAttrib1dARB */ - 0, /* glVertexAttrib1dvARB */ - 0, /* glVertexAttrib1fARB */ - 0, /* glVertexAttrib1fvARB */ - 0, /* glVertexAttrib1sARB */ - 0, /* glVertexAttrib1svARB */ - 0, /* glVertexAttrib2dARB */ - 0, /* glVertexAttrib2dvARB */ - 0, /* glVertexAttrib2fARB */ - 0, /* glVertexAttrib2fvARB */ - 0, /* glVertexAttrib2sARB */ - 0, /* glVertexAttrib2svARB */ - 0, /* glVertexAttrib3dARB */ - 0, /* glVertexAttrib3dvARB */ - 0, /* glVertexAttrib3fARB */ - 0, /* glVertexAttrib3fvARB */ - 0, /* glVertexAttrib3sARB */ - 0, /* glVertexAttrib3svARB */ - 0, /* glVertexAttrib4dARB */ - 0, /* glVertexAttrib4dvARB */ - 0, /* glVertexAttrib4fARB */ - 0, /* glVertexAttrib4fvARB */ - 0, /* glVertexAttrib4sARB */ - 0, /* glVertexAttrib4svARB */ - 0, /* glVertexAttrib4NubARB */ - 0, /* glVertexAttrib4NubvARB */ - 0, /* glVertexAttribs1dvNV */ - 0, /* glVertexAttribs1fvNV */ - 0, /* glVertexAttribs1svNV */ - 0, /* glVertexAttribs2dvNV */ - 0, /* glVertexAttribs2fvNV */ - 0, /* glVertexAttribs2svNV */ - 0, /* glVertexAttribs3dvNV */ - 0, /* glVertexAttribs3fvNV */ - 0, /* glVertexAttribs3svNV */ - 0, /* glVertexAttribs4dvNV */ - 0, /* glVertexAttribs4fvNV */ - 0, /* glVertexAttribs4svNV */ - 0, /* glVertexAttribs4ubvNV */ - logPointParameteriNV, - logPointParameterivNV, - 0, /* glMultiDrawArraysEXT */ - 0, /* glMultiDrawElementsEXT */ - logActiveStencilFaceEXT, - 0, /* glDeleteFencesNV */ - 0, /* glGenFencesNV */ - 0, /* glIsFenceNV */ - 0, /* glTestFenceNV */ - 0, /* glGetFenceivNV */ - 0, /* glFinishFenceNV */ - 0, /* glSetFenceNV */ - 0, /* glVertexAttrib4bvARB */ - 0, /* glVertexAttrib4ivARB */ - 0, /* glVertexAttrib4ubvARB */ - 0, /* glVertexAttrib4usvARB */ - 0, /* glVertexAttrib4uivARB */ - 0, /* glVertexAttrib4NbvARB */ - 0, /* glVertexAttrib4NsvARB */ - 0, /* glVertexAttrib4NivARB */ - 0, /* glVertexAttrib4NusvARB */ - 0, /* glVertexAttrib4NuivARB */ - 0, /* glVertexAttribPointerARB */ - 0, /* glEnableVertexAttribArrayARB */ - 0, /* glDisableVertexAttribArrayARB */ - 0, /* glProgramStringARB */ - 0, /* glProgramEnvParameter4dARB */ - 0, /* glProgramEnvParameter4dvARB */ - 0, /* glProgramEnvParameter4fARB */ - 0, /* glProgramEnvParameter4fvARB */ - 0, /* glProgramLocalParameter4dARB */ - 0, /* glProgramLocalParameter4dvARB */ - 0, /* glProgramLocalParameter4fARB */ - 0, /* glProgramLocalParameter4fvARB */ - 0, /* glGetProgramEnvParameterdvARB */ - 0, /* glGetProgramEnvParameterfvARB */ - 0, /* glGetProgramLocalParameterdvARB */ - 0, /* glGetProgramLocalParameterfvARB */ - 0, /* glGetProgramivARB */ - 0, /* glGetProgramStringARB */ - 0, /* glProgramNamedParameter4fNV */ - 0, /* glProgramNamedParameter4dNV */ - 0, /* glProgramNamedParameter4fvNV */ - 0, /* glProgramNamedParameter4dvNV */ - 0, /* glGetProgramNamedParameterfvNV */ - 0, /* glGetProgramNamedParameterdvNV */ - 0, /* glBindBufferARB */ - 0, /* glBufferDataARB */ - 0, /* glBufferSubDataARB */ - 0, /* glDeleteBuffersARB */ - 0, /* glGenBuffersARB */ - 0, /* glGetBufferParameterivARB */ - 0, /* glGetBufferPointervARB */ - 0, /* glGetBufferSubDataARB */ - 0, /* glIsBufferARB */ - 0, /* glMapBufferARB */ - 0, /* glUnmapBufferARB */ - 0, /* glDepthBoundsEXT */ - 0, /* glGenQueriesARB */ - 0, /* glDeleteQueriesARB */ - 0, /* glIsQueryARB */ - 0, /* glBeginQueryARB */ - 0, /* glEndQueryARB */ - 0, /* glGetQueryivARB */ - 0, /* glGetQueryObjectivARB */ - 0, /* glGetQueryObjectuivARB */ - 0, /* glMultiModeDrawArraysIBM */ - 0, /* glMultiModeDrawElementsIBM */ - 0, /* glBlendEquationSeparateEXT */ - 0, /* glDeleteObjectARB */ - 0, /* glGetHandleARB */ - 0, /* glDetachObjectARB */ - 0, /* glCreateShaderObjectARB */ - 0, /* glShaderSourceARB */ - 0, /* glCompileShaderARB */ - 0, /* glCreateProgramObjectARB */ - 0, /* glAttachObjectARB */ - 0, /* glLinkProgramARB */ - 0, /* glUseProgramObjectARB */ - 0, /* glValidateProgramARB */ - 0, /* glUniform1fARB */ - 0, /* glUniform2fARB */ - 0, /* glUniform3fARB */ - 0, /* glUniform4fARB */ - 0, /* glUniform1iARB */ - 0, /* glUniform2iARB */ - 0, /* glUniform3iARB */ - 0, /* glUniform4iARB */ - 0, /* glUniform1fvARB */ - 0, /* glUniform2fvARB */ - 0, /* glUniform3fvARB */ - 0, /* glUniform4fvARB */ - 0, /* glUniform1ivARB */ - 0, /* glUniform2ivARB */ - 0, /* glUniform3ivARB */ - 0, /* glUniform4ivARB */ - 0, /* glUniformMatrix2fvARB */ - 0, /* glUniformMatrix3fvARB */ - 0, /* glUniformMatrix4fvARB */ - 0, /* glGetObjectParameterfvARB */ - 0, /* glGetObjectParameterivARB */ - 0, /* glGetInfoLogARB */ - 0, /* glGetAttachedObjectsARB */ - 0, /* glGetUniformLocationARB */ - 0, /* glGetActiveUniformARB */ - 0, /* glGetUniformfvARB */ - 0, /* glGetUniformivARB */ - 0, /* glGetShaderSourceARB */ - 0, /* glBindAttribLocationARB */ - 0, /* glGetActiveAttribARB */ - 0, /* glGetAttribLocationARB */ - 0, /* glGetVertexAttribdvNV */ - 0, /* glGetVertexAttribfvNV */ - 0, /* glGetVertexAttribivNV */ - 0, /* glVertexAttrib1dNV */ - 0, /* glVertexAttrib1dvNV */ - 0, /* glVertexAttrib1fNV */ - 0, /* glVertexAttrib1fvNV */ - 0, /* glVertexAttrib1sNV */ - 0, /* glVertexAttrib1svNV */ - 0, /* glVertexAttrib2dNV */ - 0, /* glVertexAttrib2dvNV */ - 0, /* glVertexAttrib2fNV */ - 0, /* glVertexAttrib2fvNV */ - 0, /* glVertexAttrib2sNV */ - 0, /* glVertexAttrib2svNV */ - 0, /* glVertexAttrib3dNV */ - 0, /* glVertexAttrib3dvNV */ - 0, /* glVertexAttrib3fNV */ - 0, /* glVertexAttrib3fvNV */ - 0, /* glVertexAttrib3sNV */ - 0, /* glVertexAttrib3svNV */ - 0, /* glVertexAttrib4dNV */ - 0, /* glVertexAttrib4dvNV */ - 0, /* glVertexAttrib4fNV */ - 0, /* glVertexAttrib4fvNV */ - 0, /* glVertexAttrib4sNV */ - 0, /* glVertexAttrib4svNV */ - 0, /* glVertexAttrib4ubNV */ - 0, /* glVertexAttrib4ubvNV */ - 0, /* glGenFragmentShadersATI */ - 0, /* glBindFragmentShaderATI */ - 0, /* glDeleteFragmentShaderATI */ - 0, /* glBeginFragmentShaderATI */ - 0, /* glEndFragmentShaderATI */ - 0, /* glPassTexCoordATI */ - 0, /* glSampleMapATI */ - 0, /* glColorFragmentOp1ATI */ - 0, /* glColorFragmentOp2ATI */ - 0, /* glColorFragmentOp3ATI */ - 0, /* glAlphaFragmentOp1ATI */ - 0, /* glAlphaFragmentOp2ATI */ - 0, /* glAlphaFragmentOp3ATI */ - 0, /* glSetFragmentShaderConstantATI */ - logIsRenderbufferEXT, - logBindRenderbufferEXT, - logDeleteRenderbuffersEXT, - logGenRenderbuffersEXT, - logRenderbufferStorageEXT, - logGetRenderbufferParameterivEXT, - logIsFramebufferEXT, - logBindFramebufferEXT, - logDeleteFramebuffersEXT, - logGenFramebuffersEXT, - logCheckFramebufferStatusEXT, - logFramebufferTexture1DEXT, - logFramebufferTexture2DEXT, - logFramebufferTexture3DEXT, - logFramebufferRenderbufferEXT, - logGetFramebufferAttachmentParameterivEXT, - logGenerateMipmapEXT, - 0, /* glStencilFuncSeparate */ - 0, /* glStencilOpSeparate */ - 0, /* glStencilMaskSeparate */ - 0, /* glGetQueryObjecti64vEXT */ - 0 /* glGetQueryObjectui64vEXT */ -}; - -static Bool isCurrent = FALSE; - -static void (*flushContextCache) (void); -static void (*setRenderTables) (struct _glapi_table *table); - -static void -GlxLogFlushContextCache (void) -{ - if (isCurrent) - { - fprintf (logFp, "LOSE CURRENT\n"); - isCurrent = FALSE; - } - - (*flushContextCache) (); -} - -static void -GlxLogSetRenderTables (struct _glapi_table *table) -{ - nativeRenderTable = table; - - if (table) - { - fprintf (logFp, "FORCE CURRENT\n"); - isCurrent = TRUE; - - (*setRenderTables) (&__logRenderTable); - } - else - { - (*setRenderTables) (0); - } -} - -void -xglInitGlxLog (void) -{ - if (logFp) - return; - - if (__xglGLXLogFp) - { - logFp = __xglGLXLogFp; - - flushContextCache = __xglGLXFunc.flushContextCache; - setRenderTables = __xglGLXFunc.setRenderTables; - - __xglGLXFunc.flushContextCache = GlxLogFlushContextCache; - __xglGLXFunc.setRenderTables = GlxLogSetRenderTables; - } -} - -#endif diff --git a/hw/xgl/xgl.h b/hw/xgl/xgl.h deleted file mode 100644 index 03dc90c70..000000000 --- a/hw/xgl/xgl.h +++ /dev/null @@ -1,1474 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#ifndef _XGL_H_ -#define _XGL_H_ - -#include <xgl-config.h> - -#include <X11/X.h> -#define NEED_EVENTS -#include <X11/Xproto.h> -#include <X11/Xos.h> -#include <glitz.h> - -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "windowstr.h" -#include "servermd.h" -#include "mi.h" -#include "dix.h" -#include "damage.h" -#include "gc.h" -#include "micmap.h" -/* I'd like gc.h to provide this */ -typedef struct _GCFuncs *GCFuncsPtr; - -#ifdef RENDER -#include "mipict.h" -#else -#ifdef XV -#undef XV /* Xv implementation require RENDER */ -#endif -#endif - -#ifdef XV -#define XGL_XV_FORMAT_YUY2 0 -#define XGL_XV_FORMAT_YV12 1 -#define XGL_XV_FORMAT_RGB 2 -#define XGL_XV_FORMAT_NUM 3 -#endif - -/* For the modules. We should decide what the actual version numbering should - * be. - */ -#define VERSION "0.0.1" - -extern WindowPtr *WindowTable; - -#define XGL_DEFAULT_PBO_MASK 0 - -typedef struct _xglSizeConstraint { - int minWidth; - int minHeight; - int aboveWidth; - int aboveHeight; -} xglSizeConstraintRec, *xglSizeConstraintPtr; - -typedef struct _xglAccelInfo { - Bool enabled; - Bool pbuffer; - xglSizeConstraintRec size; -} xglAccelInfoRec, *xglAccelInfoPtr; - -typedef struct _xglScreenAccelInfo { - xglAccelInfoRec pixmap; - xglAccelInfoRec window; - xglAccelInfoRec glx; - xglAccelInfoRec xv; -} xglScreenAccelInfoRec, *xglScreenAccelInfoPtr; - -typedef struct _xglScreenInfo { - glitz_drawable_t *drawable; - unsigned int depth; - unsigned int width; - unsigned int height; - unsigned int widthMm; - unsigned int heightMm; - int geometryDataType; - int geometryUsage; - Bool yInverted; - int pboMask; - Bool lines; - xglScreenAccelInfoRec accel; -} xglScreenInfoRec, *xglScreenInfoPtr; - -extern xglScreenInfoRec xglScreenInfo; - -typedef struct _xglPixelFormat { - CARD8 depth, bitsPerRGB; - glitz_pixel_masks_t masks; -} xglPixelFormatRec, *xglPixelFormatPtr; - -typedef struct _xglVisual { - struct _xglVisual *next; - VisualID vid; - xglPixelFormatPtr pPixel; - Bool pbuffer; - struct { - glitz_drawable_format_t *drawable; - glitz_format_t *surface; - } format; -} xglVisualRec, *xglVisualPtr; - -extern xglVisualPtr xglVisuals; - -#define xglAreaAvailable 0 -#define xglAreaDivided 1 -#define xglAreaOccupied 2 - -typedef struct _xglRootArea *xglRootAreaPtr; - -typedef struct _xglArea { - int state; - int level; - int x, y; - int width, height; - struct _xglArea *pArea[4]; - xglRootAreaPtr pRoot; - pointer closure; - DevUnion devPrivate; -} xglAreaRec, *xglAreaPtr; - -typedef struct _xglAreaFuncs { - Bool (*Create) (xglAreaPtr pArea); - - Bool (*MoveIn) (xglAreaPtr pArea, - pointer closure); - - void (*MoveOut) (xglAreaPtr pArea, - pointer closure); - - int (*CompareScore) (xglAreaPtr pArea, - pointer closure1, - pointer closure2); - -} xglAreaFuncsRec, *xglAreaFuncsPtr; - -typedef struct _xglRootArea { - int maxLevel; - int width, height; - xglAreaPtr pArea; - xglAreaFuncsPtr funcs; - int devPrivateSize; - pointer closure; -} xglRootAreaRec; - -typedef struct xglGeometry { - glitz_buffer_t *buffer; - pointer *data; - Bool broken; - glitz_fixed16_16_t xOff, yOff; - int dataType; - int usage; - int size, endOffset; - glitz_geometry_type_t type; - glitz_geometry_format_t f; - int first, width, count; - glitz_multi_array_t *array; -} xglGeometryRec, *xglGeometryPtr; - -#ifdef RENDER -typedef struct _xglFBox { - glitz_float_t x1, y1, x2, y2; -} xglFBoxRec; - -typedef union _xglBox { - BoxRec sBox; - xglFBoxRec fBox; -} xglBoxRec, *xglBoxPtr; - -typedef struct _xglRange { - int first; - unsigned int count; -} xglRangeRec, *xglRangePtr; - -typedef struct _xglGlyphTexture { - PicturePtr pMask; - glitz_pixel_format_t pixel; - glitz_geometry_format_t format; - int geometryDataType; -} xglGlyphTextureRec, *xglGlyphTexturePtr; - -typedef struct _xglGlyphArea { - unsigned long serial; - union { - xglBoxRec box; - xglRangeRec range; - } u; -} xglGlyphAreaRec, *xglGlyphAreaPtr; - -typedef struct _xglGlyphCache { - ScreenPtr pScreen; - int depth; - xglRootAreaRec rootArea; - union { - xglGlyphTextureRec texture; - xglGeometryRec geometry; - } u; -} xglGlyphCacheRec, *xglGlyphCachePtr; - -typedef struct _xglGlyph { - xglAreaPtr pArea; -} xglGlyphRec, *xglGlyphPtr; - -extern DevPrivateKey xglGlyphPrivateKey; - -#define XGL_GET_GLYPH_PRIV(pScreen, pGlyph) ((xglGlyphPtr) \ - dixLookupPrivate(GetGlyphPrivatesForScreen (pGlyph, pScreen), \ - xglGlyphPrivateKey)) - -#define XGL_GLYPH_PRIV(pScreen, pGlyph) \ - xglGlyphPtr pGlyphPriv = XGL_GET_GLYPH_PRIV (pScreen, pGlyph) - -#endif - -typedef struct _xglScreen { - xglVisualPtr pVisual; - -#ifdef GLXEXT - xglVisualPtr pGlxVisual; -#endif - -#ifdef XV - xglVisualRec pXvVisual[XGL_XV_FORMAT_NUM]; -#endif - - xglVisualPtr rootVisual; - glitz_drawable_t *drawable; - glitz_surface_t *surface; - PixmapPtr pScreenPixmap; - unsigned long features; - int geometryUsage; - int geometryDataType; - Bool yInverted; - int pboMask; - Bool lines; - xglGeometryRec scratchGeometry; - xglScreenAccelInfoRec accel; - -#ifdef RENDER - xglGlyphCacheRec glyphCache[33]; - PicturePtr pSolidAlpha; - struct _trapInfo { - PicturePtr pMask; - glitz_geometry_format_t format; - } trapInfo; -#endif - - GetImageProcPtr GetImage; - GetSpansProcPtr GetSpans; - CreateWindowProcPtr CreateWindow; - DestroyWindowProcPtr DestroyWindow; - ChangeWindowAttributesProcPtr ChangeWindowAttributes; - CopyWindowProcPtr CopyWindow; - CreateGCProcPtr CreateGC; - CloseScreenProcPtr CloseScreen; - SetWindowPixmapProcPtr SetWindowPixmap; - BitmapToRegionProcPtr BitmapToRegion; - -#ifdef RENDER - CompositeProcPtr Composite; - GlyphsProcPtr Glyphs; - TrapezoidsProcPtr Trapezoids; - AddTrapsProcPtr AddTraps; - AddTrianglesProcPtr AddTriangles; - ChangePictureProcPtr ChangePicture; - ChangePictureTransformProcPtr ChangePictureTransform; - ChangePictureFilterProcPtr ChangePictureFilter; - - RealizeGlyphProcPtr RealizeGlyph; - UnrealizeGlyphProcPtr UnrealizeGlyph; -#endif -} xglScreenRec, *xglScreenPtr; - -extern DevPrivateKey xglScreenPrivateKey; - -#define XGL_GET_SCREEN_PRIV(pScreen) ((xglScreenPtr) \ - dixLookupPrivate(&(pScreen)->devPrivates, xglScreenPrivateKey)) - -#define XGL_SET_SCREEN_PRIV(pScreen, v) \ - dixSetPrivate(&(pScreen)->devPrivates, xglScreenPrivateKey, v) - -#define XGL_SCREEN_PRIV(pScreen) \ - xglScreenPtr pScreenPriv = XGL_GET_SCREEN_PRIV (pScreen) - -#define XGL_SCREEN_WRAP(field, wrapper) \ - pScreenPriv->field = pScreen->field; \ - pScreen->field = wrapper - -#define XGL_SCREEN_UNWRAP(field) \ - pScreen->field = pScreenPriv->field - -#ifdef RENDER -#define XGL_PICTURE_SCREEN_WRAP(field, wrapper) \ - pScreenPriv->field = pPictureScreen->field; \ - pPictureScreen->field = wrapper - -#define XGL_PICTURE_SCREEN_UNWRAP(field) \ - pPictureScreen->field = pScreenPriv->field -#endif - -#define xglGCSoftwareDrawableFlag (1L << 0) -#define xglGCBadFunctionFlag (1L << 1) -#define xglGCPlaneMaskFlag (1L << 2) - -typedef struct _xglGC { - glitz_surface_t *fg; - glitz_surface_t *bg; - glitz_format_id_t id; - glitz_operator_t op; - unsigned long flags; - GCFuncsPtr funcs; - GCOpsPtr ops; -} xglGCRec, *xglGCPtr; - -extern DevPrivateKey xglGCPrivateKey; - -#define XGL_GET_GC_PRIV(pGC) ((xglGCPtr) \ - dixLookupPrivate(&(pGC)->devPrivates, xglGCPrivateKey)) - -#define XGL_GC_PRIV(pGC) \ - xglGCPtr pGCPriv = XGL_GET_GC_PRIV (pGC) - -#define XGL_GC_WRAP(field, wrapper) \ - pGCPriv->field = pGC->field; \ - pGC->field = wrapper - -#define XGL_GC_UNWRAP(field) \ - pGC->field = pGCPriv->field - - -#define xglPCFillMask (1L << 0) -#define xglPCFilterMask (1L << 1) -#define xglPCTransformMask (1L << 2) -#define xglPCComponentAlphaMask (1L << 3) -#define xglPCDitherMask (1L << 4) - -#define xglPFFilterMask (1L << 8) - -#define xglPixmapTargetNo 0 -#define xglPixmapTargetOut 1 -#define xglPixmapTargetIn 2 - -#ifdef XV - -typedef struct _xglXvPort { - PixmapPtr pPixmap; - PicturePtr pSrc; - PicturePtr pDst; -} xglXvPortRec, *xglXvPortPtr; - -#endif - -typedef struct _xglPixmap { - xglVisualPtr pVisual; - glitz_surface_t *surface; - glitz_drawable_t *drawable; - glitz_buffer_t *buffer; - int target; - Bool acceleratedTile; - pointer bits; - int stride; - DamagePtr pDamage; - BoxRec damageBox; - RegionRec bitRegion; - Bool allBits; - unsigned long pictureMask; - xglGeometryPtr pGeometry; - -#ifdef XV - xglXvPortPtr pPortPriv; -#endif - -} xglPixmapRec, *xglPixmapPtr; - -extern DevPrivateKey xglPixmapPrivateKey; - -#define XGL_GET_PIXMAP_PRIV(pPixmap) ((xglPixmapPtr) \ - dixLookupPrivate(&(pPixmap)->devPrivates, xglPixmapPrivateKey)) - -#define XGL_PIXMAP_PRIV(pPixmap) \ - xglPixmapPtr pPixmapPriv = XGL_GET_PIXMAP_PRIV (pPixmap) - -#define XGL_PICTURE_CHANGES(pictureMask) (pictureMask & 0x0000ffff) -#define XGL_PICTURE_FAILURES(pictureMask) (pictureMask & 0xffff0000) - -typedef struct _xglWin { - PixmapPtr pPixmap; -} xglWinRec, *xglWinPtr; - -extern DevPrivateKey xglWinPrivateKey; - -#define XGL_GET_WINDOW_PRIV(pWin) ((xglWinPtr) \ - dixLookupPrivate(&(pWin)->devPrivates, xglWinPrivateKey)) - -#define XGL_WINDOW_PRIV(pWin) \ - xglWinPtr pWinPriv = XGL_GET_WINDOW_PRIV (pWin) - -#define XGL_GET_WINDOW_PIXMAP(pWin) \ - (XGL_GET_WINDOW_PRIV((WindowPtr) (pWin))->pPixmap) - - -#define XGL_GET_DRAWABLE_PIXMAP(pDrawable) \ - (((pDrawable)->type == DRAWABLE_WINDOW)? \ - XGL_GET_WINDOW_PIXMAP (pDrawable): \ - (PixmapPtr) (pDrawable)) - -#define XGL_DRAWABLE_PIXMAP(pDrawable) \ - PixmapPtr pPixmap = XGL_GET_DRAWABLE_PIXMAP (pDrawable) - -#define XGL_GET_DRAWABLE_PIXMAP_PRIV(pDrawable) \ - XGL_GET_PIXMAP_PRIV (XGL_GET_DRAWABLE_PIXMAP (pDrawable)) - -#define XGL_DRAWABLE_PIXMAP_PRIV(pDrawable) \ - xglPixmapPtr pPixmapPriv = XGL_GET_DRAWABLE_PIXMAP_PRIV (pDrawable) - -#ifdef COMPOSITE -#define __XGL_OFF_X_WIN(pPix) (-(pPix)->screen_x) -#define __XGL_OFF_Y_WIN(pPix) (-(pPix)->screen_y) -#else -#define __XGL_OFF_X_WIN(pPix) (0) -#define __XGL_OFF_Y_WIN(pPix) (0) -#endif - -#define XGL_GET_DRAWABLE(pDrawable, pSurface, xOff, yOff) \ - { \ - PixmapPtr _pPix; \ - if ((pDrawable)->type != DRAWABLE_PIXMAP) { \ - _pPix = XGL_GET_WINDOW_PIXMAP (pDrawable); \ - (xOff) = __XGL_OFF_X_WIN (_pPix); \ - (yOff) = __XGL_OFF_Y_WIN (_pPix); \ - } else { \ - _pPix = (PixmapPtr) (pDrawable); \ - (yOff) = (xOff) = 0; \ - } \ - (pSurface) = XGL_GET_PIXMAP_PRIV (_pPix)->surface; \ - } - -#define XGL_DEFAULT_DPI 96 - -#define XGL_SW_FAILURE_STRING "software fall-back failure" - -#define MIN(a,b) ((a) < (b) ? (a) : (b)) -#define MAX(a,b) ((a) > (b) ? (a) : (b)) - -#define POWER_OF_TWO(v) ((v & (v - 1)) == 0) - -#define MOD(a,b) ((a) < 0 ? ((b) - ((-(a) - 1) % (b))) - 1 : (a) % (b)) - -#define FIXED_TO_FLOAT(f) (((glitz_float_t) (f)) / 65536) -#define FLOAT_TO_FIXED(f) ((int) ((f) * 65536)) - -#define BOX_NOTEMPTY(pBox) \ - (((pBox)->x2 - (pBox)->x1) > 0 && \ - ((pBox)->y2 - (pBox)->y1) > 0) - - -/* xglinput.c */ - -int -xglMouseProc (DeviceIntPtr pDevice, - int onoff); - -int -xglKeybdProc (DeviceIntPtr pDevice, - int onoff); - -void -xglBell (int volume, - DeviceIntPtr pDev, - pointer ctrl, - int something); - -void -xglKbdCtrl (DeviceIntPtr pDevice, - KeybdCtrl *ctrl); - -void -xglInitInput (int argc, char **argv); - - -/* xgloutput.c */ - -void -xglSetPixmapFormats (ScreenInfo *pScreenInfo); - -void -xglSetRootClip (ScreenPtr pScreen, - Bool enable); - - -/* xglcmap.c */ - -void -xglSetVisualTypes (int depth, - int visuals, - int redSize, - int greenSize, - int blueSize); - -Bool -xglHasVisualTypes (xglVisualPtr pVisual, - int depth); - -glitz_format_t * -xglFindBestSurfaceFormat (ScreenPtr pScreen, - xglPixelFormatPtr pPixel); - -void -xglInitVisuals (ScreenPtr pScreen); - -xglVisualPtr -xglFindVisualWithDepth (ScreenPtr pScreen, - int depth); - -xglVisualPtr -xglFindVisualWithId (ScreenPtr pScreen, - int vid); - -void -xglClearVisualTypes (void); - - -/* xglparse.c */ - -char * -xglParseFindNext (char *cur, - char *delim, - char *save, - char *last); - -void -xglParseScreen (char *arg); - -void -xglUseMsg (void); - -int -xglProcessArgument (int argc, - char **argv, - int i); - - -/* xglscreen.c */ - -Bool -xglScreenInit (ScreenPtr pScreen); - -Bool -xglFinishScreenInit (ScreenPtr pScreen); - -Bool -xglCloseScreen (int index, - ScreenPtr pScreen); - -void -xglCreateSolidAlphaPicture (ScreenPtr pScreen); - - -/* xglarea.c */ - -Bool -xglRootAreaInit (xglRootAreaPtr pRoot, - int maxLevel, - int width, - int height, - int devPrivateSize, - xglAreaFuncsPtr funcs, - pointer closure); - -void -xglRootAreaFini (xglRootAreaPtr pRoot); - -void -xglLeaveArea (xglAreaPtr pArea); - -void -xglWithdrawArea (xglAreaPtr pArea); - -Bool -xglFindArea (xglAreaPtr pArea, - int width, - int height, - Bool kickOut, - pointer closure); - - -/* xglgeometry.c */ - -#define GEOMETRY_DATA_TYPE_SHORT 0 -#define GEOMETRY_DATA_TYPE_FLOAT 1 - -typedef struct _xglDataTypeInfo { - glitz_data_type_t type; - int size; -} xglDataTypeInfoRec, *xglDataTypeInfoPtr; - -extern xglDataTypeInfoRec xglGeometryDataTypes[2]; - -#define DEFAULT_GEOMETRY_DATA_TYPE GEOMETRY_DATA_TYPE_FLOAT - -#define GEOMETRY_USAGE_STREAM 0 -#define GEOMETRY_USAGE_STATIC 1 -#define GEOMETRY_USAGE_DYNAMIC 2 -#define GEOMETRY_USAGE_SYSMEM 3 - -#define DEFAULT_GEOMETRY_USAGE GEOMETRY_USAGE_SYSMEM - -#define GEOMETRY_INIT(pScreen, pGeometry, _type, _usage, _size) \ - { \ - (pGeometry)->type = _type; \ - (pGeometry)->usage = _usage; \ - (pGeometry)->dataType = DEFAULT_GEOMETRY_DATA_TYPE; \ - (pGeometry)->usage = _usage; \ - (pGeometry)->size = 0; \ - (pGeometry)->endOffset = 0; \ - (pGeometry)->data = (pointer) 0; \ - (pGeometry)->buffer = NULL; \ - (pGeometry)->broken = FALSE; \ - (pGeometry)->xOff = 0; \ - (pGeometry)->yOff = 0; \ - (pGeometry)->array = NULL; \ - (pGeometry)->first = 0; \ - (pGeometry)->count = 0; \ - if (_type == GLITZ_GEOMETRY_TYPE_VERTEX) \ - { \ - (pGeometry)->width = 2; \ - (pGeometry)->f.vertex.type = \ - xglGeometryDataTypes[(pGeometry)->dataType].type; \ - (pGeometry)->f.vertex.bytes_per_vertex = (pGeometry)->width * \ - xglGeometryDataTypes[(pGeometry)->dataType].size; \ - (pGeometry)->f.vertex.primitive = GLITZ_PRIMITIVE_QUADS; \ - (pGeometry)->f.vertex.attributes = 0; \ - (pGeometry)->f.vertex.src.type = GLITZ_DATA_TYPE_FLOAT; \ - (pGeometry)->f.vertex.src.size = GLITZ_COORDINATE_SIZE_X; \ - (pGeometry)->f.vertex.src.offset = 0; \ - (pGeometry)->f.vertex.mask.type = GLITZ_DATA_TYPE_FLOAT; \ - (pGeometry)->f.vertex.mask.size = GLITZ_COORDINATE_SIZE_X; \ - (pGeometry)->f.vertex.mask.offset = 0; \ - } \ - else \ - { \ - (pGeometry)->width = 0; \ - (pGeometry)->f.bitmap.scanline_order = \ - GLITZ_PIXEL_SCANLINE_ORDER_TOP_DOWN; \ - (pGeometry)->f.bitmap.bytes_per_line = 0; \ - (pGeometry)->f.bitmap.pad = GLYPHPADBYTES; \ - } \ - if (_size) \ - xglGeometryResize (pScreen, pGeometry, _size); \ - } - -#define GEOMETRY_UNINIT(pGeometry) \ - { \ - if ((pGeometry)->array) \ - glitz_multi_array_destroy ((pGeometry)->array); \ - if ((pGeometry)->buffer) \ - glitz_buffer_destroy ((pGeometry)->buffer); \ - if ((pGeometry)->data) \ - xfree ((pGeometry)->data); \ - } - -#define GEOMETRY_SET_BUFFER(pGeometry, _buffer) \ - { \ - glitz_buffer_reference (_buffer); \ - if ((pGeometry)->buffer) \ - glitz_buffer_destroy ((pGeometry)->buffer); \ - (pGeometry)->buffer = _buffer; \ - } - -#define GEOMETRY_SET_MULTI_ARRAY(pGeometry, _array) \ - { \ - glitz_multi_array_reference (_array); \ - if ((pGeometry)->array) \ - glitz_multi_array_destroy ((pGeometry)->array); \ - (pGeometry)->array = _array; \ - } - -#define GEOMETRY_RESIZE(pScreen, pGeometry, size) \ - xglGeometryResize (pScreen, pGeometry, size) - -#define GEOMETRY_SET_TRANSLATE(pGeometry, _x, _y) \ - { \ - (pGeometry)->xOff = (_x) << 16; \ - (pGeometry)->yOff = (_y) << 16; \ - } - -#define GEOMETRY_TRANSLATE(pGeometry, tx, ty) \ - { \ - (pGeometry)->xOff += (tx) << 16; \ - (pGeometry)->yOff += (ty) << 16; \ - } - -#define GEOMETRY_TRANSLATE_FIXED(pGeometry, ftx, fty) \ - { \ - (pGeometry)->xOff += (ftx); \ - (pGeometry)->yOff += (fty); \ - } - -#define GEOMETRY_SET_VERTEX_PRIMITIVE(pGeometry, _primitive) \ - (pGeometry)->f.vertex.primitive = _primitive - -#define GEOMETRY_SET_VERTEX_DATA_TYPE(pGeometry, _type) \ - { \ - (pGeometry)->dataType = _type; \ - (pGeometry)->f.vertex.type = xglGeometryDataTypes[_type].type; \ - (pGeometry)->f.vertex.bytes_per_vertex = (pGeometry)->width * \ - xglGeometryDataTypes[_type].size; \ - } - -#define GEOMETRY_ADD_BOX(pScreen, pGeometry, pBox, nBox) \ - xglGeometryAddBox (pScreen, pGeometry, pBox, nBox, \ - (pGeometry)->endOffset) - -#define GEOMETRY_ADD_REGION_AT(pScreen, pGeometry, pRegion, offset) \ - xglGeometryAddBox (pScreen, pGeometry, \ - REGION_RECTS (pRegion), \ - REGION_NUM_RECTS (pRegion), \ - offset) - -#define GEOMETRY_ADD_REGION(pScreen, pGeometry, pRegion) \ - xglGeometryAddBox (pScreen, pGeometry, \ - REGION_RECTS (pRegion), \ - REGION_NUM_RECTS (pRegion), \ - (pGeometry)->endOffset) - -#define GEOMETRY_ADD_SPAN(pScreen, pGeometry, ppt, pwidth, n) \ - xglGeometryAddSpan (pScreen, pGeometry, ppt, pwidth, n, \ - (pGeometry)->endOffset) - -#define GEOMETRY_ADD_LINE(pScreen, pGeometry, loop, mode, npt, ppt) \ - xglGeometryAddLine (pScreen, pGeometry, loop, mode, npt, ppt, \ - (pGeometry)->endOffset) - -#define GEOMETRY_ADD_SEGMENT(pScreen, pGeometry, nsegInit, pSegInit) \ - xglGeometryAddSegment (pScreen, pGeometry, nsegInit, pSegInit, \ - (pGeometry)->endOffset) - -#define GEOMETRY_FOR_GLYPH(pScreen, pGeometry, nGlyph, ppciInit, pglyphBase) \ - xglGeometryForGlyph (pScreen, pGeometry, nGlyph, ppciInit, pglyphBase); - -#define GEOMETRY_ADD_TRAPEZOID(pScreen, pGeometry, pTrap, nTrap) \ - xglGeometryAddTrapezoid (pScreen, pGeometry, pTrap, nTrap, \ - (pGeometry)->endOffset) - -#define GEOMETRY_ADD_TRAP(pScreen, pGeometry, pTrap, nTrap) \ - xglGeometryAddTrap (pScreen, pGeometry, pTrap, nTrap, \ - (pGeometry)->endOffset) - -#define GEOMETRY_GET_FORMAT(pGeometry, format) \ - xglGeometryGetFormat (pGeometry, format) - -#define GEOMETRY_ENABLE(pGeometry, surface) \ - xglSetGeometry (pGeometry, surface) - -#define GEOMETRY_DISABLE(surface) \ - glitz_set_geometry (surface, GLITZ_GEOMETRY_TYPE_NONE, NULL, NULL) - -void -xglGeometryResize (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - int size); - -void -xglGeometryAddBox (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - BoxPtr pBox, - int nBox, - int offset); - -void -xglGeometryAddSpan (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - DDXPointPtr ppt, - int *pwidth, - int n, - int offset); - -void -xglGeometryAddLine (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - int loop, - int mode, - int npt, - DDXPointPtr ppt, - int offset); - -void -xglGeometryAddSegment (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - int nsegInit, - xSegment *pSegInit, - int offset); - -void -xglGeometryForGlyph (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - unsigned int nGlyph, - CharInfoPtr *ppciInit, - pointer pglyphBase); - -void -xglGeometryAddTrapezoid (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - xTrapezoid *pTrap, - int nTrap, - int offset); - -void -xglGeometryAddTrap (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - xTrap *pTrap, - int nTrap, - int offset); - -xglGeometryPtr -xglGetScratchGeometryWithSize (ScreenPtr pScreen, - int size); - -xglGeometryPtr -xglGetScratchVertexGeometryWithType (ScreenPtr pScreen, - int type, - int count); - -xglGeometryPtr -xglGetScratchVertexGeometry (ScreenPtr pScreen, - int count); - -Bool -xglSetGeometry (xglGeometryPtr pGeometry, - glitz_surface_t *surface); - - -/* xglpixmap.c */ - -#define XGL_PIXMAP_USAGE_HINT_STREAM_DRAW 1 -#define XGL_PIXMAP_USAGE_HINT_STREAM_READ 2 -#define XGL_PIXMAP_USAGE_HINT_STREAM_COPY 3 -#define XGL_PIXMAP_USAGE_HINT_STATIC_DRAW 4 -#define XGL_PIXMAP_USAGE_HINT_STATIC_READ 5 -#define XGL_PIXMAP_USAGE_HINT_STATIC_COPY 6 -#define XGL_PIXMAP_USAGE_HINT_DYNAMIC_DRAW 7 -#define XGL_PIXMAP_USAGE_HINT_DYNAMIC_READ 8 -#define XGL_PIXMAP_USAGE_HINT_DYNAMIC_COPY 9 - -#define XGL_PIXMAP_USAGE_HINT_DEFAULT XGL_PIXMAP_USAGE_HINT_STREAM_DRAW - -PixmapPtr -xglCreatePixmap (ScreenPtr pScreen, - int width, - int height, - int depth, - unsigned usage_hint); - -void -xglFiniPixmap (PixmapPtr pPixmap); - -Bool -xglDestroyPixmap (PixmapPtr pPixmap); - -Bool -xglModifyPixmapHeader (PixmapPtr pPixmap, - int width, - int height, - int depth, - int bitsPerPixel, - int devKind, - pointer pPixData); - -void -xglSetPixmapVisual (PixmapPtr pPixmap, - xglVisualPtr pVisual); - -RegionPtr -xglPixmapToRegion (PixmapPtr pPixmap); - -xglGeometryPtr -xglPixmapToGeometry (PixmapPtr pPixmap, - int xOff, - int yOff); - -Bool -xglCreatePixmapSurface (PixmapPtr pPixmap); - -Bool -xglAllocatePixmapBits (PixmapPtr pPixmap, int hint); - -Bool -xglMapPixmapBits (PixmapPtr pPixmap); - -Bool -xglUnmapPixmapBits (PixmapPtr pPixmap); - -Bool -xglCheckPixmapSize (PixmapPtr pPixmap, - xglSizeConstraintPtr pSize); - -void -xglEnablePixmapAccel (PixmapPtr pPixmap, - xglAccelInfoPtr pAccel); - - -/* xglsync.c */ - -Bool -xglSyncBits (DrawablePtr pDrawable, - BoxPtr pExtents); - -void -xglSyncDamageBoxBits (DrawablePtr pDrawable); - -Bool -xglSyncSurface (DrawablePtr pDrawable); - -Bool -xglPrepareTarget (DrawablePtr pDrawable); - -void -xglAddSurfaceDamage (DrawablePtr pDrawable, - RegionPtr pRegion); - -void -xglAddCurrentSurfaceDamage (DrawablePtr pDrawable); - -void -xglAddBitDamage (DrawablePtr pDrawable, - RegionPtr pRegion); - -void -xglAddCurrentBitDamage (DrawablePtr pDrawable); - - -/* xglsolid.c */ - -Bool -xglSolid (DrawablePtr pDrawable, - glitz_operator_t op, - glitz_surface_t *solid, - xglGeometryPtr pGeometry, - int x, - int y, - int width, - int height, - BoxPtr pBox, - int nBox); - -Bool -xglSolidGlyph (DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nGlyph, - CharInfoPtr *ppci, - pointer pglyphBase); - - -/* xgltile.c */ - -xglGeometryPtr -xglTiledBoxGeometry (PixmapPtr pTile, - int tileX, - int tileY, - BoxPtr pBox, - int nBox); - -Bool -xglTile (DrawablePtr pDrawable, - glitz_operator_t op, - PixmapPtr pTile, - int tileX, - int tileY, - xglGeometryPtr pGeometry, - int x, - int y, - int width, - int height, - BoxPtr pBox, - int nBox); - - -/* xglcopy.c */ - -Bool -xglCopy (DrawablePtr pSrc, - DrawablePtr pDst, - int dx, - int dy, - BoxPtr pBox, - int nBox); - -void -xglCopyProc (DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - BoxPtr pBox, - int nBox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, - Pixel bitplane, - void *closure); - - -/* xglfill.c */ - -Bool -xglFill (DrawablePtr pDrawable, - GCPtr pGC, - xglGeometryPtr pGeometry, - int x, - int y, - int width, - int height, - BoxPtr pBox, - int nBox); - -void -xglFillSpan (DrawablePtr pDrawable, - GCPtr pGC, - int n, - DDXPointPtr ppt, - int *pwidth); - -void -xglFillRect (DrawablePtr pDrawable, - GCPtr pGC, - int nrect, - xRectangle *prect); - -Bool -xglFillLine (DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int npt, - DDXPointPtr ppt); - -Bool -xglFillSegment (DrawablePtr pDrawable, - GCPtr pGC, - int nsegInit, - xSegment *pSegInit); - -Bool -xglFillGlyph (DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nglyph, - CharInfoPtr *ppciInit, - pointer pglyphBase); - - -/* xglwindow.c */ - -Bool -xglCreateWindow (WindowPtr pWin); - -Bool -xglDestroyWindow (WindowPtr pWin); - -Bool -xglChangeWindowAttributes (WindowPtr pWin, - unsigned long mask); - -void -xglCopyWindow (WindowPtr pWin, - DDXPointRec ptOldOrg, - RegionPtr prgnSrc); - -PixmapPtr -xglGetWindowPixmap (WindowPtr pWin); - -void -xglSetWindowPixmap (WindowPtr pWin, - PixmapPtr pPixmap); - - -/* xglget.c */ - -void -xglGetImage (DrawablePtr pDrawable, - int x, - int y, - int w, - int h, - unsigned int format, - unsigned long planeMask, - char *d); - -void -xglGetSpans (DrawablePtr pDrawable, - int wMax, - DDXPointPtr ppt, - int *pwidth, - int nspans, - char *pchardstStart); - - -/* xglgc.c */ - -Bool -xglCreateGC (GCPtr pGC); - -void -xglDestroyGC (GCPtr pGC); - -void -xglValidateGC (GCPtr pGC, - unsigned long changes, - DrawablePtr pDrawable); - -void -xglFillSpans (DrawablePtr pDrawable, - GCPtr pGC, - int nspans, - DDXPointPtr ppt, - int *pwidth, - int fSorted); - -void -xglSetSpans (DrawablePtr pDrawable, - GCPtr pGC, - char *psrc, - DDXPointPtr ppt, - int *pwidth, - int nspans, - int fSorted); - -void -xglPutImage (DrawablePtr pDrawable, - GCPtr pGC, - int depth, - int x, - int y, - int w, - int h, - int leftPad, - int format, - char *bits); - -RegionPtr -xglCopyArea (DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcX, - int srcY, - int w, - int h, - int dstX, - int dstY); - -RegionPtr -xglCopyPlane (DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcX, - int srcY, - int w, - int h, - int dstX, - int dstY, - unsigned long bitPlane); - -void -xglPolyPoint (DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int npt, - DDXPointPtr pptInit); - -void -xglPolylines (DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int npt, - DDXPointPtr ppt); - -void -xglPolySegment (DrawablePtr pDrawable, - GCPtr pGC, - int nsegInit, - xSegment *pSegInit); - -void -xglPolyArc (DrawablePtr pDrawable, - GCPtr pGC, - int narcs, - xArc *pArcs); - -void -xglPolyFillRect (DrawablePtr pDrawable, - GCPtr pGC, - int nrect, - xRectangle *prect); - -void -xglPolyFillArc (DrawablePtr pDrawable, - GCPtr pGC, - int narcs, - xArc *pArcs); - -void -xglImageGlyphBlt (DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nglyph, - CharInfoPtr *ppci, - pointer pglyphBase); - -void -xglPolyGlyphBlt (DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nglyph, - CharInfoPtr *ppci, - pointer pglyphBase); -void -xglPushPixels (GCPtr pGC, - PixmapPtr pBitmap, - DrawablePtr pDrawable, - int w, - int h, - int x, - int y); - - -#ifdef MITSHM - -/* xglshm.c */ - -void -xglShmPutImage (DrawablePtr pDrawable, - GCPtr pGC, - int depth, - unsigned int format, - int w, - int h, - int sx, - int sy, - int sw, - int sh, - int dx, - int dy, - char *data); - -#endif - - -#ifdef RENDER - -/* xglpict.c */ - -void -xglComposite (CARD8 op, - PicturePtr pSrc, - PicturePtr pMask, - PicturePtr pDst, - INT16 xSrc, - INT16 ySrc, - INT16 xMask, - INT16 yMask, - INT16 xDst, - INT16 yDst, - CARD16 width, - CARD16 height); - -void -xglAddTriangles (PicturePtr pDst, - INT16 xOff, - INT16 yOff, - int ntri, - xTriangle *tris); - -void -xglChangePicture (PicturePtr pPicture, - Mask mask); - -int -xglChangePictureTransform (PicturePtr pPicture, - PictTransform *transform); - -int -xglChangePictureFilter (PicturePtr pPicture, - int filter, - xFixed *params, - int nparams); - -PicturePtr -xglCreateDevicePicture (pointer data); - -Bool -xglSyncPicture (ScreenPtr pScreen, - PicturePtr pPicture, - INT16 x, - INT16 y, - CARD16 width, - CARD16 height, - INT16 *xOff, - INT16 *yOff); - -Bool -xglPictureInit (ScreenPtr pScreen); - -void -xglPictureClipExtents (PicturePtr pPicture, - BoxPtr extents); - - -/* xglcompose.c */ - -Bool -xglCompositeGeneral (CARD8 op, - PicturePtr pSrc, - PicturePtr pMask, - PicturePtr pDst, - xglGeometryPtr pGeometry, - INT16 xSrc, - INT16 ySrc, - INT16 xMask, - INT16 yMask, - INT16 xDst, - INT16 yDst, - CARD16 width, - CARD16 height); - - -/* xglglyph.c */ - -Bool -xglRealizeGlyph (ScreenPtr pScreen, - GlyphPtr pGlyph); - -void -xglUnrealizeGlyph (ScreenPtr pScreen, - GlyphPtr pGlyph); - -Bool -xglInitGlyphCache (xglGlyphCachePtr pCache, - ScreenPtr pScreen, - PictFormatPtr format); - -void -xglFiniGlyphCache (xglGlyphCachePtr pCache); - -void -xglGlyphs (CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, - int nlist, - GlyphListPtr list, - GlyphPtr *glyphs); - - -/* xgltrap.c */ - -void -xglTrapezoids (CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, - int nTrap, - xTrapezoid *traps); - -void -xglAddTraps (PicturePtr pDst, - INT16 xOff, - INT16 yOff, - int nTrap, - xTrap *traps); - -#endif - -#ifdef XGL_MODULAR - -/* xglloader.c */ - -typedef struct _xglSymbol { - void **ptr; - const char *name; -} xglSymbolRec, *xglSymbolPtr; - -void * -xglLoadModule (const char *name, - int flag); - -void -xglUnloadModule (void *handle); - -Bool -xglLookupSymbols (void *handle, - xglSymbolPtr sym, - int nSym); - -#endif - - -/* xglxv.c */ - -#ifdef XV - -Bool -xglXvScreenInit (ScreenPtr pScreen); - -#endif - - -/* xglhash.c */ - -typedef struct _xglHashTable *xglHashTablePtr; - -Bool -xglLoadHashFuncs (void *handle); - -xglHashTablePtr -xglNewHashTable (void); - -void -xglDeleteHashTable (xglHashTablePtr pTable); - -void * -xglHashLookup (const xglHashTablePtr pTable, - unsigned int key); - -void -xglHashInsert (xglHashTablePtr pTable, - unsigned int key, - void *data); - -void -xglHashRemove (xglHashTablePtr pTable, - unsigned int key); - -unsigned int -xglHashFirstEntry (xglHashTablePtr pTable); - -unsigned int -xglHashNextEntry (const xglHashTablePtr pTable, - unsigned int key); - -unsigned int -xglHashFindFreeKeyBlock (xglHashTablePtr pTable, - unsigned int numKeys); - -#endif /* _XGL_H_ */ diff --git a/hw/xgl/xglarea.c b/hw/xgl/xglarea.c deleted file mode 100644 index cdf652d0f..000000000 --- a/hw/xgl/xglarea.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" - -static Bool -xglAreaMoveIn (xglAreaPtr pArea, - pointer closure) -{ - pArea->closure = closure; - pArea->state = xglAreaOccupied; - - return (*pArea->pRoot->funcs->MoveIn) (pArea, closure); -} - -static void -xglAreaMoveOut (xglAreaPtr pArea) -{ - (*pArea->pRoot->funcs->MoveOut) (pArea, pArea->closure); - - pArea->closure = (pointer) 0; - pArea->state = xglAreaAvailable; -} - -static xglAreaPtr -xglAreaCreate (xglRootAreaPtr pRoot, - int level, - int x, - int y, - int width, - int height) -{ - xglAreaPtr pArea; - int n = 4; - - pArea = xalloc (sizeof (xglAreaRec) + pRoot->devPrivateSize); - if (!pArea) - return NULL; - - pArea->level = level; - pArea->x = x; - pArea->y = y; - pArea->width = width; - pArea->height = height; - pArea->pRoot = pRoot; - pArea->closure = (pointer) 0; - pArea->state = xglAreaAvailable; - - while (n--) - pArea->pArea[n] = NULL; - - if (pRoot->devPrivateSize) - pArea->devPrivate.ptr = pArea + 1; - else - pArea->devPrivate.ptr = (pointer) 0; - - if (!(*pArea->pRoot->funcs->Create) (pArea)) - { - free (pArea); - return NULL; - } - - return pArea; -} - -static void -xglAreaDestroy (xglAreaPtr pArea) -{ - if (!pArea) - return; - - if (pArea->state == xglAreaOccupied) - { - xglAreaMoveOut (pArea); - } - else - { - int n = 4; - - while (n--) - xglAreaDestroy (pArea->pArea[n]); - } - - xfree (pArea); -} - -static xglAreaPtr -xglAreaGetTopScoredSubArea (xglAreaPtr pArea) -{ - if (!pArea) - return NULL; - - switch (pArea->state) { - case xglAreaOccupied: - return pArea; - case xglAreaAvailable: - break; - case xglAreaDivided: { - xglAreaPtr tmp, top = NULL; - int i; - - for (i = 0; i < 4; i++) - { - tmp = xglAreaGetTopScoredSubArea (pArea->pArea[i]); - if (tmp && top) - { - if ((*pArea->pRoot->funcs->CompareScore) (tmp, - tmp->closure, - top->closure) > 0) - top = tmp; - } - else if (tmp) - { - top = tmp; - } - } - return top; - } - } - - return NULL; -} - -static Bool -xglAreaFind (xglAreaPtr pArea, - int width, - int height, - Bool kickOut, - pointer closure) -{ - if (pArea->width < width || pArea->height < height) - return FALSE; - - switch (pArea->state) { - case xglAreaOccupied: - if (kickOut) - { - if ((*pArea->pRoot->funcs->CompareScore) (pArea, - pArea->closure, - closure) >= 0) - return FALSE; - - xglAreaMoveOut (pArea); - } else - return FALSE; - - /* fall-through */ - case xglAreaAvailable: - { - if (pArea->level == pArea->pRoot->maxLevel || - (pArea->width == width && pArea->height == height)) - { - if (xglAreaMoveIn (pArea, closure)) - return TRUE; - } - else - { - int dx[4], dy[4], w[4], h[4], i; - - dx[0] = dx[2] = dy[0] = dy[1] = 0; - - w[0] = w[2] = dx[1] = dx[3] = width; - h[0] = h[1] = dy[2] = dy[3] = height; - - w[1] = w[3] = pArea->width - width; - h[2] = h[3] = pArea->height - height; - - for (i = 0; i < 2; i++) - { - if (w[i]) - pArea->pArea[i] = - xglAreaCreate (pArea->pRoot, - pArea->level + 1, - pArea->x + dx[i], - pArea->y + dy[i], - w[i], h[i]); - } - - for (; i < 4; i++) - { - if (w[i] && h[i]) - pArea->pArea[i] = - xglAreaCreate (pArea->pRoot, - pArea->level + 1, - pArea->x + dx[i], - pArea->y + dy[i], - w[i], h[i]); - } - - pArea->state = xglAreaDivided; - - if (xglAreaFind (pArea->pArea[0], width, height, kickOut, closure)) - return TRUE; - } - } break; - case xglAreaDivided: - { - xglAreaPtr topArea; - int i, rejected = FALSE; - - for (i = 0; i < 4; i++) - { - if (pArea->pArea[i]) - { - if (pArea->pArea[i]->width >= width && - pArea->pArea[i]->height >= height) - { - if (xglFindArea (pArea->pArea[i], width, height, kickOut, - closure)) - return TRUE; - - rejected = TRUE; - } - } - } - - if (rejected) - return FALSE; - - topArea = xglAreaGetTopScoredSubArea (pArea); - if (topArea) - { - if (kickOut) - { - if ((*pArea->pRoot->funcs->CompareScore) (topArea, - topArea->closure, - closure) >= 0) - return FALSE; - } else - return FALSE; - } - - for (i = 0; i < 4; i++) - { - xglAreaDestroy (pArea->pArea[i]); - pArea->pArea[i] = NULL; - } - - pArea->closure = (pointer) 0; - pArea->state = xglAreaAvailable; - if (xglFindArea (pArea, width, height, TRUE, closure)) - return TRUE; - - } break; - } - - return FALSE; -} - -Bool -xglRootAreaInit (xglRootAreaPtr pRoot, - int maxLevel, - int width, - int height, - int devPrivateSize, - xglAreaFuncsPtr funcs, - pointer closure) -{ - pRoot->maxLevel = maxLevel; - pRoot->funcs = funcs; - pRoot->devPrivateSize = devPrivateSize; - pRoot->closure = closure; - - pRoot->pArea = xglAreaCreate (pRoot, 0, 0, 0, width, height); - if (!pRoot->pArea) - return FALSE; - - return TRUE; -} - -void -xglRootAreaFini (xglRootAreaPtr pRoot) -{ - xglAreaDestroy (pRoot->pArea); -} - -void -xglLeaveArea (xglAreaPtr pArea) -{ - xglAreaMoveOut (pArea); -} - -void -xglWithdrawArea (xglAreaPtr pArea) -{ - pArea->closure = NULL; - pArea->state = xglAreaAvailable; -} - -Bool -xglFindArea (xglAreaPtr pArea, - int width, - int height, - Bool kickOut, - pointer closure) -{ - if (width < 1 || height < 0) - return FALSE; - - return xglAreaFind (pArea, width, height, kickOut, closure); -} diff --git a/hw/xgl/xglcmap.c b/hw/xgl/xglcmap.c deleted file mode 100644 index b96308ddf..000000000 --- a/hw/xgl/xglcmap.c +++ /dev/null @@ -1,466 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "colormapst.h" -#include "micmap.h" -#include "fb.h" - -static xglPixelFormatRec xglPixelFormats[] = { - { - 8, 8, - { - 8, - 0x000000ff, - 0x00000000, - 0x00000000, - 0x00000000 - } - }, { - 15, 5, - { - 16, - 0x00000000, - 0x00007c00, - 0x000003e0, - 0x0000001f - } - }, { - 16, 6, - { - 16, - 0x00000000, - 0x0000f800, - 0x000007e0, - 0x0000001f - } - }, { - 24, 8, - { - 32, - 0x00000000, - 0x00ff0000, - 0x0000ff00, - 0x000000ff - } - }, { - 32, 8, - { - 32, - 0xff000000, - 0x00ff0000, - 0x0000ff00, - 0x000000ff - } - } -}; - -#define NUM_XGL_PIXEL_FORMATS \ - (sizeof (xglPixelFormats) / sizeof (xglPixelFormats[0])) - -xglVisualPtr xglVisuals = NULL; - -void -xglSetVisualTypes (int depth, - int visuals, - int redSize, - int greenSize, - int blueSize) -{ - xglPixelFormatPtr pBestFormat = 0; - int i, rs, gs, bs, diff, bestDiff = 0; - - for (i = 0; i < NUM_XGL_PIXEL_FORMATS; i++) - { - if (xglPixelFormats[i].depth == depth) - { - if (visuals) - { - rs = Ones (xglPixelFormats[i].masks.red_mask); - gs = Ones (xglPixelFormats[i].masks.green_mask); - bs = Ones (xglPixelFormats[i].masks.blue_mask); - - if (redSize >= rs && - greenSize >= gs && - blueSize >= bs) - { - diff = (redSize - rs) + (greenSize - gs) + (blueSize - bs); - if (pBestFormat) - { - if (diff < bestDiff) - { - pBestFormat = &xglPixelFormats[i]; - bestDiff = diff; - } - } - else - { - pBestFormat = &xglPixelFormats[i]; - bestDiff = diff; - } - } - } - else - { - pBestFormat = &xglPixelFormats[i]; - break; - } - } - } - - if (pBestFormat) - { - xglVisualPtr new, *prev, v; - unsigned int bitsPerRGB; - Pixel rm, gm, bm; - - new = xalloc (sizeof (xglVisualRec)); - if (!new) - return; - - new->next = 0; - - new->format.surface = 0; - new->format.drawable = 0; - new->pPixel = pBestFormat; - new->vid = 0; - - bitsPerRGB = pBestFormat->bitsPerRGB; - - rm = pBestFormat->masks.red_mask; - gm = pBestFormat->masks.green_mask; - bm = pBestFormat->masks.blue_mask; - - fbSetVisualTypesAndMasks (depth, visuals, bitsPerRGB, rm, gm, bm); - - for (prev = &xglVisuals; (v = *prev); prev = &v->next); - *prev = new; - } - else - { - fbSetVisualTypesAndMasks (depth, 0, 0, 0, 0, 0); - } -} - -Bool -xglHasVisualTypes (xglVisualPtr pVisual, - int depth) -{ - xglVisualPtr v; - - for (v = pVisual; v; v = v->next) - if (v->pPixel->depth == depth) - return TRUE; - - return FALSE; -} - -glitz_format_t * -xglFindBestSurfaceFormat (ScreenPtr pScreen, - xglPixelFormatPtr pPixel) -{ - glitz_format_t templ, *format, *best = 0; - unsigned int mask; - unsigned short rs, gs, bs, as; - int i = 0; - - XGL_SCREEN_PRIV (pScreen); - - rs = Ones (pPixel->masks.red_mask); - gs = Ones (pPixel->masks.green_mask); - bs = Ones (pPixel->masks.blue_mask); - as = Ones (pPixel->masks.alpha_mask); - - templ.color.fourcc = GLITZ_FOURCC_RGB; - mask = GLITZ_FORMAT_FOURCC_MASK; - - do { - format = glitz_find_format (pScreenPriv->drawable, mask, &templ, i++); - if (format) - { - if (format->color.red_size >= rs && - format->color.green_size >= gs && - format->color.blue_size >= bs && - format->color.alpha_size >= as) - { - if (best) - { - if (((format->color.red_size - rs) + - (format->color.green_size - gs) + - (format->color.blue_size - bs)) < - ((best->color.red_size - rs) + - (best->color.green_size - gs) + - (best->color.blue_size - bs))) - best = format; - } - else - { - best = format; - } - } - } - } while (format); - - return best; -} - -static Bool -xglInitVisual (ScreenPtr pScreen, - xglVisualPtr pVisual, - xglPixelFormatPtr pPixel, - VisualID vid) -{ - glitz_format_t *format; - - XGL_SCREEN_PRIV (pScreen); - - format = xglFindBestSurfaceFormat (pScreen, pPixel); - if (format) - { - glitz_drawable_format_t templ; - unsigned long mask; - - templ.color = format->color; - templ.depth_size = 0; - templ.stencil_size = 0; - templ.doublebuffer = 0; - templ.samples = 1; - - mask = - GLITZ_FORMAT_FOURCC_MASK | - GLITZ_FORMAT_RED_SIZE_MASK | - GLITZ_FORMAT_GREEN_SIZE_MASK | - GLITZ_FORMAT_BLUE_SIZE_MASK | - GLITZ_FORMAT_ALPHA_SIZE_MASK | - GLITZ_FORMAT_DEPTH_SIZE_MASK | - GLITZ_FORMAT_STENCIL_SIZE_MASK | - GLITZ_FORMAT_DOUBLEBUFFER_MASK | - GLITZ_FORMAT_SAMPLES_MASK; - - pVisual->next = 0; - pVisual->vid = vid; - pVisual->pPixel = pPixel; - pVisual->pbuffer = FALSE; - - pVisual->format.surface = format; - pVisual->format.drawable = - glitz_find_drawable_format (pScreenPriv->drawable, - mask, &templ, 0); - - return TRUE; - } - - return FALSE; -} - -static Bool -xglInitPbufferVisual (ScreenPtr pScreen, - xglVisualPtr pVisual, - xglPixelFormatPtr pPixel, - VisualID vid) -{ - glitz_format_t *format; - - XGL_SCREEN_PRIV (pScreen); - - format = xglFindBestSurfaceFormat (pScreen, pPixel); - if (format) - { - glitz_drawable_format_t templ, *screenFormat; - unsigned long mask; - - /* use same drawable format as screen for pbuffers */ - screenFormat = glitz_drawable_get_format (pScreenPriv->drawable); - templ.id = screenFormat->id; - - templ.color = format->color; - templ.samples = 1; - - mask = - GLITZ_FORMAT_ID_MASK | - GLITZ_FORMAT_FOURCC_MASK | - GLITZ_FORMAT_RED_SIZE_MASK | - GLITZ_FORMAT_GREEN_SIZE_MASK | - GLITZ_FORMAT_BLUE_SIZE_MASK | - GLITZ_FORMAT_SAMPLES_MASK; - - pVisual->next = 0; - pVisual->vid = vid; - pVisual->pPixel = pPixel; - pVisual->pbuffer = TRUE; - - pVisual->format.surface = format; - pVisual->format.drawable = - glitz_find_pbuffer_format (pScreenPriv->drawable, - mask, &templ, 0); - - if (pVisual->format.drawable) - return TRUE; - } - - return FALSE; -} - -void -xglInitVisuals (ScreenPtr pScreen) -{ - xglVisualPtr pVisual, v, new, *prev; - int i; - - XGL_SCREEN_PRIV (pScreen); - - for (i = 0; i < pScreen->numVisuals; i++) - { - for (pVisual = xglVisuals; pVisual; pVisual = pVisual->next) - if (pVisual->pPixel->depth == pScreen->visuals[i].nplanes) - break; - - if (pVisual) - { - new = xalloc (sizeof (xglVisualRec)); - if (new) - { - if (xglInitVisual (pScreen, new, pVisual->pPixel, - pScreen->visuals[i].vid)) - { - new->next = 0; - - prev = &pScreenPriv->pVisual; - while ((v = *prev)) - prev = &v->next; - - *prev = new; - } - else - { - xfree (new); - } - } - - new = xalloc (sizeof (xglVisualRec)); - if (new) - { - if (xglInitPbufferVisual (pScreen, new, pVisual->pPixel, - pScreen->visuals[i].vid)) - { - new->next = 0; - - prev = &pScreenPriv->pVisual; - while ((v = *prev)) - prev = &v->next; - - *prev = new; - } - else - { - xfree (new); - } - } - } - } - - /* Add additional Xgl visuals for pixmap formats */ - for (i = 0; i < screenInfo.numPixmapFormats; i++) - { - if (!xglHasVisualTypes (pScreenPriv->pVisual, - screenInfo.formats[i].depth)) - { - for (v = xglVisuals; v; v = v->next) - if (v->pPixel->depth == screenInfo.formats[i].depth) - break; - - if (v) - { - new = xalloc (sizeof (xglVisualRec)); - if (new) - { - if (xglInitVisual (pScreen, new, v->pPixel, 0)) - { - new->next = 0; - - prev = &pScreenPriv->pVisual; - while ((v = *prev)) - prev = &v->next; - - *prev = new; - } - else - { - xfree (new); - } - } - } - } - } -} - -xglVisualPtr -xglFindVisualWithDepth (ScreenPtr pScreen, - int depth) -{ - xglVisualPtr v; - - XGL_SCREEN_PRIV (pScreen); - - for (v = pScreenPriv->pVisual; v; v = v->next) - { - if (v->pPixel->depth == depth) - return v; - } - - return 0; -} - -xglVisualPtr -xglFindVisualWithId (ScreenPtr pScreen, - int vid) -{ - xglVisualPtr v; - - XGL_SCREEN_PRIV (pScreen); - - for (v = pScreenPriv->pVisual; v; v = v->next) - { - if (v->vid == vid) - return v; - } - - return 0; -} - -void -xglClearVisualTypes (void) -{ - xglVisualPtr v; - - while (xglVisuals) - { - v = xglVisuals; - xglVisuals = v->next; - xfree (v); - } - - miClearVisualTypes (); -} diff --git a/hw/xgl/xglcompose.c b/hw/xgl/xglcompose.c deleted file mode 100644 index 34f7a0c43..000000000 --- a/hw/xgl/xglcompose.c +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" - -#ifdef RENDER - -static glitz_operator_t xglOperators[] = { - GLITZ_OPERATOR_CLEAR, - GLITZ_OPERATOR_SRC, - GLITZ_OPERATOR_DST, - GLITZ_OPERATOR_OVER, - GLITZ_OPERATOR_OVER_REVERSE, - GLITZ_OPERATOR_IN, - GLITZ_OPERATOR_IN_REVERSE, - GLITZ_OPERATOR_OUT, - GLITZ_OPERATOR_OUT_REVERSE, - GLITZ_OPERATOR_ATOP, - GLITZ_OPERATOR_ATOP_REVERSE, - GLITZ_OPERATOR_XOR, - GLITZ_OPERATOR_ADD -}; - -#define NUM_XGL_OPERATORS \ - (sizeof (xglOperators) / sizeof (xglOperators[0])) - -#define XGL_OPERATOR(op) (xglOperators[op]) - -#define XGL_GET_SOURCE_PICTURE(pPicture, outSurface) \ - (outSurface) = ((pPicture)->pDrawable) ? \ - XGL_GET_PIXMAP_PRIV ((PixmapPtr) (pPicture)->pDrawable)->surface : \ - (glitz_surface_t *) (pPicture)->pSourcePict->source.devPrivate.ptr - -Bool -xglCompositeGeneral (CARD8 op, - PicturePtr pSrc, - PicturePtr pMask, - PicturePtr pDst, - xglGeometryPtr pGeometry, - INT16 xSrc, - INT16 ySrc, - INT16 xMask, - INT16 yMask, - INT16 xDst, - INT16 yDst, - CARD16 width, - CARD16 height) -{ - ScreenPtr pScreen = pDst->pDrawable->pScreen; - INT16 xOff, yOff; - glitz_surface_t *src, *mask = NULL, *dst; - int dstXoff, dstYoff; - RegionRec region; - BoxPtr pBox, pExt; - int nBox; - - if (pDst->alphaMap) - return FALSE; - - if (op >= NUM_XGL_OPERATORS) - return FALSE; - - if (pSrc->pDrawable) - { - if (pSrc->pDrawable->type != DRAWABLE_PIXMAP) - return FALSE; - - if (pSrc->pDrawable->bitsPerPixel == 1) - return FALSE; - } - - if (pMask) - { - if (pMask->pDrawable) - { - if (pMask->pDrawable->type != DRAWABLE_PIXMAP) - return FALSE; - - if (pSrc->pDrawable == pMask->pDrawable && pSrc != pMask) - return FALSE; - } - } - - if (!xglPrepareTarget (pDst->pDrawable)) - return FALSE; - - if (!miComputeCompositeRegion (®ion, pSrc, pMask, pDst, - xSrc, ySrc, xMask, yMask, - xDst, yDst, width, height)) - return TRUE; - - pBox = REGION_RECTS (®ion); - nBox = REGION_NUM_RECTS (®ion); - pExt = REGION_EXTENTS (pScreen, ®ion); - - XGL_GET_DRAWABLE (pDst->pDrawable, dst, dstXoff, dstYoff); - - if (!xglSyncPicture (pScreen, pSrc, - pExt->x1 + xSrc - xDst, - pExt->y1 + ySrc - yDst, - pExt->x2 - pExt->x1, - pExt->y2 - pExt->y1, - &xOff, &yOff)) - { - REGION_UNINIT (pScreen, ®ion); - return FALSE; - } - - xSrc -= xOff; - ySrc -= yOff; - - XGL_GET_SOURCE_PICTURE (pSrc, src); - - if (pMask) - { - /* bitmap as mask */ - if (pMask->pDrawable && pMask->pDrawable->bitsPerPixel == 1) - { - if (pGeometry) - { - REGION_UNINIT (pScreen, ®ion); - return FALSE; - } - - pGeometry = xglPixmapToGeometry ((PixmapPtr) pMask->pDrawable, - xDst - xMask, - yDst - yMask); - if (!pGeometry) - { - REGION_UNINIT (pScreen, ®ion); - return FALSE; - } - } - else - { - if (!xglSyncPicture (pScreen, pMask, - pExt->x1 + xMask - xDst, - pExt->y1 + yMask - yDst, - pExt->x2 - pExt->x1, - pExt->y2 - pExt->y1, - &xOff, &yOff)) - { - REGION_UNINIT (pScreen, ®ion); - return FALSE; - } - - xMask -= xOff; - yMask -= yOff; - - XGL_GET_SOURCE_PICTURE (pMask, mask); - } - } - - if (!pGeometry) - { - if (!pSrc->transform && pSrc->filter != PictFilterConvolution) - { - if (pSrc->pDrawable && pSrc->repeatType == RepeatNormal) - { - XGL_PIXMAP_PRIV ((PixmapPtr) pSrc->pDrawable); - - /* tile */ - if (!pPixmapPriv->acceleratedTile) - { - pGeometry = - xglTiledBoxGeometry ((PixmapPtr) pSrc->pDrawable, - xSrc - xDst, ySrc - yDst, - pBox, nBox); - if (!pGeometry) - { - REGION_UNINIT (pScreen, ®ion); - return FALSE; - } - - pBox = pExt; - nBox = 1; - } - } - else - { - /* copy */ - if (op == PictOpSrc && !mask) - { - if (xglCopy (pSrc->pDrawable, - pDst->pDrawable, - xSrc - xDst, - ySrc - yDst, - pBox, - nBox)) - { - REGION_UNINIT (pScreen, ®ion); - return TRUE; - } - } - } - } - - if (nBox > 1) - { - pGeometry = xglGetScratchVertexGeometry (pScreen, 4 * nBox); - - GEOMETRY_ADD_BOX (pScreen, pGeometry, pBox, nBox); - - pBox = pExt; - } - - xSrc += pBox->x1 - xDst; - ySrc += pBox->y1 - yDst; - - if (pMask) - { - xMask += pBox->x1 - xDst; - yMask += pBox->y1 - yDst; - } - - xDst = pBox->x1; - yDst = pBox->y1; - - width = pBox->x2 - pBox->x1; - height = pBox->y2 - pBox->y1; - } - else - { - glitz_surface_set_clip_region (dst, - dstXoff, dstYoff, - (glitz_box_t *) pBox, nBox); - } - - if (pGeometry) - { - GEOMETRY_TRANSLATE (pGeometry, dstXoff, dstYoff); - - if (!GEOMETRY_ENABLE (pGeometry, dst)) - { - REGION_UNINIT (pScreen, ®ion); - return FALSE; - } - } - else - GEOMETRY_DISABLE (dst); - - glitz_composite (XGL_OPERATOR (op), - src, mask, dst, - xSrc, ySrc, - xMask, yMask, - xDst + dstXoff, yDst + dstYoff, - width, height); - - glitz_surface_set_clip_region (dst, 0, 0, NULL, 0); - - REGION_UNINIT (pScreen, ®ion); - - if (glitz_surface_get_status (dst)) - return FALSE; - - return TRUE; -} - -#endif diff --git a/hw/xgl/xglcopy.c b/hw/xgl/xglcopy.c deleted file mode 100644 index d612b332a..000000000 --- a/hw/xgl/xglcopy.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "fb.h" - -Bool -xglCopy (DrawablePtr pSrc, - DrawablePtr pDst, - int dx, - int dy, - BoxPtr pBox, - int nBox) -{ - glitz_surface_t *src, *dst; - int srcXoff, srcYoff; - int dstXoff, dstYoff; - - XGL_DRAWABLE_PIXMAP (pDst); - - if (!nBox) - return TRUE; - - if (xglPrepareTarget (pDst)) - { - if (!xglSyncSurface (pSrc)) - return FALSE; - } - else - { - if (!xglPrepareTarget (pSrc)) - return FALSE; - - if (!xglSyncSurface (pDst)) - return FALSE; - } - - XGL_GET_DRAWABLE (pSrc, src, srcXoff, srcYoff); - XGL_GET_DRAWABLE (pDst, dst, dstXoff, dstYoff); - - glitz_surface_set_clip_region (dst, - dstXoff, dstYoff, - (glitz_box_t *) pBox, nBox); - - glitz_copy_area (src, - dst, - srcXoff + dx, - srcYoff + dy, - pPixmap->drawable.width - dstXoff, - pPixmap->drawable.height - dstYoff, - dstXoff, - dstYoff); - - glitz_surface_set_clip_region (dst, 0, 0, NULL, 0); - - if (glitz_surface_get_status (dst)) - return FALSE; - - return TRUE; -} - -void -xglCopyProc (DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - BoxPtr pBox, - int nBox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, - Pixel bitplane, - void *closure) -{ - BoxPtr pSrcBox = (BoxPtr) closure; - - if (!xglCopy (pSrc, pDst, dx, dy, pBox, nBox)) - { - RegionRec region; - - XGL_DRAWABLE_PIXMAP (pDst); - XGL_PIXMAP_PRIV (pPixmap); - - if (!xglSyncBits (pSrc, pSrcBox)) - FatalError (XGL_SW_FAILURE_STRING); - - if (!xglMapPixmapBits (pPixmap)) - FatalError (XGL_SW_FAILURE_STRING); - - fbCopyNtoN (pSrc, pDst, pGC, - pBox, nBox, - dx, dy, - reverse, upsidedown, bitplane, - (void *) 0); - - pPixmapPriv->damageBox = miEmptyBox; - - while (nBox--) - { - REGION_INIT (pDst->pScreen, ®ion, pBox, 1); - xglAddSurfaceDamage (pDst, ®ion); - REGION_UNINIT (pDst->pScreen, ®ion); - - pBox++; - } - } else - xglAddCurrentBitDamage (pDst); -} diff --git a/hw/xgl/xglfill.c b/hw/xgl/xglfill.c deleted file mode 100644 index 64759ab2e..000000000 --- a/hw/xgl/xglfill.c +++ /dev/null @@ -1,742 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "gcstruct.h" -#include "fb.h" - -Bool -xglFill (DrawablePtr pDrawable, - GCPtr pGC, - xglGeometryPtr pGeometry, - int x, - int y, - int width, - int height, - BoxPtr pBox, - int nBox) -{ - XGL_GC_PRIV (pGC); - - switch (pGC->fillStyle) { - case FillSolid: - if (xglSolid (pDrawable, - pGCPriv->op, pGCPriv->fg, - pGeometry, - x, y, - width, height, - pBox, nBox)) - return TRUE; - break; - case FillStippled: - case FillOpaqueStippled: - break; - case FillTiled: - if (xglTile (pDrawable, - pGCPriv->op, pGC->tile.pixmap, - -(pGC->patOrg.x + pDrawable->x), - -(pGC->patOrg.y + pDrawable->y), - pGeometry, - x, y, - width, height, - pBox, nBox)) - return TRUE; - break; - } - - return FALSE; -} - -static void -xglFillBox (DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int width, - int height, - BoxPtr pBox, - int nBox) -{ - if (!nBox) - return; - - if (!xglFill (pDrawable, pGC, NULL, x, y, width, height, pBox, nBox)) - { - RegionRec region; - - XGL_DRAWABLE_PIXMAP (pDrawable); - XGL_PIXMAP_PRIV (pPixmap); - - if (!xglMapPixmapBits (pPixmap)) - FatalError (XGL_SW_FAILURE_STRING); - - switch (pGC->fillStyle) { - case FillSolid: - break; - case FillStippled: - case FillOpaqueStippled: - if (!xglSyncBits (&pGC->stipple->drawable, NullBox)) - FatalError (XGL_SW_FAILURE_STRING); - break; - case FillTiled: - if (!xglSyncBits (&pGC->tile.pixmap->drawable, NullBox)) - FatalError (XGL_SW_FAILURE_STRING); - break; - } - - pPixmapPriv->damageBox = miEmptyBox; - - while (nBox--) - { - fbFill (pDrawable, pGC, - pBox->x1, pBox->y1, - pBox->x2 - pBox->x1, pBox->y2 - pBox->y1); - - REGION_INIT (pDrawable->pScreen, ®ion, pBox, 1); - xglAddSurfaceDamage (pDrawable, ®ion); - REGION_UNINIT (pDrawable->pScreen, ®ion); - - pBox++; - } - } else - xglAddCurrentBitDamage (pDrawable); -} - -#define N_STACK_BOX 1024 - -static BoxPtr -xglMoreBoxes (BoxPtr stackBox, - BoxPtr heapBox, - int nBoxes) -{ - Bool stack = !heapBox; - - heapBox = xrealloc (heapBox, sizeof (BoxRec) * nBoxes); - if (!heapBox) - return NULL; - - if (stack) - memcpy (heapBox, stackBox, sizeof (BoxRec) * N_STACK_BOX); - - return heapBox; -} - -#define ADD_BOX(pBox, nBox, stackBox, heapBox, size, box) \ - { \ - if ((nBox) == (size)) \ - { \ - (size) *= 2; \ - (heapBox) = xglMoreBoxes (stackBox, heapBox, size); \ - if (heapBox) \ - { \ - (pBox) = (heapBox) + (nBox); \ - *(pBox)++ = (box); \ - (nBox)++; \ - } \ - } \ - else \ - { \ - *(pBox)++ = (box); \ - (nBox)++; \ - } \ - } - -void -xglFillRect (DrawablePtr pDrawable, - GCPtr pGC, - int nrect, - xRectangle *prect) -{ - RegionPtr pClip = pGC->pCompositeClip; - BoxPtr pClipBox; - BoxPtr pExtent = REGION_EXTENTS (pGC->pScreen, pClip); - BoxRec part, full; - BoxPtr heapBox = NULL; - BoxRec stackBox[N_STACK_BOX]; - int size = N_STACK_BOX; - BoxPtr pBox = stackBox; - int nClip, nBox = 0; - - while (nrect--) - { - full.x1 = prect->x + pDrawable->x; - full.y1 = prect->y + pDrawable->y; - full.x2 = full.x1 + (int) prect->width; - full.y2 = full.y1 + (int) prect->height; - - prect++; - - if (full.x1 < pExtent->x1) - full.x1 = pExtent->x1; - if (full.y1 < pExtent->y1) - full.y1 = pExtent->y1; - if (full.x2 > pExtent->x2) - full.x2 = pExtent->x2; - if (full.y2 > pExtent->y2) - full.y2 = pExtent->y2; - - if (full.x1 >= full.x2 || full.y1 >= full.y2) - continue; - - nClip = REGION_NUM_RECTS (pClip); - if (nClip == 1) - { - ADD_BOX (pBox, nBox, stackBox, heapBox, size, full); - } - else - { - pClipBox = REGION_RECTS (pClip); - while (nClip--) - { - part = *pClipBox++; - - if (part.x1 < full.x1) - part.x1 = full.x1; - if (part.y1 < full.y1) - part.y1 = full.y1; - if (part.x2 > full.x2) - part.x2 = full.x2; - if (part.y2 > full.y2) - part.y2 = full.y2; - - if (part.x1 < part.x2 && part.y1 < part.y2) - ADD_BOX (pBox, nBox, stackBox, heapBox, size, part); - } - } - } - - xglFillBox (pDrawable, pGC, - pExtent->x1, pExtent->y1, - pExtent->x2 - pExtent->x1, pExtent->y2 - pExtent->y1, - (heapBox) ? heapBox : stackBox, nBox); - - if (heapBox) - xfree (heapBox); -} - -void -xglFillSpan (DrawablePtr pDrawable, - GCPtr pGC, - int n, - DDXPointPtr ppt, - int *pwidth) -{ - RegionPtr pClip = pGC->pCompositeClip; - BoxPtr pClipBox; - BoxPtr pExtent = REGION_EXTENTS (pGC->pScreen, pClip); - BoxRec part, full; - BoxPtr heapBox = NULL; - BoxRec stackBox[N_STACK_BOX]; - int size = N_STACK_BOX; - BoxPtr pBox = stackBox; - int nClip, nBox = 0; - - while (n--) - { - full.x1 = ppt->x; - full.y1 = ppt->y; - full.x2 = full.x1 + *pwidth; - full.y2 = full.y1 + 1; - - pwidth++; - ppt++; - - if (full.x1 < pExtent->x1) - full.x1 = pExtent->x1; - if (full.y1 < pExtent->y1) - full.y1 = pExtent->y1; - if (full.x2 > pExtent->x2) - full.x2 = pExtent->x2; - if (full.y2 > pExtent->y2) - full.y2 = pExtent->y2; - - if (full.x1 >= full.x2 || full.y1 >= full.y2) - continue; - - nClip = REGION_NUM_RECTS (pClip); - if (nClip == 1) - { - ADD_BOX (pBox, nBox, stackBox, heapBox, size, full); - } - else - { - pClipBox = REGION_RECTS (pClip); - while (nClip--) - { - part = *pClipBox++; - - if (part.x1 < full.x1) - part.x1 = full.x1; - if (part.y1 < full.y1) - part.y1 = full.y1; - if (part.x2 > full.x2) - part.x2 = full.x2; - if (part.y2 > full.y2) - part.y2 = full.y2; - - if (part.x1 < part.x2 && part.y1 < part.y2) - ADD_BOX (pBox, nBox, stackBox, heapBox, size, part); - } - } - } - - xglFillBox (pDrawable, pGC, - pExtent->x1, pExtent->y1, - pExtent->x2 - pExtent->x1, pExtent->y2 - pExtent->y1, - (heapBox) ? heapBox : stackBox, nBox); - - if (heapBox) - xfree (heapBox); -} - -Bool -xglFillLine (DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int npt, - DDXPointPtr ppt) -{ - RegionPtr pClip = pGC->pCompositeClip; - BoxPtr pExtent = REGION_EXTENTS (pGC->pScreen, pClip); - Bool coincidentEndpoints = FALSE; - Bool horizontalAndVertical = TRUE; - DDXPointPtr pptTmp; - int nptTmp; - DDXPointRec pt; - xglGeometryPtr pGeometry; - - XGL_SCREEN_PRIV (pGC->pScreen); - - if (npt < 2) - return TRUE; - - pt = *ppt; - - nptTmp = npt - 1; - pptTmp = ppt + 1; - - if (mode == CoordModePrevious) - { - while (nptTmp--) - { - if (pptTmp->x && pptTmp->y) - horizontalAndVertical = FALSE; - - pt.x += pptTmp->x; - pt.y += pptTmp->y; - - pptTmp++; - } - - if (pt.x == ppt->x && pt.y == ppt->y) - coincidentEndpoints = TRUE; - } - else - { - while (nptTmp--) - { - if (pptTmp->x != pt.x && pptTmp->y != pt.y) - { - horizontalAndVertical = FALSE; - break; - } - - pt = *pptTmp++; - } - - if (ppt[npt - 1].x == ppt->x && ppt[npt - 1].y == ppt->y) - coincidentEndpoints = TRUE; - } - - if (horizontalAndVertical) - { - BoxPtr pClipBox; - BoxRec part, full; - BoxPtr heapBox = NULL; - BoxRec stackBox[N_STACK_BOX]; - int size = N_STACK_BOX; - BoxPtr pBox = stackBox; - int nClip, nBox = 0; - int dx, dy; - - pt = *ppt; - - ppt++; - npt--; - - while (npt--) - { - if (mode == CoordModePrevious) - { - dx = ppt->x; - dy = ppt->y; - } - else - { - dx = ppt->x - pt.x; - dy = ppt->y - pt.y; - } - - if (dx) - { - if (dx > 0) - { - full.x1 = pt.x + pDrawable->x; - - if (npt || coincidentEndpoints) - full.x2 = full.x1 + dx; - else - full.x2 = full.x1 + dx + 1; - } - else - { - full.x2 = pt.x + pDrawable->x + 1; - - if (npt || coincidentEndpoints) - full.x1 = full.x2 + dx; - else - full.x1 = full.x2 + dx - 1; - } - - full.y1 = pt.y + pDrawable->y; - full.y2 = full.y1 + 1; - } - else - { - if (dy > 0) - { - full.y1 = pt.y + pDrawable->y; - - if (npt || coincidentEndpoints) - full.y2 = full.y1 + dy; - else - full.y2 = full.y1 + dy + 1; - } - else - { - full.y2 = pt.y + pDrawable->y + 1; - - if (npt || coincidentEndpoints) - full.y1 = full.y2 + dy; - else - full.y1 = full.y2 + dy - 1; - } - - full.x1 = pt.x + pDrawable->x; - full.x2 = full.x1 + 1; - } - - pt.x += dx; - pt.y += dy; - - ppt++; - - if (full.x1 < pExtent->x1) - full.x1 = pExtent->x1; - if (full.y1 < pExtent->y1) - full.y1 = pExtent->y1; - if (full.x2 > pExtent->x2) - full.x2 = pExtent->x2; - if (full.y2 > pExtent->y2) - full.y2 = pExtent->y2; - - if (full.x1 >= full.x2 || full.y1 >= full.y2) - continue; - - nClip = REGION_NUM_RECTS (pClip); - if (nClip == 1) - { - ADD_BOX (pBox, nBox, stackBox, heapBox, size, full); - } - else - { - pClipBox = REGION_RECTS (pClip); - while (nClip--) - { - part = *pClipBox++; - - if (part.x1 < full.x1) - part.x1 = full.x1; - if (part.y1 < full.y1) - part.y1 = full.y1; - if (part.x2 > full.x2) - part.x2 = full.x2; - if (part.y2 > full.y2) - part.y2 = full.y2; - - if (part.x1 < part.x2 && part.y1 < part.y2) - ADD_BOX (pBox, nBox, stackBox, heapBox, size, part); - } - } - } - - xglFillBox (pDrawable, pGC, - pExtent->x1, pExtent->y1, - pExtent->x2 - pExtent->x1, pExtent->y2 - pExtent->y1, - (heapBox) ? heapBox : stackBox, nBox); - - if (heapBox) - xfree (heapBox); - - return TRUE; - } - - if (!pScreenPriv->lines) - return FALSE; - - if (coincidentEndpoints) - npt--; - - pGeometry = xglGetScratchVertexGeometry (pGC->pScreen, npt); - - GEOMETRY_ADD_LINE (pGC->pScreen, pGeometry, - coincidentEndpoints, mode, npt, ppt); - - if (coincidentEndpoints) - GEOMETRY_SET_VERTEX_PRIMITIVE (pGeometry, GLITZ_PRIMITIVE_LINE_LOOP); - else - GEOMETRY_SET_VERTEX_PRIMITIVE (pGeometry, GLITZ_PRIMITIVE_LINE_STRIP); - - /* Lines need a 0.5 translate */ - GEOMETRY_TRANSLATE_FIXED (pGeometry, 1 << 15, 1 << 15); - - GEOMETRY_TRANSLATE (pGeometry, pDrawable->x, pDrawable->y); - - pExtent = REGION_EXTENTS (pDrawable->pScreen, pGC->pCompositeClip); - - if (xglFill (pDrawable, pGC, pGeometry, - pExtent->x1, pExtent->y1, - pExtent->x2 - pExtent->x1, pExtent->y2 - pExtent->y1, - REGION_RECTS (pGC->pCompositeClip), - REGION_NUM_RECTS (pGC->pCompositeClip))) - { - xglAddCurrentBitDamage (pDrawable); - return TRUE; - } - - return FALSE; -} - -Bool -xglFillSegment (DrawablePtr pDrawable, - GCPtr pGC, - int nSegInit, - xSegment *pSegInit) -{ - RegionPtr pClip = pGC->pCompositeClip; - BoxPtr pExtent = REGION_EXTENTS (pGC->pScreen, pClip); - Bool horizontalAndVertical = TRUE; - xglGeometryPtr pGeometry; - xSegment *pSeg; - int nSeg; - - XGL_SCREEN_PRIV (pGC->pScreen); - - if (nSegInit < 1) - return TRUE; - - pSeg = pSegInit; - nSeg = nSegInit; - while (nSeg--) - { - if (pSeg->x1 != pSeg->x2 && pSeg->y1 != pSeg->y2) - horizontalAndVertical = FALSE; - - pSeg++; - } - - if (horizontalAndVertical) - { - BoxPtr pClipBox; - BoxRec part, full; - BoxPtr heapBox = NULL; - BoxRec stackBox[N_STACK_BOX]; - int size = N_STACK_BOX; - BoxPtr pBox = stackBox; - int nClip, nBox = 0; - - while (nSegInit--) - { - if (pSegInit->x1 != pSegInit->x2) - { - if (pSegInit->x1 < pSegInit->x2) - { - full.x1 = pSegInit->x1; - full.x2 = pSegInit->x2; - } - else - { - full.x1 = pSegInit->x2; - full.x2 = pSegInit->x1; - } - - full.x1 += pDrawable->x; - full.x2 += pDrawable->x + 1; - full.y1 = pSegInit->y1 + pDrawable->y; - full.y2 = full.y1 + 1; - } - else - { - if (pSegInit->y1 < pSegInit->y2) - { - full.y1 = pSegInit->y1; - full.y2 = pSegInit->y2; - } - else - { - full.y1 = pSegInit->y2; - full.y2 = pSegInit->y1; - } - - full.y1 += pDrawable->y; - full.y2 += pDrawable->y + 1; - full.x1 = pSegInit->x1 + pDrawable->x; - full.x2 = full.x1 + 1; - } - - pSegInit++; - - if (full.x1 < pExtent->x1) - full.x1 = pExtent->x1; - if (full.y1 < pExtent->y1) - full.y1 = pExtent->y1; - if (full.x2 > pExtent->x2) - full.x2 = pExtent->x2; - if (full.y2 > pExtent->y2) - full.y2 = pExtent->y2; - - if (full.x1 >= full.x2 || full.y1 >= full.y2) - continue; - - nClip = REGION_NUM_RECTS (pClip); - if (nClip == 1) - { - ADD_BOX (pBox, nBox, stackBox, heapBox, size, full); - } - else - { - pClipBox = REGION_RECTS (pClip); - while (nClip--) - { - part = *pClipBox++; - - if (part.x1 < full.x1) - part.x1 = full.x1; - if (part.y1 < full.y1) - part.y1 = full.y1; - if (part.x2 > full.x2) - part.x2 = full.x2; - if (part.y2 > full.y2) - part.y2 = full.y2; - - if (part.x1 < part.x2 && part.y1 < part.y2) - ADD_BOX (pBox, nBox, stackBox, heapBox, size, part); - } - } - } - - xglFillBox (pDrawable, pGC, - pExtent->x1, pExtent->y1, - pExtent->x2 - pExtent->x1, pExtent->y2 - pExtent->y1, - (heapBox) ? heapBox : stackBox, nBox); - - if (heapBox) - xfree (heapBox); - - return TRUE; - } - - if (!pScreenPriv->lines) - return FALSE; - - pGeometry = xglGetScratchVertexGeometry (pGC->pScreen, 2 * nSegInit); - - GEOMETRY_ADD_SEGMENT (pGC->pScreen, pGeometry, nSegInit, pSegInit); - - /* Line segments need 0.5 translate */ - GEOMETRY_TRANSLATE_FIXED (pGeometry, 1 << 15, 1 << 15); - GEOMETRY_SET_VERTEX_PRIMITIVE (pGeometry, GLITZ_PRIMITIVE_LINES); - - GEOMETRY_TRANSLATE (pGeometry, pDrawable->x, pDrawable->y); - - if (xglFill (pDrawable, pGC, pGeometry, - pExtent->x1, pExtent->y1, - pExtent->x2 - pExtent->x1, pExtent->y2 - pExtent->y1, - REGION_RECTS (pGC->pCompositeClip), - REGION_NUM_RECTS (pGC->pCompositeClip))) - { - xglAddCurrentBitDamage (pDrawable); - return TRUE; - } - - return FALSE; -} - -Bool -xglFillGlyph (DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nGlyph, - CharInfoPtr *ppci, - pointer pglyphBase) -{ - BoxPtr pExtent; - xglGeometryRec geometry; - - if (nGlyph < 1) - return TRUE; - - pExtent = REGION_EXTENTS (pDrawable->pScreen, pGC->pCompositeClip); - - x += pDrawable->x; - y += pDrawable->y; - - GEOMETRY_INIT (pDrawable->pScreen, &geometry, - GLITZ_GEOMETRY_TYPE_BITMAP, - GEOMETRY_USAGE_SYSMEM, 0); - - GEOMETRY_FOR_GLYPH (pDrawable->pScreen, - &geometry, - nGlyph, - ppci, - pglyphBase); - - GEOMETRY_TRANSLATE (&geometry, x, y); - - if (xglFill (pDrawable, pGC, &geometry, - pExtent->x1, pExtent->y1, - pExtent->x2 - pExtent->x1, pExtent->y2 - pExtent->y1, - REGION_RECTS (pGC->pCompositeClip), - REGION_NUM_RECTS (pGC->pCompositeClip))) - { - GEOMETRY_UNINIT (&geometry); - xglAddCurrentBitDamage (pDrawable); - return TRUE; - } - - GEOMETRY_UNINIT (&geometry); - return FALSE; -} diff --git a/hw/xgl/xglgc.c b/hw/xgl/xglgc.c deleted file mode 100644 index 7e7e75134..000000000 --- a/hw/xgl/xglgc.c +++ /dev/null @@ -1,645 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "fb.h" -#include "gcstruct.h" -#include "migc.h" - -#define XGL_GC_OP_FALLBACK_PROLOGUE(pDrawable) \ - xglSyncDamageBoxBits (pDrawable); \ - XGL_GC_UNWRAP (funcs); \ - XGL_GC_UNWRAP (ops) - -#define XGL_GC_OP_FALLBACK_EPILOGUE(pDrawable) \ - XGL_GC_WRAP (funcs, (GCFuncs *) &xglGCFuncs); \ - XGL_GC_WRAP (ops, (GCOps *) &xglGCOps); \ - xglAddCurrentSurfaceDamage (pDrawable) - -#define XGL_GC_FILL_OP_FALLBACK_PROLOGUE(pDrawable) \ - switch (pGC->fillStyle) { \ - case FillSolid: \ - break; \ - case FillStippled: \ - case FillOpaqueStippled: \ - if (!xglSyncBits (&pGC->stipple->drawable, NullBox)) \ - FatalError (XGL_SW_FAILURE_STRING); \ - break; \ - case FillTiled: \ - if (!xglSyncBits (&pGC->tile.pixmap->drawable, NullBox)) \ - FatalError (XGL_SW_FAILURE_STRING); \ - break; \ - } \ - XGL_GC_OP_FALLBACK_PROLOGUE (pDrawable) - -static const GCFuncs xglGCFuncs = { - xglValidateGC, - miChangeGC, - miCopyGC, - xglDestroyGC, - miChangeClip, - miDestroyClip, - miCopyClip -}; - -static const GCOps xglGCOps = { - xglFillSpans, - xglSetSpans, - xglPutImage, - xglCopyArea, - xglCopyPlane, - xglPolyPoint, - xglPolylines, - xglPolySegment, - miPolyRectangle, - xglPolyArc, - miFillPolygon, - xglPolyFillRect, - xglPolyFillArc, - miPolyText8, - miPolyText16, - miImageText8, - miImageText16, - xglImageGlyphBlt, - xglPolyGlyphBlt, - xglPushPixels -}; - -void -xglFillSpans (DrawablePtr pDrawable, - GCPtr pGC, - int nspans, - DDXPointPtr ppt, - int *pwidth, - int fSorted) -{ - XGL_GC_PRIV (pGC); - - if (pGCPriv->flags || pGC->fillStyle == FillStippled) - { - XGL_GC_FILL_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->FillSpans) (pDrawable, pGC, nspans, ppt, pwidth, fSorted); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); - } - else - { - /* xglFillSpan handles fall-back */ - xglFillSpan (pDrawable, pGC, nspans, ppt, pwidth); - } -} - -void -xglSetSpans (DrawablePtr pDrawable, - GCPtr pGC, - char *psrc, - DDXPointPtr ppt, - int *pwidth, - int nspans, - int fSorted) -{ - XGL_GC_PRIV (pGC); - - XGL_GC_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->SetSpans) (pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); -} - -void -xglPutImage (DrawablePtr pDrawable, - GCPtr pGC, - int depth, - int x, - int y, - int w, - int h, - int leftPad, - int format, - char *bits) -{ - XGL_GC_PRIV (pGC); - - if (pGC->alu != GXcopy || (pGCPriv->flags & xglGCPlaneMaskFlag)) - { - XGL_GC_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->PutImage) (pDrawable, pGC, depth, - x, y, w, h, leftPad, format, bits); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); - } - else - { - RegionPtr pClip = pGC->pCompositeClip; - RegionRec region; - BoxRec box; - - XGL_DRAWABLE_PIXMAP (pDrawable); - - if (!xglMapPixmapBits (pPixmap)) - FatalError (XGL_SW_FAILURE_STRING); - - XGL_GC_UNWRAP (funcs); - XGL_GC_UNWRAP (ops); - - (*pGC->ops->PutImage) (pDrawable, pGC, depth, - x, y, w, h, leftPad, format, bits); - - XGL_GC_WRAP (funcs, (GCFuncs *) &xglGCFuncs); - XGL_GC_WRAP (ops, (GCOps *) &xglGCOps); - - box.x1 = pDrawable->x + x; - box.y1 = pDrawable->y + y; - box.x2 = box.x1 + w; - box.y2 = box.y1 + h; - - REGION_INIT (pDrawable->pScreen, ®ion, &box, 1); - REGION_INTERSECT (pDrawable->pScreen, ®ion, pClip, ®ion); - - xglAddSurfaceDamage (pDrawable, ®ion); - - REGION_UNINIT (pDrawable->pScreen, ®ion); - } -} - -RegionPtr -xglCopyArea (DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcX, - int srcY, - int w, - int h, - int dstX, - int dstY) -{ - RegionPtr pRegion; - BoxRec box; - - XGL_GC_PRIV (pGC); - - box.x1 = pSrc->x + srcX; - box.y1 = pSrc->y + srcY; - box.x2 = box.x1 + w; - box.y2 = box.y1 + h; - - if (pGC->alu != GXcopy || pGCPriv->flags) - { - if (!xglSyncBits (pSrc, &box)) - FatalError (XGL_SW_FAILURE_STRING); - - XGL_GC_OP_FALLBACK_PROLOGUE (pDst); - pRegion = (*pGC->ops->CopyArea) (pSrc, pDst, pGC, - srcX, srcY, w, h, dstX, dstY); - XGL_GC_OP_FALLBACK_EPILOGUE (pDst); - } - else - { - /* xglCopyProc handles fall-back */ - pRegion = fbDoCopy (pSrc, pDst, pGC, - srcX, srcY, - w, h, - dstX, dstY, - xglCopyProc, 0, - (void *) &box); - } - - return pRegion; -} - -RegionPtr -xglCopyPlane (DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcX, - int srcY, - int w, - int h, - int dstX, - int dstY, - unsigned long bitPlane) -{ - RegionPtr pRegion; - BoxRec box; - - XGL_GC_PRIV (pGC); - - box.x1 = pSrc->x + srcX; - box.y1 = pSrc->y + srcY; - box.x2 = box.x1 + w; - box.y2 = box.y1 + h; - - if (!xglSyncBits (pSrc, &box)) - FatalError (XGL_SW_FAILURE_STRING); - - XGL_GC_OP_FALLBACK_PROLOGUE (pDst); - pRegion = (*pGC->ops->CopyPlane) (pSrc, pDst, pGC, - srcX, srcY, w, h, dstX, dstY, - bitPlane); - XGL_GC_OP_FALLBACK_EPILOGUE (pDst); - - return pRegion; -} - -void -xglPolyPoint (DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int npt, - DDXPointPtr pptInit) -{ - XGL_GC_PRIV (pGC); - - XGL_GC_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->PolyPoint) (pDrawable, pGC, mode, npt, pptInit); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); -} - -void -xglPolylines (DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int npt, - DDXPointPtr ppt) -{ - if (pGC->lineWidth == 0) - { - XGL_GC_PRIV (pGC); - - if (!pGCPriv->flags) - { - if (pGC->lineStyle == LineSolid) - { - if (xglFillLine (pDrawable, pGC, mode, npt, ppt)) - return; - } - } - - XGL_GC_FILL_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->Polylines) (pDrawable, pGC, mode, npt, ppt); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); - } - else - { - if (pGC->lineStyle != LineSolid) - miWideDash (pDrawable, pGC, mode, npt, ppt); - else - miWideLine (pDrawable, pGC, mode, npt, ppt); - } -} - -void -xglPolySegment (DrawablePtr pDrawable, - GCPtr pGC, - int nsegInit, - xSegment *pSegInit) -{ - if (pGC->lineWidth == 0) - { - XGL_GC_PRIV (pGC); - - if (!pGCPriv->flags) - { - if (pGC->lineStyle == LineSolid) - { - if (xglFillSegment (pDrawable, pGC, nsegInit, pSegInit)) - return; - } - } - - XGL_GC_FILL_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->PolySegment) (pDrawable, pGC, nsegInit, pSegInit); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); - } else - miPolySegment (pDrawable, pGC, nsegInit, pSegInit); -} - -void -xglPolyArc (DrawablePtr pDrawable, - GCPtr pGC, - int narcs, - xArc *pArcs) -{ - if (pGC->lineWidth == 0) - { - XGL_GC_PRIV (pGC); - - XGL_GC_FILL_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->PolyArc) (pDrawable, pGC, narcs, pArcs); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); - } else - miPolyArc (pDrawable, pGC, narcs, pArcs); -} - -void -xglPolyFillRect (DrawablePtr pDrawable, - GCPtr pGC, - int nrect, - xRectangle *prect) -{ - XGL_GC_PRIV (pGC); - - if (pGC->fillStyle == FillStippled || pGCPriv->flags) - { - XGL_GC_FILL_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->PolyFillRect) (pDrawable, pGC, nrect, prect); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); - } - else - { - /* xglFillRect handles fall-back */ - xglFillRect (pDrawable, pGC, nrect, prect); - } -} - -void -xglPolyFillArc (DrawablePtr pDrawable, - GCPtr pGC, - int narcs, - xArc *pArcs) -{ - XGL_GC_PRIV (pGC); - - XGL_GC_FILL_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->PolyFillArc) (pDrawable, pGC, narcs, pArcs); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); -} - -void -xglImageGlyphBlt (DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nglyph, - CharInfoPtr *ppci, - pointer pglyphBase) -{ - XGL_GC_PRIV (pGC); - - if (!pGCPriv->flags) - { - if (xglSolidGlyph (pDrawable, - pGC, - x, - y, - nglyph, - ppci, - pglyphBase)) - return; - } - - XGL_GC_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->ImageGlyphBlt) (pDrawable, pGC, x, y, nglyph, ppci, - pglyphBase); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); -} - -void -xglPolyGlyphBlt (DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nglyph, - CharInfoPtr *ppci, - pointer pglyphBase) -{ - XGL_GC_PRIV (pGC); - - if (!pGCPriv->flags) - { - if (xglFillGlyph (pDrawable, - pGC, - x, - y, - nglyph, - ppci, - pglyphBase)) - return; - } - - XGL_GC_FILL_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->PolyGlyphBlt) (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); -} - -void -xglPushPixels (GCPtr pGC, - PixmapPtr pBitmap, - DrawablePtr pDrawable, - int w, - int h, - int x, - int y) -{ - XGL_GC_PRIV (pGC); - - if (!xglSyncBits (&pBitmap->drawable, NullBox)) - FatalError (XGL_SW_FAILURE_STRING); - - XGL_GC_OP_FALLBACK_PROLOGUE (pDrawable); - (*pGC->ops->PushPixels) (pGC, pBitmap, pDrawable, w, h, x, y); - XGL_GC_OP_FALLBACK_EPILOGUE (pDrawable); -} - -Bool -xglCreateGC (GCPtr pGC) -{ - ScreenPtr pScreen = pGC->pScreen; - Bool ret; - - XGL_SCREEN_PRIV (pScreen); - XGL_GC_PRIV (pGC); - - XGL_SCREEN_UNWRAP (CreateGC); - ret = (*pScreen->CreateGC) (pGC); - XGL_SCREEN_WRAP (CreateGC, xglCreateGC); - - XGL_GC_WRAP (funcs, (GCFuncs *) &xglGCFuncs); - XGL_GC_WRAP (ops, (GCOps *) &xglGCOps); - - pGCPriv->flags = 0; - pGCPriv->op = GLITZ_OPERATOR_SRC; - - pGCPriv->fg = NULL; - pGCPriv->bg = NULL; - pGCPriv->id = ~0; - - return ret; -} - -void -xglDestroyGC (GCPtr pGC) -{ - XGL_GC_PRIV (pGC); - - if (pGCPriv->fg) - glitz_surface_destroy (pGCPriv->fg); - - if (pGCPriv->bg) - glitz_surface_destroy (pGCPriv->bg); - - XGL_GC_UNWRAP (funcs); - XGL_GC_UNWRAP (ops); - (*pGC->funcs->DestroyGC) (pGC); - XGL_GC_WRAP (funcs, (GCFuncs *) &xglGCFuncs); - XGL_GC_WRAP (ops, (GCOps *) &xglGCOps); -} - -void -xglValidateGC (GCPtr pGC, - unsigned long changes, - DrawablePtr pDrawable) -{ - XGL_GC_PRIV (pGC); - - if (changes & GCTile) - { - if (!pGC->tileIsPixel && - FbEvenTile (pGC->tile.pixmap->drawable.width * - pDrawable->bitsPerPixel)) - xglSyncBits (&pGC->tile.pixmap->drawable, NULL); - } - - if (changes & GCStipple) - { - if (pGC->stipple) - xglSyncBits (&pGC->stipple->drawable, NULL); - } - - XGL_GC_UNWRAP (funcs); - XGL_GC_UNWRAP (ops); - (*pGC->funcs->ValidateGC) (pGC, changes, pDrawable); - XGL_GC_WRAP (funcs, (GCFuncs *) &xglGCFuncs); - XGL_GC_WRAP (ops, (GCOps *) &xglGCOps); - - if (pDrawable->serialNumber != (pGC->serialNumber & DRAWABLE_SERIAL_BITS)) - { - XGL_DRAWABLE_PIXMAP_PRIV (pDrawable); - - if (pPixmapPriv->pVisual && pPixmapPriv->pVisual->format.surface) - { - glitz_format_t *format; - - format = pPixmapPriv->pVisual->format.surface; - if (format->id != pGCPriv->id) - { - XGL_SCREEN_PRIV (pDrawable->pScreen); - - pGCPriv->flags |= xglGCSoftwareDrawableFlag; - - if (pGCPriv->fg) - glitz_surface_destroy (pGCPriv->fg); - - pGCPriv->fg = glitz_surface_create (pScreenPriv->drawable, - format, 1, 1, 0, NULL); - if (pGCPriv->fg) - glitz_surface_set_fill (pGCPriv->fg, GLITZ_FILL_REPEAT); - - if (pGCPriv->bg) - glitz_surface_destroy (pGCPriv->bg); - - pGCPriv->bg = glitz_surface_create (pScreenPriv->drawable, - format, 1, 1, 0, NULL); - if (pGCPriv->bg) - glitz_surface_set_fill (pGCPriv->bg, GLITZ_FILL_REPEAT); - - pGCPriv->id = format->id; - - if (pGCPriv->fg && pGCPriv->bg) - { - changes |= (GCForeground | GCBackground); - pGCPriv->flags &= ~xglGCSoftwareDrawableFlag; - } - } - } - else - pGCPriv->flags |= xglGCSoftwareDrawableFlag; - } - - if (changes & GCFunction) - { - switch (pGC->alu) { - case GXclear: - pGCPriv->op = GLITZ_OPERATOR_CLEAR; - pGCPriv->flags &= ~xglGCBadFunctionFlag; - break; - case GXcopy: - pGCPriv->op = GLITZ_OPERATOR_SRC; - pGCPriv->flags &= ~xglGCBadFunctionFlag; - break; - case GXnoop: - pGCPriv->op = GLITZ_OPERATOR_DST; - pGCPriv->flags &= ~xglGCBadFunctionFlag; - break; - default: - pGCPriv->flags |= xglGCBadFunctionFlag; - break; - } - } - - if (changes & GCPlaneMask) - { - FbBits mask; - - mask = FbFullMask (pDrawable->depth); - - if ((pGC->planemask & mask) != mask) - pGCPriv->flags |= xglGCPlaneMaskFlag; - else - pGCPriv->flags &= ~xglGCPlaneMaskFlag; - } - - if (!(pGCPriv->flags & xglGCSoftwareDrawableFlag)) - { - if (changes & (GCForeground | GCBackground)) - { - glitz_pixel_format_t format; - glitz_buffer_t *buffer; - CARD32 pixel; - - XGL_DRAWABLE_PIXMAP_PRIV (pDrawable); - - format.fourcc = GLITZ_FOURCC_RGB; - format.masks = pPixmapPriv->pVisual->pPixel->masks; - format.xoffset = 0; - format.skip_lines = 0; - format.bytes_per_line = sizeof (CARD32); - format.scanline_order = GLITZ_PIXEL_SCANLINE_ORDER_BOTTOM_UP; - - buffer = glitz_buffer_create_for_data (&pixel); - - if (changes & GCForeground) - { - pixel = pGC->fgPixel; - glitz_set_pixels (pGCPriv->fg, 0, 0, 1, 1, &format, buffer); - } - - if (changes & GCBackground) - { - pixel = pGC->bgPixel; - glitz_set_pixels (pGCPriv->bg, 0, 0, 1, 1, &format, buffer); - } - - glitz_buffer_destroy (buffer); - } - } -} diff --git a/hw/xgl/xglgeometry.c b/hw/xgl/xglgeometry.c deleted file mode 100644 index 7ab1ba45c..000000000 --- a/hw/xgl/xglgeometry.c +++ /dev/null @@ -1,724 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include <X11/fonts/fontstruct.h> -#include "dixfontstr.h" - -xglDataTypeInfoRec xglGeometryDataTypes[2] = { - { GLITZ_DATA_TYPE_SHORT, sizeof (glitz_short_t) }, - { GLITZ_DATA_TYPE_FLOAT, sizeof (glitz_float_t) } -}; - -glitz_buffer_hint_t usageTypes[] = { - GLITZ_BUFFER_HINT_STREAM_DRAW, - GLITZ_BUFFER_HINT_STATIC_DRAW, - GLITZ_BUFFER_HINT_DYNAMIC_DRAW -}; - -void -xglGeometryResize (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - int size) -{ - XGL_SCREEN_PRIV (pScreen); - - if (size == pGeometry->size) - return; - - if (pGeometry->broken) - return; - - if (pGeometry->usage == GEOMETRY_USAGE_SYSMEM) - { - pGeometry->data = xrealloc (pGeometry->data, size); - - if (pGeometry->buffer) - glitz_buffer_destroy (pGeometry->buffer); - - pGeometry->buffer = NULL; - - if (pGeometry->data) - { - pGeometry->buffer = glitz_buffer_create_for_data (pGeometry->data); - if (!pGeometry->buffer) - { - pGeometry->broken = TRUE; - return; - } - } - else if (size) - { - pGeometry->broken = TRUE; - return; - } - } - else - { - glitz_buffer_t *newBuffer; - - if (size) - { - newBuffer = - glitz_vertex_buffer_create (pScreenPriv->drawable, NULL, size, - usageTypes[pGeometry->usage]); - if (!newBuffer) - { - pGeometry->broken = TRUE; - return; - } - } else - newBuffer = NULL; - - if (pGeometry->buffer && newBuffer) - { - void *oldData, *newData; - - oldData = glitz_buffer_map (pGeometry->buffer, - GLITZ_BUFFER_ACCESS_READ_ONLY); - newData = glitz_buffer_map (newBuffer, - GLITZ_BUFFER_ACCESS_WRITE_ONLY); - - if (oldData && newData) - memcpy (newData, oldData, MIN (size, pGeometry->size)); - - glitz_buffer_unmap (pGeometry->buffer); - glitz_buffer_unmap (newBuffer); - - glitz_buffer_destroy (pGeometry->buffer); - } - pGeometry->buffer = newBuffer; - } - - pGeometry->size = size; - - if (pGeometry->endOffset > size) - pGeometry->endOffset = size; -} - -#define MAP_GEOMETRY(pScreen, pGeometry, offset, units, ptr, _size) \ - if ((pGeometry)->broken) \ - return; \ - (_size) = (units) * xglGeometryDataTypes[(pGeometry)->dataType].size; \ - if (((pGeometry)->size - (offset)) < (_size)) \ - { \ - xglGeometryResize (pScreen, pGeometry, \ - (pGeometry)->endOffset + (_size) + 500); \ - if ((pGeometry)->broken) \ - return; \ - } \ - (ptr) = glitz_buffer_map ((pGeometry)->buffer, \ - GLITZ_BUFFER_ACCESS_WRITE_ONLY); \ - if (!(ptr)) \ - { \ - (pGeometry)->broken = TRUE; \ - return; \ - } \ - (ptr) += (offset) - -#define UNMAP_GEOMETRY(pGeometry, offset, _size) \ - if (glitz_buffer_unmap ((pGeometry)->buffer)) \ - { \ - (pGeometry)->broken = TRUE; \ - return; \ - } \ - if (((offset) + (_size)) > (pGeometry)->endOffset) \ - { \ - (pGeometry)->endOffset = (offset) + (_size); \ - (pGeometry)->count = (pGeometry)->endOffset / \ - (2 * xglGeometryDataTypes[(pGeometry)->dataType].size); \ - } - -/* - * Adds a number of boxes as GL_QUAD primitives - */ -void -xglGeometryAddBox (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - BoxPtr pBox, - int nBox, - int offset) -{ - int size; - char *ptr; - - if (nBox < 1) - return; - - MAP_GEOMETRY (pScreen, pGeometry, offset, nBox * 8, ptr, size); - - switch (pGeometry->dataType) { - case GEOMETRY_DATA_TYPE_SHORT: - { - glitz_short_t *data = (glitz_short_t *) ptr; - - while (nBox--) - { - *data++ = (glitz_short_t) pBox->x1; - *data++ = (glitz_short_t) pBox->y1; - *data++ = (glitz_short_t) pBox->x2; - *data++ = (glitz_short_t) pBox->y1; - *data++ = (glitz_short_t) pBox->x2; - *data++ = (glitz_short_t) pBox->y2; - *data++ = (glitz_short_t) pBox->x1; - *data++ = (glitz_short_t) pBox->y2; - - pBox++; - } - } break; - case GEOMETRY_DATA_TYPE_FLOAT: - { - glitz_float_t *data = (glitz_float_t *) ptr; - - while (nBox--) - { - *data++ = (glitz_float_t) pBox->x1; - *data++ = (glitz_float_t) pBox->y1; - *data++ = (glitz_float_t) pBox->x2; - *data++ = (glitz_float_t) pBox->y1; - *data++ = (glitz_float_t) pBox->x2; - *data++ = (glitz_float_t) pBox->y2; - *data++ = (glitz_float_t) pBox->x1; - *data++ = (glitz_float_t) pBox->y2; - - pBox++; - } - } break; - } - - UNMAP_GEOMETRY (pGeometry, offset, size); -} - -/* - * Adds a number of spans as GL_LINE primitives - */ -void -xglGeometryAddSpan (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - DDXPointPtr ppt, - int *pwidth, - int n, - int offset) -{ - int size; - char *ptr; - - if (n < 1) - return; - - MAP_GEOMETRY (pScreen, pGeometry, offset, n * 4, ptr, size); - - switch (pGeometry->dataType) { - case GEOMETRY_DATA_TYPE_SHORT: - { - glitz_short_t *data = (glitz_short_t *) ptr; - - while (n--) - { - *data++ = (glitz_short_t) ppt->x; - *data++ = (glitz_short_t) ppt->y; - *data++ = (glitz_short_t) (ppt->x + *pwidth); - *data++ = (glitz_short_t) ppt->y; - - ppt++; - pwidth++; - } - } break; - case GEOMETRY_DATA_TYPE_FLOAT: - { - glitz_float_t *data = (glitz_float_t *) ptr; - - while (n--) - { - *data++ = (glitz_float_t) ppt->x; - *data++ = (glitz_float_t) ppt->y; - *data++ = (glitz_float_t) (ppt->x + *pwidth); - *data++ = (glitz_float_t) ppt->y; - - ppt++; - pwidth++; - } - } break; - } - - UNMAP_GEOMETRY (pGeometry, offset, size); -} - -/* - * This macro is needed for end pixels to be rasterized correctly using - * OpenGL as OpenGL line segments are half-opened. - */ -#define ADJUST_END_POINT(start, end, isPoint) \ - (((end) > (start)) ? (end) + 1: \ - ((end) < (start)) ? (end) - 1: \ - (isPoint) ? (end) + 1: \ - (end)) - -/* - * Adds a number of connected lines as GL_LINE_STRIP primitives - */ -void -xglGeometryAddLine (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - int loop, - int mode, - int npt, - DDXPointPtr ppt, - int offset) -{ - DDXPointRec pt; - int size; - char *ptr; - - if (npt < 2) - return; - - MAP_GEOMETRY (pScreen, pGeometry, offset, npt * 2, ptr, size); - - pt.x = 0; - pt.y = 0; - - switch (pGeometry->dataType) { - case GEOMETRY_DATA_TYPE_SHORT: - { - glitz_short_t *data = (glitz_short_t *) ptr; - - while (npt--) - { - if (mode == CoordModePrevious) - { - pt.x += ppt->x; - pt.y += ppt->y; - } - else - { - pt.x = ppt->x; - pt.y = ppt->y; - } - - if (npt || loop) - { - *data++ = (glitz_short_t) pt.x; - *data++ = (glitz_short_t) pt.y; - } - else - { - ppt--; - *data++ = (glitz_short_t) - ADJUST_END_POINT (ppt->x, pt.x, ppt->y == pt.y); - *data++ = (glitz_short_t) ADJUST_END_POINT (ppt->y, pt.y, 0); - } - - ppt++; - } - } break; - case GEOMETRY_DATA_TYPE_FLOAT: - { - glitz_float_t *data = (glitz_float_t *) ptr; - - while (npt--) - { - if (mode == CoordModePrevious) - { - pt.x += ppt->x; - pt.y += ppt->y; - } - else - { - pt.x = ppt->x; - pt.y = ppt->y; - } - - if (npt || loop) - { - *data++ = (glitz_float_t) pt.x; - *data++ = (glitz_float_t) pt.y; - } - else - { - ppt--; - *data++ = (glitz_float_t) - ADJUST_END_POINT (ppt->x, pt.x, ppt->y == pt.y); - *data++ = (glitz_float_t) ADJUST_END_POINT (ppt->y, pt.y, 0); - } - - ppt++; - } - } break; - } - - UNMAP_GEOMETRY (pGeometry, offset, size); -} - -/* - * Adds a number of line segments as GL_LINE primitives - */ -void -xglGeometryAddSegment (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - int nsegInit, - xSegment *pSegInit, - int offset) -{ - int size; - char *ptr; - - if (nsegInit < 1) - return; - - MAP_GEOMETRY (pScreen, pGeometry, offset, nsegInit * 4, ptr, size); - - switch (pGeometry->dataType) { - case GEOMETRY_DATA_TYPE_SHORT: - { - glitz_short_t *data = (glitz_short_t *) ptr; - - while (nsegInit--) - { - *data++ = (glitz_short_t) pSegInit->x1; - *data++ = (glitz_short_t) pSegInit->y1; - *data++ = (glitz_short_t) - ADJUST_END_POINT (pSegInit->x1, pSegInit->x2, - pSegInit->y1 == pSegInit->y2); - *data++ = (glitz_short_t) - ADJUST_END_POINT (pSegInit->y1, pSegInit->y2, 0); - - pSegInit++; - } - } break; - case GEOMETRY_DATA_TYPE_FLOAT: - { - glitz_float_t *data = (glitz_float_t *) ptr; - - while (nsegInit--) - { - *data++ = (glitz_float_t) pSegInit->x1; - *data++ = (glitz_float_t) pSegInit->y1; - *data++ = (glitz_float_t) - ADJUST_END_POINT (pSegInit->x1, pSegInit->x2, - pSegInit->y1 == pSegInit->y2); - *data++ = (glitz_float_t) - ADJUST_END_POINT (pSegInit->y1, pSegInit->y2, 0); - - pSegInit++; - } - } break; - } - - UNMAP_GEOMETRY (pGeometry, offset, size); -} - -void -xglGeometryForGlyph (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - unsigned int nGlyph, - CharInfoPtr *ppciInit, - pointer pglyphBase) -{ - CharInfoPtr *ppci; - CharInfoPtr pci; - unsigned char *glyphbase = (pointer) ~0; - unsigned char *pglyph; - int x = 0; - int gx, gy; - int gWidth, gHeight; - int n, lastX = 0, lastY = 0; - glitz_multi_array_t *array; - glitz_buffer_t *buffer; - - ppci = ppciInit; - n = nGlyph; - - while (n--) - { - pglyph = FONTGLYPHBITS (pglyphBase, *ppci++); - if (pglyph < glyphbase) - glyphbase = pglyph; - } - - buffer = glitz_buffer_create_for_data (glyphbase); - if (!buffer) - { - pGeometry->broken = TRUE; - return; - } - - GEOMETRY_SET_BUFFER (pGeometry, buffer); - - array = glitz_multi_array_create (nGlyph); - if (!array) - { - pGeometry->broken = TRUE; - return; - } - - GEOMETRY_SET_MULTI_ARRAY (pGeometry, array); - - ppci = ppciInit; - while (nGlyph--) - { - pci = *ppci++; - pglyph = FONTGLYPHBITS (pglyphBase, pci); - gWidth = GLYPHWIDTHPIXELS (pci); - gHeight = GLYPHHEIGHTPIXELS (pci); - - if (gWidth && gHeight) - { - gx = x + pci->metrics.leftSideBearing; - gy = -pci->metrics.ascent; - - glitz_multi_array_add (array, - (pglyph - glyphbase) * 8, - gWidth, gHeight, - (gx - lastX) << 16, (gy - lastY) << 16); - lastX = gx; - lastY = gy; - } - x += pci->metrics.characterWidth; - } - - glitz_buffer_destroy (buffer); - glitz_multi_array_destroy (array); -} - -#define FIXED_LINE_X_TO_FLOAT(line, v) \ - (((glitz_float_t) \ - ((line).p1.x + (xFixed_16_16) \ - (((xFixed_32_32) ((v) - (line).p1.y) * \ - ((line).p2.x - (line).p1.x)) / \ - ((line).p2.y - (line).p1.y)))) / 65536) - -#define FIXED_LINE_X_CEIL_TO_FLOAT(line, v) \ - (((glitz_float_t) \ - ((line).p1.x + (xFixed_16_16) \ - (((((line).p2.y - (line).p1.y) - 1) + \ - ((xFixed_32_32) ((v) - (line).p1.y) * \ - ((line).p2.x - (line).p1.x))) / \ - ((line).p2.y - (line).p1.y)))) / 65536) - -/* - * Adds a number of trapezoids as GL_QUAD primitives - */ -void -xglGeometryAddTrapezoid (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - xTrapezoid *pTrap, - int nTrap, - int offset) -{ - int size; - char *ptr; - - if (nTrap < 1) - return; - - MAP_GEOMETRY (pScreen, pGeometry, offset, nTrap * 8, ptr, size); - - switch (pGeometry->dataType) { - case GEOMETRY_DATA_TYPE_SHORT: - /* not supported */ - pGeometry->broken = TRUE; - break; - case GEOMETRY_DATA_TYPE_FLOAT: - { - glitz_float_t *data = (glitz_float_t *) ptr; - glitz_float_t top, bottom; - - while (nTrap--) - { - top = FIXED_TO_FLOAT (pTrap->top); - bottom = FIXED_TO_FLOAT (pTrap->bottom); - - *data++ = FIXED_LINE_X_TO_FLOAT (pTrap->left, pTrap->top); - *data++ = top; - *data++ = FIXED_LINE_X_CEIL_TO_FLOAT (pTrap->right, pTrap->top); - *data++ = top; - *data++ = FIXED_LINE_X_CEIL_TO_FLOAT (pTrap->right, pTrap->bottom); - *data++ = bottom; - *data++ = FIXED_LINE_X_TO_FLOAT (pTrap->left, pTrap->bottom); - *data++ = bottom; - - pTrap++; - } - } break; - } - - UNMAP_GEOMETRY (pGeometry, offset, size); -} - -/* - * Adds a number of traps as GL_QUAD primitives - */ -void -xglGeometryAddTrap (ScreenPtr pScreen, - xglGeometryPtr pGeometry, - xTrap *pTrap, - int nTrap, - int offset) -{ - int size; - char *ptr; - - if (nTrap < 1) - return; - - MAP_GEOMETRY (pScreen, pGeometry, offset, nTrap * 8, ptr, size); - - switch (pGeometry->dataType) { - case GEOMETRY_DATA_TYPE_SHORT: - /* not supported */ - pGeometry->broken = TRUE; - break; - case GEOMETRY_DATA_TYPE_FLOAT: - { - glitz_float_t *data = (glitz_float_t *) ptr; - glitz_float_t top, bottom; - - while (nTrap--) - { - top = FIXED_TO_FLOAT (pTrap->top.y); - bottom = FIXED_TO_FLOAT (pTrap->bot.y); - - *data++ = FIXED_TO_FLOAT (pTrap->top.l); - *data++ = top; - *data++ = FIXED_TO_FLOAT (pTrap->top.r); - *data++ = top; - *data++ = FIXED_TO_FLOAT (pTrap->bot.r); - *data++ = bottom; - *data++ = FIXED_TO_FLOAT (pTrap->bot.l); - *data++ = bottom; - - pTrap++; - } - } break; - } - - UNMAP_GEOMETRY (pGeometry, offset, size); -} - -/* XXX: scratch geometry size never shrinks, it just gets larger when - required. this is not acceptable. */ -xglGeometryPtr -xglGetScratchGeometryWithSize (ScreenPtr pScreen, - int size) -{ - xglGeometryPtr pGeometry; - - XGL_SCREEN_PRIV (pScreen); - - pGeometry = &pScreenPriv->scratchGeometry; - - if (pGeometry->broken || pGeometry->size < size) - { - GEOMETRY_UNINIT (pGeometry); - GEOMETRY_INIT (pScreen, pGeometry, pGeometry->type, - pScreenPriv->geometryUsage, size); - } - else - { - if (pGeometry->array) - { - glitz_multi_array_destroy (pGeometry->array); - pGeometry->array = NULL; - } - pGeometry->endOffset = 0; - pGeometry->xOff = 0; - pGeometry->yOff = 0; - pGeometry->first = 0; - pGeometry->count = 0; - pGeometry->width = 2; - } - - return pGeometry; -} - -xglGeometryPtr -xglGetScratchVertexGeometryWithType (ScreenPtr pScreen, - int type, - int count) -{ - xglGeometryPtr pGeometry; - int stride; - - stride = 2 * xglGeometryDataTypes[type].size; - - pGeometry = xglGetScratchGeometryWithSize (pScreen, count * stride); - - pGeometry->type = GLITZ_GEOMETRY_TYPE_VERTEX; - pGeometry->dataType = type; - - pGeometry->f.vertex.primitive = GLITZ_PRIMITIVE_QUADS; - pGeometry->f.vertex.type = xglGeometryDataTypes[type].type; - pGeometry->f.vertex.bytes_per_vertex = stride; - pGeometry->f.vertex.attributes = 0; - - return pGeometry; -} - -xglGeometryPtr -xglGetScratchVertexGeometry (ScreenPtr pScreen, - int count) -{ - xglGeometryPtr pGeometry; - int type, stride; - - XGL_SCREEN_PRIV (pScreen); - - type = pScreenPriv->geometryDataType; - stride = 2 * xglGeometryDataTypes[type].size; - - pGeometry = xglGetScratchGeometryWithSize (pScreen, count * stride); - - pGeometry->type = GLITZ_GEOMETRY_TYPE_VERTEX; - pGeometry->dataType = type; - - pGeometry->f.vertex.primitive = GLITZ_PRIMITIVE_QUADS; - pGeometry->f.vertex.type = xglGeometryDataTypes[type].type; - pGeometry->f.vertex.bytes_per_vertex = stride; - pGeometry->f.vertex.attributes = 0; - - return pGeometry; -} - -Bool -xglSetGeometry (xglGeometryPtr pGeometry, - glitz_surface_t *surface) -{ - if (pGeometry->broken) - return FALSE; - - glitz_set_geometry (surface, pGeometry->type, &pGeometry->f, - pGeometry->buffer); - - if (pGeometry->array) - glitz_set_multi_array (surface, pGeometry->array, - pGeometry->xOff, pGeometry->yOff); - else - glitz_set_array (surface, - pGeometry->first, pGeometry->width, pGeometry->count, - pGeometry->xOff, pGeometry->yOff); - - return TRUE; -} diff --git a/hw/xgl/xglget.c b/hw/xgl/xglget.c deleted file mode 100644 index 87bcb0508..000000000 --- a/hw/xgl/xglget.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" - -void -xglGetImage (DrawablePtr pDrawable, - int x, - int y, - int w, - int h, - unsigned int format, - unsigned long planeMask, - char *d) -{ - ScreenPtr pScreen = pDrawable->pScreen; - glitz_surface_t *surface; - int xOff, yOff; - BoxRec box; - - XGL_SCREEN_PRIV (pScreen); - - /* Many apps use GetImage to sync with the visible frame buffer */ - if (pDrawable->type == DRAWABLE_WINDOW) - { - if (!xglSyncSurface (&pScreenPriv->pScreenPixmap->drawable)) - FatalError (XGL_SW_FAILURE_STRING); - - glitz_surface_flush (pScreenPriv->surface); - glitz_drawable_finish (pScreenPriv->drawable); - } - - XGL_GET_DRAWABLE (pDrawable, surface, xOff, yOff); - - box.x1 = pDrawable->x + xOff + x; - box.y1 = pDrawable->y + yOff + y; - box.x2 = box.x1 + w; - box.y2 = box.y1 + h; - - if (!xglSyncBits (pDrawable, &box)) - FatalError (XGL_SW_FAILURE_STRING); - - XGL_SCREEN_UNWRAP (GetImage); - (*pScreen->GetImage) (pDrawable, x, y, w, h, format, planeMask, d); - XGL_SCREEN_WRAP (GetImage, xglGetImage); -} - -void -xglGetSpans (DrawablePtr pDrawable, - int wMax, - DDXPointPtr ppt, - int *pwidth, - int nspans, - char *pchardstStart) -{ - ScreenPtr pScreen = pDrawable->pScreen; - - XGL_SCREEN_PRIV (pScreen); - - if (!xglSyncBits (pDrawable, NullBox)) - FatalError (XGL_SW_FAILURE_STRING); - - XGL_SCREEN_UNWRAP (GetSpans); - (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pchardstStart); - XGL_SCREEN_WRAP (GetSpans, xglGetSpans); -} diff --git a/hw/xgl/xglglx.c b/hw/xgl/xglglx.c deleted file mode 100644 index d92f9659e..000000000 --- a/hw/xgl/xglglx.c +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xglglx.h" - -#ifdef GLXEXT - -#ifdef XGL_MODULAR -#include <dlfcn.h> -#endif - -xglGLXFuncRec __xglGLXFunc; - -#ifndef NGLXEXTLOG -FILE *__xglGLXLogFp; -#endif - -static void *glXHandle = 0; -static void *glCoreHandle = 0; - -#define SYM(ptr, name) { (void **) &(ptr), (name) } - -__GLXextensionInfo *__xglExtensionInfo; -__GLXscreenInfo *__xglScreenInfoPtr; - -void -GlxSetVisualConfigs (int nconfigs, - __GLXvisualConfig *configs, - void **privates) -{ - if (glXHandle && glCoreHandle) - (*__xglGLXFunc.setVisualConfigs) (nconfigs, configs, privates); -} - -void -GlxExtensionInit (void) -{ - if (glXHandle && glCoreHandle) - (*__xglGLXFunc.extensionInit) (); -} - -void -GlxWrapInitVisuals (miInitVisualsProcPtr *initVisuals) -{ - if (glXHandle && glCoreHandle) - (*__xglGLXFunc.wrapInitVisuals) (initVisuals); -} - -int -GlxInitVisuals (VisualPtr *visualp, - DepthPtr *depthp, - int *nvisualp, - int *ndepthp, - int *rootDepthp, - VisualID *defaultVisp, - unsigned long sizes, - int bitsPerRGB, - int preferredVis) -{ - if (glXHandle && glCoreHandle) - return (*__xglGLXFunc.initVisuals) (visualp, depthp, nvisualp, ndepthp, - rootDepthp, defaultVisp, sizes, - bitsPerRGB, preferredVis); - - return 0; -} - -void -GlxFlushContextCache (void) -{ - (*__xglGLXFunc.flushContextCache) (); -} - -void -GlxSetRenderTables (struct _glapi_table *table) -{ - (*__xglGLXFunc.setRenderTables) (table); -} - -struct _glapi_table *_mglapi_Dispatch; - -void *(*__glcore_DDXScreenInfo)(void); - -void *__glXglDDXScreenInfo(void) -{ - return __xglScreenInfoPtr; -} - -void *(*__glcore_DDXExtensionInfo)(void); - -void *__glXglDDXExtensionInfo(void) -{ - return __xglExtensionInfo; -} - -void _gl_copy_visual_to_context_mode( __GLcontextModes * mode, - const __GLXvisualConfig * config ) -{ - (*__xglGLXFunc.copy_visual_to_context_mode)(mode, config); -} - -__GLcontextModes *_gl_context_modes_create( unsigned count, size_t minimum_size ) -{ - return (*__xglGLXFunc.context_modes_create)(count, minimum_size); -} - -void _gl_context_modes_destroy( __GLcontextModes * modes ) -{ - (*__xglGLXFunc.context_modes_destroy)(modes); -} - -GLint _gl_convert_from_x_visual_type( int visualType ) -{ - return (*__xglGLXFunc.convert_from_x_visual_type)(visualType); -} - -GLint _gl_convert_to_x_visual_type( int visualType ) -{ - return (*__xglGLXFunc.convert_to_x_visual_type)(visualType); -} - - - -Bool -xglLoadGLXModules (void) -{ - -#ifdef XGL_MODULAR - if (!glXHandle) - { - xglSymbolRec sym[] = { - SYM (__xglGLXFunc.extensionInit, "GlxExtensionInit"), - SYM (__xglGLXFunc.setVisualConfigs, "GlxSetVisualConfigs"), - SYM (__xglGLXFunc.wrapInitVisuals, "GlxWrapInitVisuals"), - SYM (__xglGLXFunc.initVisuals, "GlxInitVisuals"), - SYM (__xglGLXFunc.flushContextCache, "__glXFlushContextCache"), - SYM (__xglGLXFunc.setRenderTables, "GlxSetRenderTables"), - SYM (__xglGLXFunc.copy_visual_to_context_mode, "_gl_copy_visual_to_context_mode"), - SYM (__xglGLXFunc.context_modes_create, "_gl_context_modes_create"), - SYM (__xglGLXFunc.context_modes_destroy, "_gl_context_modes_destroy"), - SYM (__xglGLXFunc.convert_from_x_visual_type, "_gl_convert_from_x_visual_type"), - SYM (__xglGLXFunc.convert_to_x_visual_type, "_gl_convert_to_x_visual_type"), - }; - - glXHandle = xglLoadModule ("glx", RTLD_NOW | RTLD_LOCAL); - if (!glXHandle) - return FALSE; - - if (!xglLookupSymbols (glXHandle, sym, sizeof (sym) / sizeof (sym[0]))) - { - xglUnloadModule (glXHandle); - glXHandle = 0; - - return FALSE; - } - } - - if (!glCoreHandle) - { - xglSymbolRec ddxsym[] = { - SYM (__glcore_DDXExtensionInfo, "__glXglDDXExtensionInfo"), - SYM (__glcore_DDXScreenInfo, "__glXglDDXScreenInfo") - }; - - glCoreHandle = xglLoadModule ("glcore", RTLD_NOW | RTLD_LOCAL); - if (!glCoreHandle) - return FALSE; - - if (!xglLookupSymbols (glCoreHandle, ddxsym, - sizeof (ddxsym) / sizeof(ddxsym[0]))) - { - xglUnloadModule (glCoreHandle); - glCoreHandle = 0; - - return FALSE; - } - - __xglScreenInfoPtr = __glcore_DDXScreenInfo(); - __xglExtensionInfo = __glcore_DDXExtensionInfo(); - { - xglSymbolRec sym[] = { - SYM (__xglScreenInfoPtr->screenProbe, "__MESA_screenProbe"), - SYM (__xglScreenInfoPtr->createContext, "__MESA_createContext"), - SYM (__xglScreenInfoPtr->createBuffer, "__MESA_createBuffer"), - SYM (__xglExtensionInfo->resetExtension, - "__MESA_resetExtension"), - SYM (__xglExtensionInfo->initVisuals, "__MESA_initVisuals"), - SYM (__xglExtensionInfo->setVisualConfigs, - "__MESA_setVisualConfigs"), - - }; - - - if (!xglLookupSymbols (glCoreHandle, sym, - sizeof (sym) / sizeof (sym[0]))) - { - xglUnloadModule (glCoreHandle); - glCoreHandle = 0; - - return FALSE; - } - } - - if (!xglLoadHashFuncs (glCoreHandle)) - { - xglUnloadModule (glCoreHandle); - glCoreHandle = 0; - } - } - - return TRUE; -#else - return FALSE; -#endif - -} - -void -xglUnloadGLXModules (void) -{ - -#ifdef XGL_MODULAR - if (glXHandle) - { - xglUnloadModule (glXHandle); - glXHandle = 0; - } - - if (glCoreHandle) - { - xglUnloadModule (glCoreHandle); - glCoreHandle = 0; - } -#endif - -} - -#endif diff --git a/hw/xgl/xglglx.h b/hw/xgl/xglglx.h deleted file mode 100644 index d895f4262..000000000 --- a/hw/xgl/xglglx.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" - -#ifdef GLXEXT - -#include "glxserver.h" -#include "glxscreens.h" -#include "glxext.h" -#include "glapitable.h" - - -typedef struct _xglGLXFunc { - void (*extensionInit) (void); - void (*setVisualConfigs) (int nconfigs, - __GLXvisualConfig *configs, - void **privates); - void (*wrapInitVisuals) (miInitVisualsProcPtr *initVisuals); - int (*initVisuals) (VisualPtr *visualp, - DepthPtr *depthp, - int *nvisualp, - int *ndepthp, - int *rootDepthp, - VisualID *defaultVisp, - unsigned long sizes, - int bitsPerRGB, - int preferredVis); - - void (*flushContextCache) (void); - void *(*DDXExtensionInfo) (void); - void *(*DDXScreenInfo) (void); - void (*setRenderTables) (struct _glapi_table *table); - void (*copy_visual_to_context_mode)( __GLcontextModes *mode, const __GLXvisualConfig *config ); - __GLcontextModes *(*context_modes_create)( unsigned count, size_t minimum_size ); - void (*context_modes_destroy)( __GLcontextModes * modes ); - GLint (*convert_from_x_visual_type)( int visualType ); - GLint (*convert_to_x_visual_type)( int visualType ); -} xglGLXFuncRec, *xglGLXFuncPtr; - -extern xglGLXFuncRec __xglGLXFunc; - -#ifndef NGLXEXTLOG - -extern FILE *__xglGLXLogFp; - -#endif - -/* xglglx.c */ - -Bool -xglLoadGLXModules (void); - -void -xglUnloadGLXModules (void); - -#endif diff --git a/hw/xgl/xglglyph.c b/hw/xgl/xglglyph.c deleted file mode 100644 index c1a484ac0..000000000 --- a/hw/xgl/xglglyph.c +++ /dev/null @@ -1,1170 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" - -#ifdef RENDER -#include "gcstruct.h" -#include "picturestr.h" - -#define BITMAP_CACHE_SIZE 256000 -#define BITMAP_CACHE_MAX_LEVEL ~0 -#define BITMAP_CACHE_MAX_SIZE 512 - -#define TEXTURE_CACHE_SIZE 512 -#define TEXTURE_CACHE_MAX_LEVEL 64 -#define TEXTURE_CACHE_MAX_HEIGHT 72 -#define TEXTURE_CACHE_MAX_WIDTH 72 - -#define NEXT_GLYPH_SERIAL_NUMBER ((++glyphSerialNumber) > MAX_SERIAL_NUM ? \ - (glyphSerialNumber = 1): glyphSerialNumber) - -#define GLYPH_GET_AREA_PRIV(pArea) \ - ((xglGlyphAreaPtr) (pArea)->devPrivate.ptr) - -#define GLYPH_AREA_PRIV(pArea) \ - xglGlyphAreaPtr pAreaPriv = GLYPH_GET_AREA_PRIV (pArea) - -#define NEEDS_COMPONENT(f) (PICT_FORMAT_A (f) != 0 && PICT_FORMAT_RGB (f) != 0) - -#define WRITE_VEC2(ptr, _x, _y) \ - *(ptr)++ = (_x); \ - *(ptr)++ = (_y) - -#define WRITE_BOX(ptr, _vx1, _vy1, _vx2, _vy2, box) \ - WRITE_VEC2 (ptr, _vx1, _vy1); \ - WRITE_VEC2 (ptr, (box).x1, (box).y2); \ - WRITE_VEC2 (ptr, _vx2, _vy1); \ - WRITE_VEC2 (ptr, (box).x2, (box).y2); \ - WRITE_VEC2 (ptr, _vx2, _vy2); \ - WRITE_VEC2 (ptr, (box).x2, (box).y1); \ - WRITE_VEC2 (ptr, _vx1, _vy2); \ - WRITE_VEC2 (ptr, (box).x1, (box).y1) - -typedef union _xglGlyphList { - glitz_short_t *s; - glitz_float_t *f; -} xglGlyphListRec, *xglGlyphListPtr; - -typedef struct _xglGlyphArray { - int lastX, lastY; -} xglGlyphArrayRec, *xglGlyphArrayPtr; - -typedef union _xglGlyphVertexData { - xglGlyphArrayRec array; - xglGlyphListRec list; -} xglGlyphVertexDataRec, *xglGlyphVertexDataPtr; - -typedef struct _xglGlyphOp { - GlyphListPtr pLists; - int listLen; - GlyphPtr *ppGlyphs; - int nGlyphs; - int xOff; - int yOff; - Bool noCache; -} xglGlyphOpRec, *xglGlyphOpPtr; - -unsigned long glyphSerialNumber = 0; - -xglAreaRec zeroSizeArea = { - 0, 0, - 0, 0, - 0, 0, - { NULL, NULL, NULL, NULL }, NULL, - (pointer) 0, - { 0 } -}; - -static Bool -xglGlyphCreate (xglAreaPtr pArea) -{ - return TRUE; -} - -static Bool -xglGlyphMoveIn (xglAreaPtr pArea, - pointer closure) -{ - xglGlyphCachePtr pCache = (xglGlyphCachePtr) pArea->pRoot->closure; - GlyphPtr pGlyph = (GlyphPtr) closure; - - XGL_GLYPH_PRIV (pCache->pScreen, pGlyph); - - pGlyphPriv->pArea = pArea; - - return TRUE; -} - -static void -xglGlyphMoveOut (xglAreaPtr pArea, - pointer closure) -{ - xglGlyphCachePtr pCache = (xglGlyphCachePtr) pArea->pRoot->closure; - GlyphPtr pGlyph = (GlyphPtr) closure; - - XGL_GLYPH_PRIV (pCache->pScreen, pGlyph); - - pGlyphPriv->pArea = NULL; -} - -static int -xglGlyphCompareScore (xglAreaPtr pArea, - pointer closure1, - pointer closure2) -{ - GLYPH_AREA_PRIV (pArea); - - if (pAreaPriv->serial == glyphSerialNumber) - return 1; - - return -1; -} - -static const xglAreaFuncsRec xglGlyphAreaFuncs = { - xglGlyphCreate, - xglGlyphMoveIn, - xglGlyphMoveOut, - xglGlyphCompareScore -}; - -Bool -xglRealizeGlyph (ScreenPtr pScreen, - GlyphPtr pGlyph) -{ - PictureScreenPtr pPictureScreen = GetPictureScreen (pScreen); - Bool ret; - - XGL_SCREEN_PRIV (pScreen); - XGL_GLYPH_PRIV (pScreen, pGlyph); - - XGL_PICTURE_SCREEN_UNWRAP (RealizeGlyph); - ret = (*pPictureScreen->RealizeGlyph) (pScreen, pGlyph); - XGL_PICTURE_SCREEN_WRAP (RealizeGlyph, xglRealizeGlyph); - - pGlyphPriv->pArea = NULL; - - return ret; -} - -void -xglUnrealizeGlyph (ScreenPtr pScreen, - GlyphPtr pGlyph) -{ - PictureScreenPtr pPictureScreen = GetPictureScreen (pScreen); - - XGL_SCREEN_PRIV (pScreen); - XGL_GLYPH_PRIV (pScreen, pGlyph); - - XGL_PICTURE_SCREEN_UNWRAP (UnrealizeGlyph); - (*pPictureScreen->UnrealizeGlyph) (pScreen, pGlyph); - XGL_PICTURE_SCREEN_WRAP (UnrealizeGlyph, xglUnrealizeGlyph); - - if (pGlyphPriv->pArea && pGlyphPriv->pArea->width) - xglWithdrawArea (pGlyphPriv->pArea); -} - -Bool -xglInitGlyphCache (xglGlyphCachePtr pCache, - ScreenPtr pScreen, - PictFormatPtr format) -{ - XGL_SCREEN_PRIV (pScreen); - - pCache->depth = format->depth; - - if (!pScreenPriv->pSolidAlpha) - { - xglCreateSolidAlphaPicture (pScreen); - if (!pScreenPriv->pSolidAlpha) - return FALSE; - } - - if (pCache->depth == 1) - { - int stride; - - GEOMETRY_INIT (pScreen, &pCache->u.geometry, - GLITZ_GEOMETRY_TYPE_VERTEX, - GEOMETRY_USAGE_STATIC, BITMAP_CACHE_SIZE); - GEOMETRY_SET_VERTEX_DATA_TYPE (&pCache->u.geometry, - pScreenPriv->geometryDataType); - - stride = pCache->u.geometry.f.vertex.bytes_per_vertex; - if (!xglRootAreaInit (&pCache->rootArea, - BITMAP_CACHE_MAX_LEVEL, - BITMAP_CACHE_SIZE / (stride * 4), - 0, sizeof (xglGlyphAreaRec), - (xglAreaFuncsPtr) &xglGlyphAreaFuncs, - (pointer) pCache)) - { - GEOMETRY_UNINIT (&pCache->u.geometry); - return FALSE; - } - } - else - { - - xglGlyphTexturePtr pTexture = &pCache->u.texture; - glitz_surface_t *mask; - glitz_surface_attributes_t attr; - glitz_vertex_format_t *vertex; - xglVisualPtr pVisual; - - pVisual = xglFindVisualWithDepth (pScreen, format->depth); - if (!pVisual) - return FALSE; - - if (!xglRootAreaInit (&pCache->rootArea, - TEXTURE_CACHE_MAX_LEVEL, - TEXTURE_CACHE_SIZE, TEXTURE_CACHE_SIZE, - sizeof (xglGlyphAreaRec), - (xglAreaFuncsPtr) &xglGlyphAreaFuncs, - (pointer) pCache)) - return FALSE; - - if (pScreenPriv->geometryDataType == GEOMETRY_DATA_TYPE_SHORT) - { - attr.unnormalized = 1; - mask = glitz_surface_create (pScreenPriv->drawable, - pVisual->format.surface, - TEXTURE_CACHE_SIZE, - TEXTURE_CACHE_SIZE, - GLITZ_SURFACE_UNNORMALIZED_MASK, - &attr); - } - else - mask = NULL; - - if (!mask) - { - mask = glitz_surface_create (pScreenPriv->drawable, - pVisual->format.surface, - TEXTURE_CACHE_SIZE, - TEXTURE_CACHE_SIZE, - 0, NULL); - if (!mask) - return FALSE; - - pTexture->geometryDataType = GEOMETRY_DATA_TYPE_FLOAT; - } - else - pTexture->geometryDataType = GEOMETRY_DATA_TYPE_SHORT; - - if (NEEDS_COMPONENT (format->format)) - glitz_surface_set_component_alpha (mask, 1); - - pTexture->pMask = xglCreateDevicePicture (mask); - if (!pTexture->pMask) - return FALSE; - - vertex = &pCache->u.texture.format.vertex; - vertex->primitive = GLITZ_PRIMITIVE_QUADS; - vertex->mask.size = GLITZ_COORDINATE_SIZE_XY; - vertex->attributes = GLITZ_VERTEX_ATTRIBUTE_MASK_COORD_MASK; - - if (pTexture->geometryDataType == GEOMETRY_DATA_TYPE_FLOAT) - { - vertex->type = GLITZ_DATA_TYPE_FLOAT; - vertex->bytes_per_vertex = sizeof (glitz_float_t) * 4; - vertex->mask.offset = sizeof (glitz_float_t) * 2; - vertex->mask.type = GLITZ_DATA_TYPE_FLOAT; - } - else - { - vertex->type = GLITZ_DATA_TYPE_SHORT; - vertex->bytes_per_vertex = sizeof (glitz_short_t) * 4; - vertex->mask.offset = sizeof (glitz_short_t) * 2; - vertex->mask.type = GLITZ_DATA_TYPE_SHORT; - } - - pTexture->pixel.fourcc = GLITZ_FOURCC_RGB; - pTexture->pixel.masks = pVisual->pPixel->masks; - pTexture->pixel.scanline_order = GLITZ_PIXEL_SCANLINE_ORDER_BOTTOM_UP; - pTexture->pixel.bytes_per_line = 0; - pTexture->pixel.xoffset = 0; - pTexture->pixel.skip_lines = 0; - } - - pCache->pScreen = pScreen; - - return TRUE; -} - -void -xglFiniGlyphCache (xglGlyphCachePtr pCache) -{ - if (pCache->pScreen) - { - xglRootAreaFini (&pCache->rootArea); - - if (pCache->depth == 1) - { - GEOMETRY_UNINIT (&pCache->u.geometry); - } - else - { - if (pCache->u.texture.pMask) - FreePicture ((pointer) pCache->u.texture.pMask, 0); - } - - pCache->pScreen = NULL; - } -} - -static xglAreaPtr -xglCacheGlyph (xglGlyphCachePtr pCache, - GlyphPtr pGlyph) -{ - ScreenPtr pScreen = pCache->pScreen; - - XGL_GLYPH_PRIV (pScreen, pGlyph); - - if (pCache->depth == 1) - { - PixmapPtr pPixmap; - RegionPtr pRegion; - int nBox; - - pPixmap = GetScratchPixmapHeader (pScreen, - pGlyph->info.width, - pGlyph->info.height, - pCache->depth, pCache->depth, 0, - (pointer) (pGlyph + 1)); - if (!pPixmap) - return NULL; - - (*pScreen->ModifyPixmapHeader) (pPixmap, - pGlyph->info.width, - pGlyph->info.height, - 0, 0, -1, (pointer) (pGlyph + 1)); - - pRegion = (*pScreen->BitmapToRegion) (pPixmap); - FreeScratchPixmapHeader (pPixmap); - - if (!pRegion) - return NULL; - - nBox = REGION_NUM_RECTS (pRegion); - if (nBox > BITMAP_CACHE_MAX_SIZE) - { - REGION_DESTROY (pScreen, pRegion); - return NULL; - } - - if (nBox > 0) - { - /* Find available area */ - if (!xglFindArea (pCache->rootArea.pArea, nBox, 0, - FALSE, (pointer) pGlyph)) - { - /* Kicking out area with lower score */ - xglFindArea (pCache->rootArea.pArea, nBox, 0, - TRUE, (pointer) pGlyph); - } - - if (pGlyphPriv->pArea) - { - int stride; - - GLYPH_AREA_PRIV (pGlyphPriv->pArea); - - pAreaPriv->serial = glyphSerialNumber; - pAreaPriv->u.range.first = pGlyphPriv->pArea->x * 4; - pAreaPriv->u.range.count = nBox * 4; - - stride = pCache->u.geometry.f.vertex.bytes_per_vertex; - GEOMETRY_ADD_REGION_AT (pScreen, &pCache->u.geometry, pRegion, - pGlyphPriv->pArea->x * stride * 4); - } - } else - pGlyphPriv->pArea = &zeroSizeArea; - - REGION_DESTROY (pScreen, pRegion); - } - else - { - xglGlyphTexturePtr pTexture = &pCache->u.texture; - - if (pGlyph->info.width > TEXTURE_CACHE_MAX_WIDTH || - pGlyph->info.height > TEXTURE_CACHE_MAX_HEIGHT) - return NULL; - - if (pGlyph->info.width > 0 && pGlyph->info.height > 0) - { - glitz_buffer_t *buffer; - - buffer = glitz_buffer_create_for_data (pGlyph + 1); - if (!buffer) - return NULL; - - /* Find available area */ - if (!xglFindArea (pCache->rootArea.pArea, - pGlyph->info.width, pGlyph->info.height, - FALSE, (pointer) pGlyph)) - { - /* Kicking out area with lower score */ - xglFindArea (pCache->rootArea.pArea, - pGlyph->info.width, pGlyph->info.height, - TRUE, (pointer) pGlyph); - } - - if (pGlyphPriv->pArea) - { - glitz_surface_t *surface; - glitz_point_fixed_t p1, p2; - glitz_pixel_format_t pixel; - - GLYPH_AREA_PRIV (pGlyphPriv->pArea); - - pixel = pTexture->pixel; - pixel.bytes_per_line = - PixmapBytePad (pGlyph->info.width, pCache->depth); - - surface = pTexture->pMask->pSourcePict->source.devPrivate.ptr; - - glitz_set_pixels (surface, - pGlyphPriv->pArea->x, - pGlyphPriv->pArea->y, - pGlyph->info.width, - pGlyph->info.height, - &pixel, - buffer); - - p1.x = pGlyphPriv->pArea->x << 16; - p1.y = pGlyphPriv->pArea->y << 16; - p2.x = (pGlyphPriv->pArea->x + pGlyph->info.width) << 16; - p2.y = (pGlyphPriv->pArea->y + pGlyph->info.height) << 16; - - glitz_surface_translate_point (surface, &p1, &p1); - glitz_surface_translate_point (surface, &p2, &p2); - - pAreaPriv->serial = glyphSerialNumber; - if (pTexture->geometryDataType) - { - pAreaPriv->u.box.fBox.x1 = FIXED_TO_FLOAT (p1.x); - pAreaPriv->u.box.fBox.y1 = FIXED_TO_FLOAT (p1.y); - pAreaPriv->u.box.fBox.x2 = FIXED_TO_FLOAT (p2.x); - pAreaPriv->u.box.fBox.y2 = FIXED_TO_FLOAT (p2.y); - } - else - { - pAreaPriv->u.box.sBox.x1 = p1.x >> 16; - pAreaPriv->u.box.sBox.y1 = p1.y >> 16; - pAreaPriv->u.box.sBox.x2 = p2.x >> 16; - pAreaPriv->u.box.sBox.y2 = p2.y >> 16; - } - } - glitz_buffer_destroy (buffer); - } else - pGlyphPriv->pArea = &zeroSizeArea; - } - - return pGlyphPriv->pArea; -} - -static void -xglUncachedGlyphs (CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - INT16 xSrc, - INT16 ySrc, - xglGlyphOpPtr pOp) -{ - ScreenPtr pScreen = pDst->pDrawable->pScreen; - PicturePtr pPicture = NULL; - PixmapPtr pPixmap = NULL; - xglGlyphCachePtr pCache; - int depth = pOp->pLists->format->depth; - GlyphPtr glyph; - INT16 xOff, yOff; - xglGlyphPtr pGlyphPriv; - xglAreaPtr pArea; - Bool usingCache = !pOp->noCache; - - XGL_SCREEN_PRIV (pScreen); - - pCache = &pScreenPriv->glyphCache[depth]; - if (usingCache) - { - if (!pCache->pScreen) - { - if (!xglInitGlyphCache (pCache, pScreen, pOp->pLists->format)) - usingCache = FALSE; - } - } - - while (pOp->nGlyphs) - { - glyph = *pOp->ppGlyphs; - - if (!pOp->listLen) - { - pOp->pLists++; - pOp->listLen = pOp->pLists->len; - pOp->xOff += pOp->pLists->xOff; - pOp->yOff += pOp->pLists->yOff; - } - - xOff = pOp->xOff; - yOff = pOp->yOff; - - if (usingCache) - { - pGlyphPriv = XGL_GET_GLYPH_PRIV (pScreen, glyph); - pArea = pGlyphPriv->pArea; - if (pSrc) - { - if (!pArea) - pArea = xglCacheGlyph (pCache, glyph); - - if (pArea) - break; - } - } else - pArea = NULL; - - pOp->listLen--; - pOp->nGlyphs--; - pOp->ppGlyphs++; - - pOp->xOff += glyph->info.xOff; - pOp->yOff += glyph->info.yOff; - - if (pArea) - continue; - - if (!pPicture) - { - XID componentAlpha; - int error; - - pPixmap = GetScratchPixmapHeader (pScreen, - glyph->info.width, - glyph->info.height, - depth, depth, - 0, (pointer) (glyph + 1)); - if (!pPixmap) - return; - - componentAlpha = NEEDS_COMPONENT (pOp->pLists->format->format); - pPicture = CreatePicture (0, &pPixmap->drawable, - pOp->pLists->format, - CPComponentAlpha, &componentAlpha, - serverClient, &error); - if (!pPicture) - { - FreeScratchPixmapHeader (pPixmap); - return; - } - } - - (*pScreen->ModifyPixmapHeader) (pPixmap, - glyph->info.width, glyph->info.height, - 0, 0, -1, (pointer) (glyph + 1)); - pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - - if (pSrc) - CompositePicture (op, - pSrc, - pPicture, - pDst, - xSrc + (xOff - glyph->info.x), - ySrc + (yOff - glyph->info.y), - 0, 0, - xOff - glyph->info.x, - yOff - glyph->info.y, - glyph->info.width, - glyph->info.height); - else - CompositePicture (PictOpAdd, - pPicture, - NULL, - pDst, - 0, 0, - 0, 0, - xOff - glyph->info.x, - yOff - glyph->info.y, - glyph->info.width, - glyph->info.height); - } - - if (pPicture) - { - FreeScratchPixmapHeader (pPixmap); - FreePicture ((pointer) pPicture, 0); - } -} - -static Bool -xglCachedGlyphs (CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - INT16 xSrc, - INT16 ySrc, - xglGlyphOpPtr pOp) -{ - ScreenPtr pScreen = pDst->pDrawable->pScreen; - xglGlyphOpRec opSave = *pOp; - xglGlyphCachePtr pCache; - xglGlyphVertexDataRec vData; - xglGeometryPtr pGeometry; - GlyphPtr glyph; - xglGlyphPtr pGlyphPriv; - xglAreaPtr pArea; - xglGlyphAreaPtr pGlyphArea; - BoxRec extents; - INT16 xOff, yOff, x1, x2, y1, y2; - int depth = pOp->pLists->format->depth; - int i, remaining = pOp->nGlyphs; - int nGlyph = 0; - PicturePtr pMaskPicture = NULL; - - XGL_SCREEN_PRIV (pScreen); - - pCache = &pScreenPriv->glyphCache[depth]; - if (!pCache->pScreen) - { - if (!xglInitGlyphCache (pCache, pScreen, pOp->pLists->format)) - { - pOp->noCache = TRUE; - return 1; - } - } - - /* update serial number for all glyphs already in cache so that - we don't accidentally replace one. */ - for (i = 0; i < pOp->nGlyphs; i++) - { - pGlyphPriv = XGL_GET_GLYPH_PRIV (pScreen, pOp->ppGlyphs[i]); - pArea = pGlyphPriv->pArea; - if (pArea && pArea->width) - GLYPH_GET_AREA_PRIV (pArea)->serial = glyphSerialNumber; - } - - for (i = 0; i < pOp->nGlyphs; i++) - { - pGlyphPriv = XGL_GET_GLYPH_PRIV (pScreen, pOp->ppGlyphs[i]); - pArea = pGlyphPriv->pArea; - if (!pArea) - pArea = xglCacheGlyph (pCache, pOp->ppGlyphs[i]); - - if (pArea) - { - if (pArea->width) - nGlyph++; - } - else if (pSrc) - break; - } - - if (nGlyph) - { - if (depth == 1) - { - glitz_multi_array_t *multiArray; - - pGeometry = &pCache->u.geometry; - pGeometry->xOff = pGeometry->yOff = 0; - - multiArray = glitz_multi_array_create (nGlyph); - if (!multiArray) - return 1; - - GEOMETRY_SET_MULTI_ARRAY (pGeometry, multiArray); - glitz_multi_array_destroy (multiArray); - - vData.array.lastX = 0; - vData.array.lastY = 0; - } - else - { - i = 4 * pCache->u.texture.format.vertex.bytes_per_vertex * nGlyph; - pGeometry = xglGetScratchGeometryWithSize (pScreen, i); - - pGeometry->f = pCache->u.texture.format; - pGeometry->type = GLITZ_GEOMETRY_TYPE_VERTEX; - pMaskPicture = pCache->u.texture.pMask; - - vData.list.s = glitz_buffer_map (pGeometry->buffer, - GLITZ_BUFFER_ACCESS_WRITE_ONLY); - } - } else - pGeometry = NULL; - - extents.x1 = MAXSHORT; - extents.y1 = MAXSHORT; - extents.x2 = MINSHORT; - extents.y2 = MINSHORT; - - while (pOp->nGlyphs) - { - glyph = *pOp->ppGlyphs; - - if (!pOp->listLen) - { - pOp->pLists++; - pOp->listLen = pOp->pLists->len; - pOp->xOff += pOp->pLists->xOff; - pOp->yOff += pOp->pLists->yOff; - } - - xOff = pOp->xOff; - yOff = pOp->yOff; - - pGlyphPriv = XGL_GET_GLYPH_PRIV (pScreen, glyph); - pArea = pGlyphPriv->pArea; - if (!pArea && pSrc) - break; - - pOp->listLen--; - pOp->nGlyphs--; - pOp->ppGlyphs++; - - pOp->xOff += glyph->info.xOff; - pOp->yOff += glyph->info.yOff; - - if (!pArea) - continue; - - x1 = xOff - glyph->info.x; - x2 = x1 + glyph->info.width; - if (x1 < extents.x1) - extents.x1 = x1; - if (x2 > extents.x2) - extents.x2 = x2; - - y1 = yOff - glyph->info.y; - y2 = y1 + glyph->info.height; - if (y1 < extents.y1) - extents.y1 = y1; - if (y2 > extents.y2) - extents.y2 = y2; - - if (pArea->width) - { - pGlyphArea = GLYPH_GET_AREA_PRIV (pArea); - if (depth == 1) - { - glitz_multi_array_add (pGeometry->array, - pGlyphArea->u.range.first, 2, - pGlyphArea->u.range.count, - (x1 - vData.array.lastX) << 16, - (y1 - vData.array.lastY) << 16); - vData.array.lastX = x1; - vData.array.lastY = y1; - } - else - { - if (pCache->u.texture.geometryDataType) - { - WRITE_BOX (vData.list.f, x1, y1, x2, y2, - pGlyphArea->u.box.fBox); - } - else - { - WRITE_BOX (vData.list.s, x1, y1, x2, y2, - pGlyphArea->u.box.sBox); - } - } - } - remaining--; - } - - NEXT_GLYPH_SERIAL_NUMBER; - - if (nGlyph) - { - if (depth != 1) - { - glitz_buffer_unmap (pGeometry->buffer); - pGeometry->count = nGlyph * 4; - } - - xSrc += extents.x1; - ySrc += extents.y1; - - if (!pSrc) - { - op = PictOpAdd; - pSrc = pScreenPriv->pSolidAlpha; - - if (remaining) - *pOp = opSave; - } - - GEOMETRY_TRANSLATE (pGeometry, - pDst->pDrawable->x, - pDst->pDrawable->y); - - if (xglCompositeGeneral (op, - pSrc, - pMaskPicture, - pDst, - pGeometry, - xSrc, ySrc, - 0, 0, - pDst->pDrawable->x + extents.x1, - pDst->pDrawable->y + extents.y1, - extents.x2 - extents.x1, - extents.y2 - extents.y1)) - { - xglAddCurrentBitDamage (pDst->pDrawable); - return remaining; - } - - remaining = ~0; - *pOp = opSave; - pOp->noCache = TRUE; - } - else - { - if (remaining) - { - *pOp = opSave; - pOp->noCache = TRUE; - } - } - - return remaining; -} - -static Bool -xglGlyphExtents (PicturePtr pDst, - int nlist, - GlyphListPtr list, - GlyphPtr *glyphs, - BoxPtr extents) -{ - GlyphPtr glyph; - BoxRec line; - int x1, x2, y1, y2; - int n; - int x; - int y; - Bool overlap = FALSE; - - x = 0; - y = 0; - - extents->x1 = MAXSHORT; - extents->x2 = MINSHORT; - extents->y1 = MAXSHORT; - extents->y2 = MINSHORT; - - while (!list->len) - { - if (--nlist) - { - x += list->xOff; - y += list->yOff; - list++; - } - else - { - return FALSE; - } - } - - glyph = *glyphs; - x1 = (x + list->xOff) - glyph->info.x; - if (x1 < MINSHORT) - x1 = MINSHORT; - y1 = (y + list->yOff) - glyph->info.y; - if (y1 < MINSHORT) - y1 = MINSHORT; - - line.x1 = x1; - line.x2 = x1; - line.y1 = y1; - line.y2 = y1; - - while (nlist--) - { - x += list->xOff; - y += list->yOff; - n = list->len; - list++; - - while (n--) - { - glyph = *glyphs++; - x1 = x - glyph->info.x; - if (x1 < MINSHORT) - x1 = MINSHORT; - y1 = y - glyph->info.y; - if (y1 < MINSHORT) - y1 = MINSHORT; - x2 = x1 + glyph->info.width; - if (x2 > MAXSHORT) - x2 = MAXSHORT; - y2 = y1 + glyph->info.height; - if (y2 > MAXSHORT) - y2 = MAXSHORT; - - if (x1 >= line.x2) - { - line.x2 = x2; - if (y1 < line.y1) - line.y1 = y1; - if (y2 > line.y2) - line.y2 = y2; - } - else if (x2 <= line.x1) - { - line.x1 = x1; - if (y1 < line.y1) - line.y1 = y1; - if (y2 > line.y2) - line.y2 = y2; - } - else - { - if (line.y1 >= extents->y2) - { - extents->y2 = line.y2; - if (line.y1 < extents->y1) - extents->y1 = line.y1; - } - else if (line.y2 <= extents->y1) - { - extents->y1 = line.y1; - if (line.y2 > extents->y2) - extents->y2 = line.y2; - } - else - { - if (line.y1 < extents->y1) - extents->y1 = line.y1; - if (line.y2 > extents->y2) - extents->y2 = line.y2; - - overlap = TRUE; - } - - if (line.x1 < extents->x1) - extents->x1 = line.x1; - if (line.x2 > extents->x2) - extents->x2 = line.x2; - - line.x1 = x1; - line.y1 = y1; - line.x2 = x2; - line.y2 = y2; - } - - x += glyph->info.xOff; - y += glyph->info.yOff; - } - } - - if (line.y1 >= extents->y2) - { - extents->y2 = line.y2; - if (line.y1 < extents->y1) - extents->y1 = line.y1; - } - else if (line.y2 <= extents->y1) - { - extents->y1 = line.y1; - if (line.y2 > extents->y2) - extents->y2 = line.y2; - } - else - { - if (line.y1 < extents->y1) - extents->y1 = line.y1; - if (line.y2 > extents->y2) - extents->y2 = line.y2; - - overlap = TRUE; - } - - if (line.x1 < extents->x1) - extents->x1 = line.x1; - if (line.x2 > extents->x2) - extents->x2 = line.x2; - - xglPictureClipExtents (pDst, extents); - - return overlap; -} - -/* returns 0 if all glyph lists don't have the same format */ -static CARD32 -xglGlyphListFormatId (GlyphListPtr list, - int nlist) -{ - CARD32 id = list->format->id; - - nlist--; - list++; - - while (nlist--) - { - if (list->format->id != id) - return 0; - - list++; - } - - return id; -} - -void -xglGlyphs (CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, - int nlist, - GlyphListPtr list, - GlyphPtr *glyphs) -{ - ScreenPtr pScreen = pDst->pDrawable->pScreen; - PicturePtr pMask = NULL, pSrcPicture, pDstPicture; - BoxRec extents; - xglGlyphOpRec glyphOp; - int xDst = list->xOff, yDst = list->yOff; - int overlap; - int target; - - overlap = xglGlyphExtents (pDst, nlist, list, glyphs, &extents); - if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1) - return; - - target = xglPrepareTarget (pDst->pDrawable); - - if (op != PictOpAdd && maskFormat && - (!target || overlap || op != PictOpOver || - xglGlyphListFormatId (list, nlist) != maskFormat->id)) - { - PixmapPtr pPixmap; - XID componentAlpha; - GCPtr pGC; - xRectangle rect; - int error; - - rect.x = 0; - rect.y = 0; - rect.width = extents.x2 - extents.x1; - rect.height = extents.y2 - extents.y1; - - pPixmap = (*pScreen->CreatePixmap) (pScreen, - rect.width, rect.height, - maskFormat->depth, - CREATE_PIXMAP_USAGE_SCRATCH); - if (!pPixmap) - return; - - componentAlpha = NEEDS_COMPONENT (maskFormat->format); - pMask = CreatePicture (0, &pPixmap->drawable, - maskFormat, CPComponentAlpha, &componentAlpha, - serverClient, &error); - if (!pMask) - { - (*pScreen->DestroyPixmap) (pPixmap); - return; - } - - if (!target) - { - /* make sure we don't do accelerated drawing to mask */ - xglSetPixmapVisual (pPixmap, NULL); - } - - ValidatePicture (pMask); - pGC = GetScratchGC (pPixmap->drawable.depth, pScreen); - ValidateGC (&pPixmap->drawable, pGC); - (*pGC->ops->PolyFillRect) (&pPixmap->drawable, pGC, 1, &rect); - FreeScratchGC (pGC); - - (*pScreen->DestroyPixmap) (pPixmap); - - target = xglPrepareTarget (pMask->pDrawable); - - glyphOp.xOff = -extents.x1; - glyphOp.yOff = -extents.y1; - pSrcPicture = NULL; - pDstPicture = pMask; - } - else - { - glyphOp.xOff = 0; - glyphOp.yOff = 0; - pSrcPicture = pSrc; - pDstPicture = pDst; - } - - glyphOp.ppGlyphs = glyphs; - glyphOp.noCache = !target; - - while (nlist--) - { - glyphOp.xOff += list->xOff; - glyphOp.yOff += list->yOff; - glyphOp.listLen = list->len; - glyphOp.nGlyphs = list->len; - glyphOp.pLists = list++; - - for (; nlist; nlist--, list++) - { - if (list->format->id != glyphOp.pLists->format->id) - break; - - glyphOp.nGlyphs += list->len; - } - - while (glyphOp.nGlyphs) - { - if (glyphOp.noCache || xglCachedGlyphs (op, - pSrcPicture, - pDstPicture, - xSrc - xDst, ySrc - yDst, - &glyphOp)) - xglUncachedGlyphs (op, - pSrcPicture, - pDstPicture, - xSrc - xDst, ySrc - yDst, - &glyphOp); - } - } - - if (pMask) - { - CompositePicture (op, pSrc, pMask, pDst, - xSrc + extents.x1 - xDst, - ySrc + extents.y1 - yDst, - 0, 0, - extents.x1, extents.y1, - extents.x2 - extents.x1, - extents.y2 - extents.y1); - - FreePicture ((pointer) pMask, (XID) 0); - } -} - -#endif diff --git a/hw/xgl/xglhash.c b/hw/xgl/xglhash.c deleted file mode 100644 index c6c22ad88..000000000 --- a/hw/xgl/xglhash.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" - -#define SYM(ptr, name) { (void **) &(ptr), (name) } - -typedef struct _xglHashFunc { - xglHashTablePtr (*NewHashTable) (void); - void (*DeleteHashTable) (xglHashTablePtr pTable); - void *(*HashLookup) (const xglHashTablePtr pTable, - unsigned int key); - void (*HashInsert) (xglHashTablePtr pTable, - unsigned int key, - void *data); - void (*HashRemove) (xglHashTablePtr pTable, - unsigned int key); - unsigned int (*HashFirstEntry) (xglHashTablePtr pTable); - unsigned int (*HashNextEntry) (const xglHashTablePtr pTable, - unsigned int key); - unsigned int (*HashFindFreeKeyBlock) (xglHashTablePtr pTable, - unsigned int numKeys); -} xglHashFuncRec; - -static xglHashFuncRec __hashFunc; - -static void *hashHandle = 0; - -Bool -xglLoadHashFuncs (void *handle) -{ - -#ifdef XGL_MODULAR - xglSymbolRec sym[] = { - SYM (__hashFunc.NewHashTable, "_mesa_NewHashTable"), - SYM (__hashFunc.DeleteHashTable, "_mesa_DeleteHashTable"), - SYM (__hashFunc.HashLookup, "_mesa_HashLookup"), - SYM (__hashFunc.HashInsert, "_mesa_HashInsert"), - SYM (__hashFunc.HashRemove, "_mesa_HashRemove"), - SYM (__hashFunc.HashFirstEntry, "_mesa_HashFirstEntry"), - SYM (__hashFunc.HashNextEntry, "_mesa_HashNextEntry"), - SYM (__hashFunc.HashFindFreeKeyBlock, "_mesa_HashFindFreeKeyBlock") - }; - - if (!xglLookupSymbols (handle, sym, sizeof (sym) / sizeof (sym[0]))) - return FALSE; - - hashHandle = handle; - - return TRUE; -#else - return FALSE; -#endif - -} - -xglHashTablePtr -xglNewHashTable (void) -{ - if (!hashHandle) - return 0; - - return (*__hashFunc.NewHashTable) (); -} - -void -xglDeleteHashTable (xglHashTablePtr pTable) -{ - (*__hashFunc.DeleteHashTable) (pTable); -} - -void * -xglHashLookup (const xglHashTablePtr pTable, - unsigned int key) -{ - return (*__hashFunc.HashLookup) (pTable, key); -} - -void -xglHashInsert (xglHashTablePtr pTable, - unsigned int key, - void *data) -{ - (*__hashFunc.HashInsert) (pTable, key, data); -} - -void -xglHashRemove (xglHashTablePtr pTable, - unsigned int key) -{ - (*__hashFunc.HashRemove) (pTable, key); -} - -unsigned int -xglHashFirstEntry (xglHashTablePtr pTable) -{ - return (*__hashFunc.HashFirstEntry) (pTable); -} - -unsigned int -xglHashNextEntry (const xglHashTablePtr pTable, - unsigned int key) -{ - return (*__hashFunc.HashNextEntry) (pTable, key); -} - -unsigned int -xglHashFindFreeKeyBlock (xglHashTablePtr pTable, - unsigned int numKeys) -{ - return (*__hashFunc.HashFindFreeKeyBlock) (pTable, numKeys); -} diff --git a/hw/xgl/xglinit.c b/hw/xgl/xglinit.c deleted file mode 100644 index f170e92f0..000000000 --- a/hw/xgl/xglinit.c +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "xglglx.h" -#include "micmap.h" -#include "mipointer.h" -#include "fb.h" - -#ifdef XGL_MODULAR -#include <dlfcn.h> -#endif - -#define DEFAULT_DDX_MODULE_NAME "xglx" - -static char *ddxModuleName = DEFAULT_DDX_MODULE_NAME; - -xglScreenInfoRec xglScreenInfo = { - NULL, 0, 0, 0, 0, 0, - DEFAULT_GEOMETRY_DATA_TYPE, - DEFAULT_GEOMETRY_USAGE, - FALSE, - XGL_DEFAULT_PBO_MASK, - FALSE, - { - { FALSE, FALSE, { 0, 0, 0, 0 } }, - { FALSE, FALSE, { 0, 0, 0, 0 } }, - { FALSE, FALSE, { 0, 0, 0, 0 } }, - { FALSE, FALSE, { 0, 0, 0, 0 } } - } -}; - -#ifdef GLXEXT -static Bool loadGlx = TRUE; - -#ifndef NGLXEXTLOG -static char *glxExtLogFile = 0; -#endif - -#endif - -typedef struct _xglDDXFunc { - void (*initOutput) (ScreenInfo *pScreenInfo, - int argc, - char **argv); - void (*initInput) (int argc, - char **argv); - Bool (*legalModifier) (unsigned int key, - DevicePtr pDev); - void (*processInputEvents) (void); - void (*useMsg) (void); - int (*processArgument) (int argc, - char **argv, - int i); - void (*abort) (void); - void (*giveUp) (void); - void (*osVendorInit) (void); -} xglDDXFuncRec; - -static xglDDXFuncRec __ddxFunc; - -#define SYMFUNC(name) ((void *) (name)) -#define SYMVAR(name) ((void *) &(name)) - -/* - * The following table is used to make sure that all symbols required by - * dynamically loaded modules are present in the main program. Add more symbols - * as needed. - */ - -void *symTab[] = { - SYMFUNC (xglKbdCtrl), - SYMFUNC (xglSetPixmapFormats), - SYMVAR (xglVisuals), - - SYMFUNC (mieqEnqueue), - SYMFUNC (mieqInit), - SYMFUNC (mieqProcessInputEvents), - SYMFUNC (miPointerAbsoluteCursor), - SYMFUNC (miRegisterPointerDevice), - SYMFUNC (miPointerWarpCursor), - SYMFUNC (miDCInitialize), - SYMFUNC (miPointerAbsoluteCursor), - SYMFUNC (miPointerUpdate), - SYMFUNC (miRegisterRedirectBorderClipProc) -}; - -#define SYM(ptr, name) { (void **) &(ptr), (name) } - -static Bool -xglEnsureDDXModule (void) -{ - -#ifdef XGL_MODULAR - static void *ddxHandle = 0; - static Bool status = TRUE; - - if (!status) - return FALSE; - -#ifdef GLXEXT - /* GLX and GLcore modules must be loaded with RTLD_NOW and RTLD_LOCAL - flags before DDX module which is linked to libGL and should be - loaded with RTLD_GLOBAL. */ - if (loadGlx) - { - if (!xglLoadGLXModules ()) - FatalError ("No GLX modules loaded"); - -#ifndef NGLXEXTLOG - if (glxExtLogFile) - { - __xglGLXLogFp = fopen (glxExtLogFile, "w"); - if (!__xglGLXLogFp) - perror ("InitOutput"); - } - else - __xglGLXLogFp = 0; -#endif - - } -#endif - - if (!ddxHandle) - { - xglSymbolRec sym[] = { - SYM (__ddxFunc.initOutput, "InitOutput"), - SYM (__ddxFunc.initInput, "InitInput"), - SYM (__ddxFunc.legalModifier, "LegalModifier"), - SYM (__ddxFunc.processInputEvents, "ProcessInputEvents"), - SYM (__ddxFunc.useMsg, "ddxUseMsg"), - SYM (__ddxFunc.processArgument, "ddxProcessArgument"), - SYM (__ddxFunc.abort, "AbortDDX"), - SYM (__ddxFunc.giveUp, "ddxGiveUp"), - SYM (__ddxFunc.osVendorInit, "OsVendorInit") - }; - - ddxHandle = xglLoadModule (ddxModuleName, RTLD_NOW | RTLD_GLOBAL); - if (!ddxHandle) - return (status = FALSE); - - if (!xglLookupSymbols (ddxHandle, sym, sizeof (sym) / sizeof (sym[0]))) - { - xglUnloadModule (ddxHandle); - ddxHandle = 0; - - return (status = FALSE); - } - } - - return TRUE; -#else - return FALSE; -#endif - -} - -void -InitOutput (ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ - (void) symTab; - - if (!xglEnsureDDXModule ()) - FatalError ("No DDX module loaded"); - - (*__ddxFunc.initOutput) (pScreenInfo, argc, argv); -} - -Bool -LegalModifier (unsigned int key, - DeviceIntPtr pDev) -{ - return (*__ddxFunc.legalModifier) (key, pDev); -} - -void -ProcessInputEvents (void) -{ - (*__ddxFunc.processInputEvents) (); -} - -void -InitInput (int argc, - char **argv) -{ - if (!xglEnsureDDXModule ()) - FatalError ("No DDX module loaded"); - - (*__ddxFunc.initInput) (argc, argv); -} - -void -ddxUseMsg (void) -{ - ErrorF ("\nXgl usage:\n"); - ErrorF ("-ddx module specify ddx module\n"); - -#ifdef GLXEXT - ErrorF ("-noglx don't load glx extension\n"); - -#ifndef NGLXEXTLOG - ErrorF ("-glxlog file glx extension log file\n"); -#endif - -#endif - - xglUseMsg (); - - if (xglEnsureDDXModule ()) - (*__ddxFunc.useMsg) (); -} - -int -ddxProcessArgument (int argc, - char **argv, - int i) -{ - static Bool checkDDX = FALSE; - int skip; - - if (!checkDDX) - { - int j; - - for (j = i; j < argc; j++) - { - if (!strcmp (argv[j], "-ddx")) - { - if (++j < argc) - ddxModuleName = argv[j]; - } - -#ifdef GLXEXT - else if (!strcmp (argv[j], "-noglx")) - { - loadGlx = FALSE; - } - -#ifndef NGLXEXTLOG - else if (!strcmp (argv[j], "-glxlog")) - { - if (++j < argc) - glxExtLogFile = argv[j]; - } -#endif - -#endif - - } - checkDDX = TRUE; - } - - if (!strcmp (argv[i], "-ddx")) - { - if ((i + 1) < argc) - return 2; - - return 1; - } - -#ifdef GLXEXT - else if (!strcmp (argv[i], "-noglx")) - { - return 1; - } - -#ifndef NGLXEXTLOG - else if (!strcmp (argv[i], "-glxlog")) - { - if ((i + 1) < argc) - return 2; - - return 1; - } -#endif - -#endif - - skip = xglProcessArgument (argc, argv, i); - if (skip) - return skip; - - if (xglEnsureDDXModule ()) - return (*__ddxFunc.processArgument) (argc, argv, i); - - return 0; -} - -void -AbortDDX (void) -{ - if (xglEnsureDDXModule ()) - (*__ddxFunc.abort) (); -} - -void -ddxGiveUp (void) -{ - if (xglEnsureDDXModule ()) - (*__ddxFunc.giveUp) (); -} - -void -OsVendorInit (void) -{ - if (xglEnsureDDXModule ()) - (*__ddxFunc.osVendorInit) (); -} diff --git a/hw/xgl/xglinput.c b/hw/xgl/xglinput.c deleted file mode 100644 index 9499fcf1f..000000000 --- a/hw/xgl/xglinput.c +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "inputstr.h" -#include "mipointer.h" - -#define XK_PUBLISHING -#include <X11/keysym.h> -#if HAVE_X11_XF86KEYSYM_H -#include <X11/XF86keysym.h> -#endif - -#define NUM_BUTTONS 7 - -int -xglMouseProc (DeviceIntPtr pDevice, - int onoff) -{ - BYTE map[NUM_BUTTONS + 1]; - DevicePtr pDev = (DevicePtr) pDevice; - int i; - - switch (onoff) { - case DEVICE_INIT: - for (i = 1; i <= NUM_BUTTONS; i++) - map[i] = i; - - InitPointerDeviceStruct (pDev, - map, - NUM_BUTTONS, - miPointerGetMotionEvents, - (PtrCtrlProcPtr) NoopDDA, - miPointerGetMotionBufferSize ()); - break; - case DEVICE_ON: - pDev->on = TRUE; - break; - case DEVICE_OFF: - case DEVICE_CLOSE: - pDev->on = FALSE; - break; - } - - return Success; -} - -void -xglBell (int volume, - DeviceIntPtr pDev, - pointer ctrl, - int something) -{ -} - -void -xglKbdCtrl (DeviceIntPtr pDevice, - KeybdCtrl *ctrl) -{ -} - -#define XGL_KEYMAP_WIDTH 2 - -KeySym xglKeymap[] = { -/* 1 8 */ XK_Escape, NoSymbol, -/* 2 9 */ XK_1, XK_exclam, -/* 3 10 */ XK_2, XK_at, -/* 4 11 */ XK_3, XK_numbersign, -/* 5 12 */ XK_4, XK_dollar, -/* 6 13 */ XK_5, XK_percent, -/* 7 14 */ XK_6, XK_asciicircum, -/* 8 15 */ XK_7, XK_ampersand, -/* 9 16 */ XK_8, XK_asterisk, -/* 10 17 */ XK_9, XK_parenleft, -/* 11 18 */ XK_0, XK_parenright, -/* 12 19 */ XK_minus, XK_underscore, -/* 13 20 */ XK_equal, XK_plus, -/* 14 21 */ XK_BackSpace, NoSymbol, -/* 15 22 */ XK_Tab, NoSymbol, -/* 16 23 */ XK_Q, NoSymbol, -/* 17 24 */ XK_W, NoSymbol, -/* 18 25 */ XK_E, NoSymbol, -/* 19 26 */ XK_R, NoSymbol, -/* 20 27 */ XK_T, NoSymbol, -/* 21 28 */ XK_Y, NoSymbol, -/* 22 29 */ XK_U, NoSymbol, -/* 23 30 */ XK_I, NoSymbol, -/* 24 31 */ XK_O, NoSymbol, -/* 25 32 */ XK_P, NoSymbol, -/* 26 33 */ XK_bracketleft, XK_braceleft, -/* 27 34 */ XK_bracketright, XK_braceright, -/* 28 35 */ XK_Return, NoSymbol, -/* 29 36 */ XK_Control_L, NoSymbol, -/* 30 37 */ XK_A, NoSymbol, -/* 31 38 */ XK_S, NoSymbol, -/* 32 39 */ XK_D, NoSymbol, -/* 33 40 */ XK_F, NoSymbol, -/* 34 41 */ XK_G, NoSymbol, -/* 35 42 */ XK_H, NoSymbol, -/* 36 43 */ XK_J, NoSymbol, -/* 37 44 */ XK_K, NoSymbol, -/* 38 45 */ XK_L, NoSymbol, -/* 39 46 */ XK_semicolon, XK_colon, -/* 40 47 */ XK_apostrophe, XK_quotedbl, -/* 41 48 */ XK_grave, XK_asciitilde, -/* 42 49 */ XK_Shift_L, NoSymbol, -/* 43 50 */ XK_backslash, XK_bar, -/* 44 51 */ XK_Z, NoSymbol, -/* 45 52 */ XK_X, NoSymbol, -/* 46 53 */ XK_C, NoSymbol, -/* 47 54 */ XK_V, NoSymbol, -/* 48 55 */ XK_B, NoSymbol, -/* 49 56 */ XK_N, NoSymbol, -/* 50 57 */ XK_M, NoSymbol, -/* 51 58 */ XK_comma, XK_less, -/* 52 59 */ XK_period, XK_greater, -/* 53 60 */ XK_slash, XK_question, -/* 54 61 */ XK_Shift_R, NoSymbol, -/* 55 62 */ XK_KP_Multiply, NoSymbol, -/* 56 63 */ XK_Alt_L, XK_Meta_L, -/* 57 64 */ XK_space, NoSymbol, -/* 58 65 */ XK_Caps_Lock, NoSymbol, -/* 59 66 */ XK_F1, NoSymbol, -/* 60 67 */ XK_F2, NoSymbol, -/* 61 68 */ XK_F3, NoSymbol, -/* 62 69 */ XK_F4, NoSymbol, -/* 63 70 */ XK_F5, NoSymbol, -/* 64 71 */ XK_F6, NoSymbol, -/* 65 72 */ XK_F7, NoSymbol, -/* 66 73 */ XK_F8, NoSymbol, -/* 67 74 */ XK_F9, NoSymbol, -/* 68 75 */ XK_F10, NoSymbol, -/* 69 76 */ XK_Break, XK_Pause, -/* 70 77 */ XK_Scroll_Lock, NoSymbol, -/* 71 78 */ XK_KP_Home, XK_KP_7, -/* 72 79 */ XK_KP_Up, XK_KP_8, -/* 73 80 */ XK_KP_Page_Up, XK_KP_9, -/* 74 81 */ XK_KP_Subtract, NoSymbol, -/* 75 82 */ XK_KP_Left, XK_KP_4, -/* 76 83 */ XK_KP_5, NoSymbol, -/* 77 84 */ XK_KP_Right, XK_KP_6, -/* 78 85 */ XK_KP_Add, NoSymbol, -/* 79 86 */ XK_KP_End, XK_KP_1, -/* 80 87 */ XK_KP_Down, XK_KP_2, -/* 81 88 */ XK_KP_Page_Down, XK_KP_3, -/* 82 89 */ XK_KP_Insert, XK_KP_0, -/* 83 90 */ XK_KP_Delete, XK_KP_Decimal, -/* 84 91 */ NoSymbol, NoSymbol, -/* 85 92 */ NoSymbol, NoSymbol, -/* 86 93 */ NoSymbol, NoSymbol, -/* 87 94 */ XK_F11, NoSymbol, -/* 88 95 */ XK_F12, NoSymbol, -/* 89 96 */ XK_Control_R, NoSymbol, -/* 90 97 */ XK_KP_Enter, NoSymbol, -/* 91 98 */ XK_KP_Divide, NoSymbol, -/* 92 99 */ XK_Sys_Req, XK_Print, -/* 93 100 */ XK_Alt_R, XK_Meta_R, -/* 94 101 */ XK_Num_Lock, NoSymbol, -/* 95 102 */ XK_Home, NoSymbol, -/* 96 103 */ XK_Up, NoSymbol, -/* 97 104 */ XK_Page_Up, NoSymbol, -/* 98 105 */ XK_Left, NoSymbol, -/* 99 106 */ XK_Right, NoSymbol, -/* 100 107 */ XK_End, NoSymbol, -/* 101 108 */ XK_Down, NoSymbol, -/* 102 109 */ XK_Page_Down, NoSymbol, -/* 103 110 */ XK_Insert, NoSymbol, -/* 104 111 */ XK_Delete, NoSymbol, -/* 105 112 */ XK_Super_L, NoSymbol, -/* 106 113 */ XK_Super_R, NoSymbol, -/* 107 114 */ XK_Menu, NoSymbol, - -/* 108 115 */ XK_Next, NoSymbol, /* right button on side */ -/* 109 116 */ XK_Prior, NoSymbol, /* left button on side */ -/* 110 117 */ XK_Up, NoSymbol, /* joypad */ -/* 111 118 */ XK_Down, NoSymbol, -/* 112 119 */ XK_Left, NoSymbol, -/* 113 120 */ XK_Right, NoSymbol, -/* 114 121 */ NoSymbol, NoSymbol, /* left near speaker */ -/* 115 122 */ NoSymbol, NoSymbol, /* right near speaker */ -/* 116 123 */ NoSymbol, NoSymbol, /* tiny button */ -}; - -CARD8 xglModMap[MAP_LENGTH]; - -KeySymsRec xglKeySyms = { - xglKeymap, - 8, - 8 + (sizeof (xglKeymap) / sizeof (xglKeymap[0]) / XGL_KEYMAP_WIDTH) - 1, - XGL_KEYMAP_WIDTH -}; - -int -xglKeybdProc (DeviceIntPtr pDevice, - int onoff) -{ - Bool ret; - DevicePtr pDev = (DevicePtr) pDevice; - - if (!pDev) - return BadImplementation; - - switch (onoff) { - case DEVICE_INIT: - if (pDev != (DevicePtr)inputInfo.keyboard) - return !Success; - - ret = InitKeyboardDeviceStruct (pDev, - &xglKeySyms, - xglModMap, - xglBell, - xglKbdCtrl); - if (!ret) - return BadImplementation; - break; - case DEVICE_ON: - pDev->on = TRUE; - break; - case DEVICE_OFF: - case DEVICE_CLOSE: - pDev->on = FALSE; - break; - } - - return Success; -} - -void -xglInitInput (int argc, char **argv) -{ - DeviceIntPtr pKeyboard, pPointer; - - pPointer = AddInputDevice (xglMouseProc, TRUE); - pKeyboard = AddInputDevice (xglKeybdProc, TRUE); - - RegisterPointerDevice (pPointer); - RegisterKeyboardDevice (pKeyboard); - - miRegisterPointerDevice (screenInfo.screens[0], pPointer); - mieqInit (&pKeyboard->public, &pPointer->public); -} diff --git a/hw/xgl/xglloader.c b/hw/xgl/xglloader.c deleted file mode 100644 index f64acf18d..000000000 --- a/hw/xgl/xglloader.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "xglmodule.h" - -#ifdef XGL_MODULAR - -#include <dlfcn.h> - -#define SYM(ptr, name) { (void **) &(ptr), (name) } - -void * -xglLoadModule (const char *name, - int flag) -{ - ModuleVersionProcPtr moduleVersion; - ModuleInitProcPtr moduleInit; - void *handle = 0; - char *module; - xglSymbolRec mSym[] = { - SYM (moduleVersion, "moduleVersion"), - SYM (moduleInit, "moduleInit") - }; - - module = malloc (strlen (XGL_MODULE_PATH "/lib.so") + strlen (name) + 1); - if (!module) - return 0; - - sprintf (module, XGL_MODULE_PATH "/lib%s.so", name); - - handle = dlopen (module, flag); - if (handle) - { - if (xglLookupSymbols (handle, mSym, sizeof (mSym) / sizeof (mSym[0]))) - { - const char *version; - - version = (*moduleVersion) (); - if (strcmp (VERSION, version) == 0) - { - if (!(*moduleInit) (module)) - { - dlclose (handle); - handle = 0; - } - } - else - { - ErrorF ("Module version mismatch. " - "%s is %s Xserver is" VERSION "\n", - module, version); - - dlclose (handle); - handle = 0; - } - } - else - { - dlclose (handle); - handle = 0; - } - } - else - ErrorF ("dlopen: %s\n", dlerror ()); - - free (module); - - return handle; -} - -void -xglUnloadModule (void *handle) -{ - dlclose (handle); -} - -Bool -xglLookupSymbols (void *handle, - xglSymbolPtr sym, - int nSym) -{ - void *symbol; - char *error; - int i; - - /* avoid previous error */ - dlerror (); - - for (i = 0; i < nSym; i++) - { - symbol = dlsym (handle, sym[i].name); - if (!symbol) - { - error = dlerror (); - if (error != 0) - ErrorF ("dlsym: %s: %s\n", sym[i].name, error); - - return FALSE; - } - - *(sym[i].ptr) = symbol; - } - - return TRUE; -} - -#endif diff --git a/hw/xgl/xglmodule.h b/hw/xgl/xglmodule.h deleted file mode 100644 index da868e960..000000000 --- a/hw/xgl/xglmodule.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#ifndef _XGL_MODULE_H_ -#define _XGL_MODULE_H_ - -#include <xgl-config.h> - -#include <X11/Xdefs.h> -#include "misc.h" - -#define VERSION "0.0.1" - -typedef const char *(*ModuleVersionProcPtr) (void); -typedef Bool (*ModuleInitProcPtr) (const char *module); - -char * -moduleVersion (void); - -Bool -moduleInit (const char *module); - -#endif /* _XGL_MODULE_H_ */ diff --git a/hw/xgl/xgloutput.c b/hw/xgl/xgloutput.c deleted file mode 100644 index 76903a886..000000000 --- a/hw/xgl/xgloutput.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" - -#include <mivalidate.h> -#include <dixstruct.h> - -typedef struct _xglDepth { - CARD8 depth; - CARD8 bpp; -} xglDepthRec, *xglDepthPtr; - -static xglDepthRec xglDepths[] = { - { 1, 1 }, - { 4, 4 }, - { 8, 8 }, - { 15, 16 }, - { 16, 16 }, - { 24, 32 }, - { 32, 32 } -}; - -#define NUM_XGL_DEPTHS (sizeof (xglDepths) / sizeof (xglDepths[0])) - -void -xglSetPixmapFormats (ScreenInfo *pScreenInfo) -{ - int i; - - pScreenInfo->imageByteOrder = IMAGE_BYTE_ORDER; - pScreenInfo->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT; - pScreenInfo->bitmapScanlinePad = BITMAP_SCANLINE_PAD; - pScreenInfo->bitmapBitOrder = BITMAP_BIT_ORDER; - pScreenInfo->numPixmapFormats = 0; - - for (i = 0; i < NUM_XGL_DEPTHS; i++) - { - PixmapFormatRec *format; - - format = &pScreenInfo->formats[pScreenInfo->numPixmapFormats++]; - - format->depth = xglDepths[i].depth; - format->bitsPerPixel = xglDepths[i].bpp; - format->scanlinePad = BITMAP_SCANLINE_PAD; - } -} - -void -xglSetRootClip (ScreenPtr pScreen, - Bool enable) -{ - WindowPtr pWin = WindowTable[pScreen->myNum]; - WindowPtr pChild; - Bool wasViewable; - Bool anyMarked = FALSE; - RegionPtr pOldClip = 0; - -#ifdef DO_SAVE_UNDERS - Bool dosave = FALSE; -#endif - - WindowPtr pLayerWin; - BoxRec box; - - if (!pWin) - return; - - wasViewable = (Bool) (pWin->viewable); - if (wasViewable) - { - for (pChild = pWin->firstChild; pChild; pChild = pChild->nextSib) - { - (void) (*pScreen->MarkOverlappedWindows) (pChild, - pChild, - &pLayerWin); - } - - (*pScreen->MarkWindow) (pWin); - anyMarked = TRUE; - - if (pWin->valdata) - { - if (HasBorder (pWin)) - { - RegionPtr borderVisible; - - borderVisible = REGION_CREATE (pScreen, NullBox, 1); - REGION_SUBTRACT (pScreen, borderVisible, - &pWin->borderClip, &pWin->winSize); - pWin->valdata->before.borderVisible = borderVisible; - } - pWin->valdata->before.resized = TRUE; - } - } - - if (enable) - { - box.x1 = 0; - box.y1 = 0; - box.x2 = pScreen->width; - box.y2 = pScreen->height; - - pWin->drawable.width = pScreen->width; - pWin->drawable.height = pScreen->height; - - REGION_INIT (pScreen, &pWin->winSize, &box, 1); - REGION_INIT (pScreen, &pWin->borderSize, &box, 1); - REGION_RESET (pScreen, &pWin->borderClip, &box); - REGION_BREAK (pWin->drawable.pScreen, &pWin->clipList); - } - else - { - REGION_EMPTY (pScreen, &pWin->borderClip); - REGION_BREAK (pWin->drawable.pScreen, &pWin->clipList); - } - - ResizeChildrenWinSize (pWin, 0, 0, 0, 0); - - if (wasViewable) - { - if (pWin->firstChild) - { - anyMarked |= (*pScreen->MarkOverlappedWindows) (pWin->firstChild, - pWin->firstChild, - (WindowPtr *) 0); - } - else - { - (*pScreen->MarkWindow) (pWin); - anyMarked = TRUE; - } - -#ifdef DO_SAVE_UNDERS - if (DO_SAVE_UNDERS (pWin)) - dosave = (*pScreen->ChangeSaveUnder) (pLayerWin, pLayerWin); -#endif - - if (anyMarked) - (*pScreen->ValidateTree)(pWin, NullWindow, VTOther); - } - - if (wasViewable) - { - if (anyMarked) - (*pScreen->HandleExposures) (pWin); - -#ifdef DO_SAVE_UNDERS - if (dosave) - (*pScreen->PostChangeSaveUnder) (pLayerWin, pLayerWin); -#endif - - if (anyMarked && pScreen->PostValidateTree) - (*pScreen->PostValidateTree) (pWin, NullWindow, VTOther); - } - - if (pWin->realized) - WindowsRestructured (); -} diff --git a/hw/xgl/xglparse.c b/hw/xgl/xglparse.c deleted file mode 100644 index 5292692a4..000000000 --- a/hw/xgl/xglparse.c +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" - -char * -xglParseFindNext (char *cur, - char *delim, - char *save, - char *last) -{ - while (*cur && !strchr (delim, *cur)) - *save++ = *cur++; - - *save = 0; - *last = *cur; - - if (*cur) - cur++; - - return cur; -} - -void -xglParseScreen (char *arg) -{ - char delim; - char save[1024]; - int i, pixels, mm; - - xglScreenInfo.width = 0; - xglScreenInfo.height = 0; - xglScreenInfo.widthMm = 0; - xglScreenInfo.heightMm = 0; - - if (!arg) - return; - - if (strlen (arg) >= sizeof (save)) - return; - - for (i = 0; i < 2; i++) - { - arg = xglParseFindNext (arg, "x/", save, &delim); - if (!save[0]) - return; - - pixels = atoi (save); - mm = 0; - - if (delim == '/') - { - arg = xglParseFindNext (arg, "x", save, &delim); - if (!save[0]) - return; - - mm = atoi (save); - } - - if (i == 0) - { - xglScreenInfo.width = pixels; - xglScreenInfo.widthMm = mm; - } - else - { - xglScreenInfo.height = pixels; - xglScreenInfo.heightMm = mm; - } - - if (delim != 'x') - return; - } -} - -static void -xglParseAccel (char *arg) -{ - xglAccelInfoPtr pAccel; - char delim; - char save[1024]; - - if (!arg) - return; - - if (strlen (arg) >= sizeof (save)) - return; - - arg = xglParseFindNext (arg, "@:", save, &delim); - if (!save[0]) - return; - - if (strcasecmp (save, "pixmap") == 0) - pAccel = &xglScreenInfo.accel.pixmap; - else if (strcasecmp (save, "window") == 0) - pAccel = &xglScreenInfo.accel.window; - else if (strcasecmp (save, "glx") == 0) - pAccel = &xglScreenInfo.accel.glx; - else if (strcasecmp (save, "xv") == 0) - pAccel = &xglScreenInfo.accel.xv; - else - return; - - if (delim == '@') - { - arg = xglParseFindNext (arg, "/x:", save, &delim); - if (!save[0]) - return; - - pAccel->size.aboveWidth = pAccel->size.minWidth = atoi (save); - - if (delim == '/') - { - arg = xglParseFindNext (arg, "x:", save, &delim); - if (!save[0]) - return; - - pAccel->size.aboveWidth = atoi (save); - } - - if (delim == 'x') - { - arg = xglParseFindNext (arg, "/:", save, &delim); - if (!save[0]) - return; - - pAccel->size.aboveHeight = pAccel->size.minHeight = atoi (save); - - if (delim == '/') - { - arg = xglParseFindNext (arg, ":", save, &delim); - if (!save[0]) - return; - - pAccel->size.aboveHeight = atoi (save); - } - } - } - - pAccel->enabled = TRUE; - pAccel->pbuffer = FALSE; - - if (delim == ':') - { - if (strcasecmp (arg, "fbo") == 0) - ; - else if (strcasecmp (arg, "off") == 0 || - strncasecmp (arg, "0", 1) == 0 || - strncasecmp (arg, "f", 1) == 0 || - strncasecmp (arg, "n", 1) == 0) - { - pAccel->enabled = FALSE; - pAccel->pbuffer = FALSE; - } - else if (strcasecmp (arg, "pbuffer") == 0) - { - pAccel->pbuffer = TRUE; - } - } -} - -void -xglUseMsg (void) -{ - ErrorF ("-vertextype [short|float] set vertex data type\n"); - ErrorF ("-yinverted Y is upside-down\n"); - ErrorF ("-lines " - "accelerate lines that are not vertical or horizontal\n"); - ErrorF ("-vbo " - "use vertex buffer objects for streaming of vertex data\n"); - ErrorF ("-pbomask [1|4|8|16|32] " - "set bpp's to use with pixel buffer objects\n"); - ErrorF ("-accel TYPE[@WIDTH[/MIN]xHEIGHT[/MIN]][:METHOD] " - "offscreen acceleration\n"); -} - -int -xglProcessArgument (int argc, - char **argv, - int i) -{ - if (!strcmp (argv[i], "-vertextype")) - { - if ((i + 1) < argc) - { - if (!strcasecmp (argv[i + 1], "short")) - xglScreenInfo.geometryDataType = GEOMETRY_DATA_TYPE_SHORT; - else if (!strcasecmp (argv[i + 1], "float")) - xglScreenInfo.geometryDataType = GEOMETRY_DATA_TYPE_FLOAT; - } - else - return 1; - - return 2; - } - else if (!strcmp (argv[i], "-yinverted")) - { - xglScreenInfo.yInverted = TRUE; - return 1; - } - else if (!strcmp (argv[i], "-lines")) - { - xglScreenInfo.lines = TRUE; - return 1; - } - else if (!strcmp (argv[i], "-vbo")) - { - xglScreenInfo.geometryUsage = GEOMETRY_USAGE_STREAM; - return 1; - } - else if (!strcmp (argv[i], "-pbomask")) - { - if ((i + 1) < argc) - { - xglScreenInfo.pboMask = atoi (argv[i + 1]); - } - else - return 1; - - return 2; - } - else if (!strcmp (argv[i], "-accel")) - { - if ((i + 1) < argc) - { - xglParseAccel (argv[i + 1]); - } - else - return 1; - - return 2; - } - - return 0; -} diff --git a/hw/xgl/xglpict.c b/hw/xgl/xglpict.c deleted file mode 100644 index fee2431b7..000000000 --- a/hw/xgl/xglpict.c +++ /dev/null @@ -1,787 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "fb.h" - -#ifdef RENDER - -#include "fbpict.h" - -#define XGL_PICTURE_FALLBACK_PROLOGUE(pPicture, func) \ - xglSyncDamageBoxBits (pPicture->pDrawable); \ - XGL_PICTURE_SCREEN_UNWRAP (func) - -#define XGL_PICTURE_FALLBACK_EPILOGUE(pPicture, func, xglfunc) \ - XGL_PICTURE_SCREEN_WRAP (func, xglfunc); \ - xglAddCurrentSurfaceDamage (pPicture->pDrawable) - -void -xglComposite (CARD8 op, - PicturePtr pSrc, - PicturePtr pMask, - PicturePtr pDst, - INT16 xSrc, - INT16 ySrc, - INT16 xMask, - INT16 yMask, - INT16 xDst, - INT16 yDst, - CARD16 width, - CARD16 height) -{ - PictureScreenPtr pPictureScreen; - ScreenPtr pScreen = pDst->pDrawable->pScreen; - - XGL_SCREEN_PRIV (pScreen); - - if (xglCompositeGeneral (op, - pSrc, pMask, pDst, NULL, - xSrc, ySrc, - xMask, yMask, - xDst + pDst->pDrawable->x, - yDst + pDst->pDrawable->y, - width, height)) - { - xglAddCurrentBitDamage (pDst->pDrawable); - return; - } - - pPictureScreen = GetPictureScreen (pScreen); - - if (pSrc->pDrawable) - { - if (!xglSyncBits (pSrc->pDrawable, NullBox)) - FatalError (XGL_SW_FAILURE_STRING); - } - - if (pMask && pMask->pDrawable) - { - if (!xglSyncBits (pMask->pDrawable, NullBox)) - FatalError (XGL_SW_FAILURE_STRING); - } - - if (op == PictOpSrc) - { - XGL_DRAWABLE_PIXMAP (pDst->pDrawable); - - if (!xglMapPixmapBits (pPixmap)) - FatalError (XGL_SW_FAILURE_STRING); - } else - xglSyncDamageBoxBits (pDst->pDrawable); - - XGL_PICTURE_SCREEN_UNWRAP (Composite); - (*pPictureScreen->Composite) (op, pSrc, pMask, pDst, - xSrc, ySrc, xMask, yMask, xDst, yDst, - width, height); - XGL_PICTURE_SCREEN_WRAP (Composite, xglComposite); - - if (op == PictOpSrc) - { - RegionRec region; - - xDst += pDst->pDrawable->x; - yDst += pDst->pDrawable->y; - - if (pSrc->pDrawable) - { - xSrc += pSrc->pDrawable->x; - ySrc += pSrc->pDrawable->y; - } - - if (pMask && pMask->pDrawable) - { - xMask += pMask->pDrawable->x; - yMask += pMask->pDrawable->y; - } - - if (!miComputeCompositeRegion (®ion, pSrc, pMask, pDst, - xSrc, ySrc, xMask, yMask, xDst, yDst, - width, height)) - return; - - xglAddSurfaceDamage (pDst->pDrawable, ®ion); - REGION_UNINIT (pDst->pDrawable->pScreen, ®ion); - } else - xglAddCurrentSurfaceDamage (pDst->pDrawable); -} - -void -xglAddTriangles (PicturePtr pDst, - INT16 xOff, - INT16 yOff, - int ntri, - xTriangle *tris) -{ - PictureScreenPtr pPictureScreen; - ScreenPtr pScreen = pDst->pDrawable->pScreen; - - XGL_SCREEN_PRIV (pScreen); - XGL_DRAWABLE_PIXMAP_PRIV (pDst->pDrawable); - - pPictureScreen = GetPictureScreen (pScreen); - - pPixmapPriv->damageBox.x1 = 0; - pPixmapPriv->damageBox.y1 = 0; - pPixmapPriv->damageBox.x2 = pDst->pDrawable->width; - pPixmapPriv->damageBox.y2 = pDst->pDrawable->height; - - XGL_PICTURE_FALLBACK_PROLOGUE (pDst, AddTriangles); - (*pPictureScreen->AddTriangles) (pDst, xOff, yOff, ntri, tris); - XGL_PICTURE_FALLBACK_EPILOGUE (pDst, AddTriangles, xglAddTriangles); -} - - -void -xglChangePicture (PicturePtr pPicture, - Mask mask) -{ - PictureScreenPtr pPictureScreen; - ScreenPtr pScreen = pPicture->pDrawable->pScreen; - - XGL_SCREEN_PRIV (pScreen); - XGL_DRAWABLE_PIXMAP_PRIV (pPicture->pDrawable); - - pPictureScreen = GetPictureScreen (pScreen); - - if (pPicture->stateChanges & CPRepeat) - pPixmapPriv->pictureMask |= xglPCFillMask; - - if (pPicture->stateChanges & CPComponentAlpha) - pPixmapPriv->pictureMask |= xglPCComponentAlphaMask; - - if (pPicture->stateChanges & CPDither) - pPixmapPriv->pictureMask |= xglPCDitherMask; - - XGL_PICTURE_SCREEN_UNWRAP (ChangePicture); - (*pPictureScreen->ChangePicture) (pPicture, mask); - XGL_PICTURE_SCREEN_WRAP (ChangePicture, xglChangePicture); -} - -int -xglChangePictureTransform (PicturePtr pPicture, - PictTransform *transform) -{ - PictureScreenPtr pPictureScreen; - ScreenPtr pScreen = pPicture->pDrawable->pScreen; - int ret; - - XGL_SCREEN_PRIV (pScreen); - XGL_DRAWABLE_PIXMAP_PRIV (pPicture->pDrawable); - - pPictureScreen = GetPictureScreen (pScreen); - - if (transform != pPicture->transform || - (transform && memcmp (transform, &pPicture->transform, - sizeof (PictTransform)))) - pPixmapPriv->pictureMask |= xglPCTransformMask; - - XGL_PICTURE_SCREEN_UNWRAP (ChangePictureTransform); - ret = (*pPictureScreen->ChangePictureTransform) (pPicture, transform); - XGL_PICTURE_SCREEN_WRAP (ChangePictureTransform, - xglChangePictureTransform); - - return ret; -} - -int -xglChangePictureFilter (PicturePtr pPicture, - int filter, - xFixed *params, - int nparams) -{ - PictureScreenPtr pPictureScreen; - ScreenPtr pScreen = pPicture->pDrawable->pScreen; - int ret; - - XGL_SCREEN_PRIV (pScreen); - XGL_DRAWABLE_PIXMAP_PRIV (pPicture->pDrawable); - - pPictureScreen = GetPictureScreen (pScreen); - - pPixmapPriv->pictureMask |= xglPCFilterMask; - - XGL_PICTURE_SCREEN_UNWRAP (ChangePictureFilter); - ret = (*pPictureScreen->ChangePictureFilter) (pPicture, filter, - params, nparams); - XGL_PICTURE_SCREEN_WRAP (ChangePictureFilter, xglChangePictureFilter); - - return ret; -} - -static void -xglDestroyDevicePicture (PicturePtr pPicture) -{ - if (pPicture->pSourcePict->source.devPrivate.ptr) - glitz_surface_destroy (pPicture->pSourcePict->source.devPrivate.ptr); -} - -PicturePtr -xglCreateDevicePicture (pointer data) -{ - PicturePtr pPicture; - int error; - - pPicture = CreateDevicePicture (0, &error); - if (!pPicture) - return 0; - - pPicture->pSourcePict->source.devPrivate.ptr = data; - pPicture->pSourcePict->source.Destroy = xglDestroyDevicePicture; - - return pPicture; -} - -static int fillMode[] = { - GLITZ_FILL_TRANSPARENT, /* RepeatNone */ - GLITZ_FILL_REPEAT, /* RepeatNormal */ - GLITZ_FILL_NEAREST, /* RepeatPad */ - GLITZ_FILL_REFLECT /* RepeatReflect */ -}; - -static void -xglUpdatePicture (PicturePtr pPicture) -{ - glitz_surface_t *surface; - - XGL_DRAWABLE_PIXMAP_PRIV (pPicture->pDrawable); - - surface = pPixmapPriv->surface; - - if (pPixmapPriv->pictureMask & xglPCFillMask) - { - glitz_surface_set_fill (surface, fillMode[pPicture->repeat]); - } - - if (pPixmapPriv->pictureMask & xglPCFilterMask) - { - switch (pPicture->filter) { - case PictFilterNearest: - case PictFilterFast: - glitz_surface_set_filter (surface, GLITZ_FILTER_NEAREST, NULL, 0); - break; - case PictFilterGood: - case PictFilterBest: - case PictFilterBilinear: - glitz_surface_set_filter (surface, GLITZ_FILTER_BILINEAR, NULL, 0); - break; - case PictFilterConvolution: - glitz_surface_set_filter (surface, GLITZ_FILTER_CONVOLUTION, - (glitz_fixed16_16_t *) - pPicture->filter_params, - pPicture->filter_nparams); - break; - } - } - - if (pPixmapPriv->pictureMask & xglPCTransformMask) - { - glitz_surface_set_transform (surface, (glitz_transform_t *) - pPicture->transform); - } - - if (pPixmapPriv->pictureMask & xglPCComponentAlphaMask) - { - glitz_surface_set_component_alpha (surface, pPicture->componentAlpha); - } - - if (pPixmapPriv->pictureMask & xglPCDitherMask) - { - glitz_surface_set_dither (surface, pPicture->dither); - } - - pPixmapPriv->pictureMask &= ~XGL_PICTURE_CHANGES (~0); -} - -#define N_STACK_PARAM 256 - -static int gradientNParam[] = { - 0, /* SourcePictTypeSolidFill */ - 4, /* SourcePictTypeLinear */ - 6, /* SourcePictTypeRadial */ - 4, /* SourcePictTypeConical */ -}; - -Bool -xglSyncPicture (ScreenPtr pScreen, - PicturePtr pPicture, - INT16 x, - INT16 y, - CARD16 width, - CARD16 height, - INT16 *xOff, - INT16 *yOff) -{ - xglPixmapPtr pPixmapPriv; - - XGL_SCREEN_PRIV (pScreen); - - *xOff = *yOff = 0; - - if (pPicture->pSourcePict) - { - if (pPicture->pSourcePict->source.devPrivate.ptr) - return TRUE; - - if (pPicture->pDrawable) - { - (*pScreen->DestroyPixmap) ((PixmapPtr) pPicture->pDrawable); - pPicture->pDrawable = (DrawablePtr) 0; - } - - switch (pPicture->pSourcePict->source.type) { - case SourcePictTypeSolidFill: - x = y = 0; - width = height = 1; - break; - case SourcePictTypeLinear: - case SourcePictTypeRadial: { - glitz_fixed16_16_t stackParam[N_STACK_PARAM]; - glitz_fixed16_16_t *param; - int nParam, nStop, size, i; - CARD32 *pixel; - PictGradientStopPtr pStop; - glitz_buffer_t *buffer; - glitz_format_t *format; - glitz_surface_t *surface; - static glitz_pixel_format_t pixelFormat = { - GLITZ_FOURCC_RGB, - { - 32, - 0xff000000, - 0x00ff0000, - 0x0000ff00, - 0x000000ff - }, - 0, 0, 0, - GLITZ_PIXEL_SCANLINE_ORDER_BOTTOM_UP - }; - - if (!(pScreenPriv->features & GLITZ_FEATURE_FRAGMENT_PROGRAM_MASK)) - break; - - format = glitz_find_standard_format (pScreenPriv->drawable, - GLITZ_STANDARD_ARGB32); - if (!format) - break; - - nParam = gradientNParam[pPicture->pSourcePict->gradient.type]; - pStop = pPicture->pSourcePict->gradient.stops; - nStop = pPicture->pSourcePict->gradient.nstops; - - size = nParam + nStop * 4; - if (size > N_STACK_PARAM) - { - param = malloc (sizeof (xFixed) * size); - if (!param) - break; - } - else - { - param = stackParam; - } - - pixel = (CARD32 *) (param + nParam + nStop * 3); - - buffer = glitz_buffer_create_for_data (pixel); - if (!buffer) - { - if (size > N_STACK_PARAM) - free (param); - - break; - } - - surface = glitz_surface_create (pScreenPriv->drawable, - format, nStop, 1, 0, NULL); - if (!surface) - { - glitz_buffer_destroy (buffer); - if (size > N_STACK_PARAM) - free (param); - - break; - } - - for (i = 0; i < nStop; i++) - { - pixel[i] = pStop[i].color; - - param[nParam + 3 * i + 0] = pStop[i].x; - param[nParam + 3 * i + 1] = i << 16; - param[nParam + 3 * i + 2] = 0; - } - - glitz_set_pixels (surface, 0, 0, nStop, 1, &pixelFormat, buffer); - - glitz_buffer_destroy (buffer); - - switch (pPicture->pSourcePict->source.type) { - case SourcePictTypeLinear: - param[0] = pPicture->pSourcePict->linear.p1.x; - param[1] = pPicture->pSourcePict->linear.p1.y; - param[2] = pPicture->pSourcePict->linear.p2.x; - param[3] = pPicture->pSourcePict->linear.p2.y; - - glitz_surface_set_filter (surface, - GLITZ_FILTER_LINEAR_GRADIENT, - param, nParam + nStop * 3); - break; - case SourcePictTypeRadial: - param[0] = pPicture->pSourcePict->radial.inner.x; - param[1] = pPicture->pSourcePict->radial.inner.y; - param[2] = pPicture->pSourcePict->radial.inner_radius; - param[3] = pPicture->pSourcePict->radial.outer.x; - param[4] = pPicture->pSourcePict->radial.outer.y; - param[5] = pPicture->pSourcePict->radial.outer_radius; - - glitz_surface_set_filter (surface, - GLITZ_FILTER_RADIAL_GRADIENT, - param, nParam + nStop * 3); - break; - } - - glitz_surface_set_fill (surface, fillMode[pPicture->repeat]); - glitz_surface_set_transform (surface, (glitz_transform_t *) - pPicture->transform); - - pPicture->pSourcePict->gradient.devPrivate.ptr = surface; - pPicture->pSourcePict->gradient.Destroy = xglDestroyDevicePicture; - - if (size > N_STACK_PARAM) - free (param); - - return TRUE; - } break; - case SourcePictTypeConical: - default: - break; - } - - if (!pPicture->pDrawable) - { - PictFormatPtr pFormat; - PixmapPtr pPixmap; - PicturePtr pTmp; - RegionRec region; - BoxRec box; - int error; - - pFormat = PictureMatchFormat (pScreen, 32, PICT_a8r8g8b8); - if (!pFormat) - return FALSE; - - pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, - pFormat->depth, 0); - if (!pPixmap) - return FALSE; - - pTmp = CreatePicture (0, &pPixmap->drawable, pFormat, 0, NULL, - serverClient, &error); - if (!pTmp) - { - (*pScreen->DestroyPixmap) (pPixmap); - return FALSE; - } - - ValidatePicture (pTmp); - - if (!xglSyncBits (pTmp->pDrawable, NullBox)) - FatalError (XGL_SW_FAILURE_STRING); - - fbCompositeGeneral (PictOpSrc, - pPicture, 0, pTmp, - x, y, 0, 0, 0, 0, - width, height); - - FreePicture ((pointer) pTmp, (XID) 0); - - box.x1 = 0; - box.y1 = 0; - box.x2 = width; - box.y2 = height; - - REGION_INIT (pScreen, ®ion, &box, 1); - xglAddSurfaceDamage (&pPixmap->drawable, ®ion); - REGION_UNINIT (pDrawable->pScreen, ®ion); - - pPicture->pDrawable = &pPixmap->drawable; - - *xOff = x; - *yOff = y; - - XGL_GET_PIXMAP_PRIV (pPixmap)->pictureMask &= - ~(xglPCFillMask | xglPCFilterMask | xglPCTransformMask); - } - } - -#ifdef XV - switch (pPicture->format) { - case PICT_yuy2: - xglSetPixmapVisual ((PixmapPtr) pPicture->pDrawable, - &pScreenPriv->pXvVisual[XGL_XV_FORMAT_YUY2]); - break; - case PICT_yv12: - xglSetPixmapVisual ((PixmapPtr) pPicture->pDrawable, - &pScreenPriv->pXvVisual[XGL_XV_FORMAT_YV12]); - default: - break; - } -#endif - - if (!xglSyncSurface (pPicture->pDrawable)) - return FALSE; - - pPixmapPriv = XGL_GET_PIXMAP_PRIV ((PixmapPtr) pPicture->pDrawable); - if (XGL_PICTURE_CHANGES (pPixmapPriv->pictureMask)) - xglUpdatePicture (pPicture); - - return TRUE; -} - -static int -xglVisualDepth (ScreenPtr pScreen, VisualPtr pVisual) -{ - DepthPtr pDepth; - int d, v; - - for (d = 0; d < pScreen->numDepths; d++) - { - pDepth = &pScreen->allowedDepths[d]; - for (v = 0; v < pDepth->numVids; v++) - if (pDepth->vids[v] == pVisual->vid) - return pDepth->depth; - } - - return 0; -} - -typedef struct _xglformatInit { - CARD32 format; - CARD8 depth; -} xglFormatInitRec, *xglFormatInitPtr; - -static int -xglAddFormat (xglFormatInitPtr formats, - int nformat, - CARD32 format, - CARD8 depth) -{ - int n; - - for (n = 0; n < nformat; n++) - if (formats[n].format == format && formats[n].depth == depth) - return nformat; - - formats[nformat].format = format; - formats[nformat].depth = depth; - - return ++nformat; -} - -#define Mask(n) ((n) == 32 ? 0xffffffff : ((1 << (n)) - 1)) - -Bool -xglPictureInit (ScreenPtr pScreen) -{ - int f, nformats = 0; - PictFormatPtr pFormats; - xglFormatInitRec formats[64]; - CARD32 format; - CARD8 depth; - VisualPtr pVisual; - int v; - int bpp; - int r, g, b; - int d; - DepthPtr pDepth; - - /* formats required by protocol */ - formats[nformats].format = PICT_a1; - formats[nformats].depth = 1; - nformats++; - formats[nformats].format = PICT_a4; - formats[nformats].depth = 4; - nformats++; - formats[nformats].format = PICT_a8; - formats[nformats].depth = 8; - nformats++; - formats[nformats].format = PICT_a8r8g8b8; - formats[nformats].depth = 32; - nformats++; - - /* now look through the depths and visuals adding other formats */ - for (v = 0; v < pScreen->numVisuals; v++) - { - pVisual = &pScreen->visuals[v]; - depth = xglVisualDepth (pScreen, pVisual); - if (!depth) - continue; - - bpp = BitsPerPixel (depth); - switch (pVisual->class) { - case DirectColor: - case TrueColor: - r = Ones (pVisual->redMask); - g = Ones (pVisual->greenMask); - b = Ones (pVisual->blueMask); - if (pVisual->offsetBlue == 0 && - pVisual->offsetGreen == b && - pVisual->offsetRed == b + g) - { - format = PICT_FORMAT (bpp, PICT_TYPE_ARGB, 0, r, g, b); - nformats = xglAddFormat (formats, nformats, format, depth); - } - break; - case StaticColor: - case PseudoColor: - case StaticGray: - case GrayScale: - break; - } - } - - /* walk supported depths and add missing Direct formats */ - for (d = 0; d < pScreen->numDepths; d++) - { - pDepth = &pScreen->allowedDepths[d]; - bpp = BitsPerPixel (pDepth->depth); - format = 0; - switch (bpp) { - case 16: - if (pDepth->depth == 15) - nformats = xglAddFormat (formats, nformats, - PICT_x1r5g5b5, pDepth->depth); - if (pDepth->depth == 16) - nformats = xglAddFormat (formats, nformats, - PICT_r5g6b5, pDepth->depth); - break; - case 24: - if (pDepth->depth == 24) - nformats = xglAddFormat (formats, nformats, - PICT_r8g8b8, pDepth->depth); - break; - case 32: - if (pDepth->depth == 24) - nformats = xglAddFormat (formats, nformats, - PICT_x8r8g8b8, pDepth->depth); - break; - } - } - - /* add YUV formats */ - nformats = xglAddFormat (formats, nformats, PICT_yuy2, 16); - nformats = xglAddFormat (formats, nformats, PICT_yv12, 12); - - pFormats = (PictFormatPtr) xalloc (nformats * sizeof (PictFormatRec)); - if (!pFormats) - return 0; - - memset (pFormats, '\0', nformats * sizeof (PictFormatRec)); - for (f = 0; f < nformats; f++) - { - pFormats[f].id = FakeClientID (0); - pFormats[f].depth = formats[f].depth; - format = formats[f].format; - pFormats[f].format = format; - switch (PICT_FORMAT_TYPE (format)) { - case PICT_TYPE_ARGB: - pFormats[f].type = PictTypeDirect; - pFormats[f].direct.alphaMask = Mask (PICT_FORMAT_A (format)); - if (pFormats[f].direct.alphaMask) - pFormats[f].direct.alpha = (PICT_FORMAT_R (format) + - PICT_FORMAT_G (format) + - PICT_FORMAT_B (format)); - - pFormats[f].direct.redMask = Mask (PICT_FORMAT_R (format)); - pFormats[f].direct.red = (PICT_FORMAT_G (format) + - PICT_FORMAT_B (format)); - - pFormats[f].direct.greenMask = Mask (PICT_FORMAT_G (format)); - pFormats[f].direct.green = PICT_FORMAT_B (format); - - pFormats[f].direct.blueMask = Mask (PICT_FORMAT_B (format)); - pFormats[f].direct.blue = 0; - break; - case PICT_TYPE_A: - pFormats[f].type = PictTypeDirect; - pFormats[f].direct.alpha = 0; - pFormats[f].direct.alphaMask = Mask (PICT_FORMAT_A (format)); - break; - case PICT_TYPE_COLOR: - case PICT_TYPE_GRAY: - pFormats[f].type = PictTypeDirect; - break; - case PICT_TYPE_YUY2: - case PICT_TYPE_YV12: - pFormats[f].type = PictTypeOther; - break; - } - } - - if (!fbPictureInit (pScreen, pFormats, nformats)) - return FALSE; - - return TRUE; -} - -void -xglPictureClipExtents (PicturePtr pPicture, - BoxPtr extents) -{ - if (pPicture->clientClipType != CT_NONE) - { - BoxPtr clip = REGION_EXTENTS (pPicture->pDrawable->pScreen, - (RegionPtr) pPicture->clientClip); - - if (extents->x1 < pPicture->clipOrigin.x + clip->x1) - extents->x1 = pPicture->clipOrigin.x + clip->x1; - - if (extents->y1 < pPicture->clipOrigin.y + clip->y1) - extents->y1 = pPicture->clipOrigin.y + clip->y1; - - if (extents->x2 > pPicture->clipOrigin.x + clip->x2) - extents->x2 = pPicture->clipOrigin.x + clip->x2; - - if (extents->y2 > pPicture->clipOrigin.y + clip->y2) - extents->y2 = pPicture->clipOrigin.y + clip->y2; - } - else - { - if (extents->x1 < 0) - extents->x1 = 0; - - if (extents->y1 < 0) - extents->y1 = 0; - - if (extents->x2 > pPicture->pDrawable->width) - extents->x2 = pPicture->pDrawable->width; - - if (extents->y2 > pPicture->pDrawable->height) - extents->y2 = pPicture->pDrawable->height; - } -} - -#endif diff --git a/hw/xgl/xglpixmap.c b/hw/xgl/xglpixmap.c deleted file mode 100644 index 8e602cee3..000000000 --- a/hw/xgl/xglpixmap.c +++ /dev/null @@ -1,744 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "fb.h" - -static glitz_buffer_hint_t xglPixmapUsageHints[] = { - (glitz_buffer_hint_t) 0, /* reserved for system memory */ - GLITZ_BUFFER_HINT_STREAM_DRAW, - GLITZ_BUFFER_HINT_STREAM_READ, - GLITZ_BUFFER_HINT_STREAM_COPY, - GLITZ_BUFFER_HINT_STATIC_DRAW, - GLITZ_BUFFER_HINT_STATIC_READ, - GLITZ_BUFFER_HINT_STATIC_COPY, - GLITZ_BUFFER_HINT_DYNAMIC_DRAW, - GLITZ_BUFFER_HINT_DYNAMIC_READ, - GLITZ_BUFFER_HINT_DYNAMIC_COPY -}; - -#define NUM_XGL_PIXMAP_USAGE_HINTS \ - (sizeof (xglPixmapUsageHints) / sizeof (xglPixmapUsageHints[0])) - -#define XGL_PIXMAP_USAGE_HINT(hint) (xglPixmapUsageHints[hint]) - -static void -xglPixmapDamageReport (DamagePtr pDamage, - RegionPtr pRegion, - void *closure) -{ - PixmapPtr pPixmap = (PixmapPtr) closure; - BoxPtr pExt; - - XGL_PIXMAP_PRIV (pPixmap); - - pExt = REGION_EXTENTS (pPixmap->drawable.pScreen, pRegion); - - if (BOX_NOTEMPTY (&pPixmapPriv->damageBox)) - { - if (pExt->x1 < pPixmapPriv->damageBox.x1) - pPixmapPriv->damageBox.x1 = pExt->x1; - - if (pExt->y1 < pPixmapPriv->damageBox.y1) - pPixmapPriv->damageBox.y1 = pExt->y1; - - if (pExt->x2 > pPixmapPriv->damageBox.x2) - pPixmapPriv->damageBox.x2 = pExt->x2; - - if (pExt->y2 > pPixmapPriv->damageBox.y2) - pPixmapPriv->damageBox.y2 = pExt->y2; - } - else - pPixmapPriv->damageBox = *pExt; -} - - -static Bool -xglPixmapCreateDamage (PixmapPtr pPixmap) -{ - XGL_PIXMAP_PRIV (pPixmap); - - pPixmapPriv->pDamage = - DamageCreate (xglPixmapDamageReport, (DamageDestroyFunc) 0, - DamageReportRawRegion, TRUE, - pPixmap->drawable.pScreen, - (void *) pPixmap); - if (!pPixmapPriv->pDamage) - return FALSE; - - DamageRegister (&pPixmap->drawable, pPixmapPriv->pDamage); - - return TRUE; -} - -void -xglSetPixmapVisual (PixmapPtr pPixmap, - xglVisualPtr pVisual) -{ - xglVisualPtr pOldVisual; - - XGL_PIXMAP_PRIV (pPixmap); - - pOldVisual = pPixmapPriv->pVisual; - if (pOldVisual && pVisual) - { - glitz_surface_t *surface; - - if (pOldVisual->vid != pVisual->vid) - { - surface = pPixmapPriv->surface; - if (surface) - { - glitz_drawable_t *drawable; - - drawable = glitz_surface_get_attached_drawable (surface); - if (drawable) - { - if (pOldVisual->format.drawable->id != - pVisual->format.drawable->id) - { - glitz_surface_detach (pPixmapPriv->surface); - pPixmapPriv->target = xglPixmapTargetOut; - } - } - - if (pOldVisual->format.surface->id != pVisual->format.surface->id) - { - xglSyncBits (&pPixmap->drawable, NULL); - glitz_surface_destroy (pPixmapPriv->surface); - pPixmapPriv->surface = 0; - } - } - } - } - else if (pOldVisual) - { - if (pPixmapPriv->surface) - { - xglSyncBits (&pPixmap->drawable, NULL); - glitz_surface_destroy (pPixmapPriv->surface); - pPixmapPriv->surface = 0; - } - pPixmapPriv->target = xglPixmapTargetNo; - } - - pPixmapPriv->pVisual = pVisual; - - if (pPixmapPriv->pVisual && pPixmapPriv->pVisual->format.surface) - { - if (!pPixmapPriv->pDamage) - { - if (!xglPixmapCreateDamage (pPixmap)) - FatalError (XGL_SW_FAILURE_STRING); - } - } -} - -static Bool -xglPixmapSurfaceInit (PixmapPtr pPixmap, - unsigned long features, - int width, - int height) -{ - BoxRec box; - - XGL_PIXMAP_PRIV (pPixmap); - - pPixmapPriv->surface = NULL; - pPixmapPriv->drawable = NULL; - pPixmapPriv->acceleratedTile = FALSE; - pPixmapPriv->pictureMask = ~0; - pPixmapPriv->target = xglPixmapTargetNo; - - box.x1 = 0; - box.y1 = 0; - box.x2 = width; - box.y2 = height; - - REGION_INIT (pScreen, &pPixmapPriv->bitRegion, &box, 1); - - pPixmapPriv->pVisual = xglFindVisualWithDepth (pPixmap->drawable.pScreen, - pPixmap->drawable.depth); - if (pPixmapPriv->pVisual) - { - XGL_SCREEN_PRIV (pPixmap->drawable.pScreen); - - /* general pixmap acceleration */ - if (pPixmapPriv->pVisual->format.drawable && - pScreenPriv->accel.pixmap.enabled && - xglCheckPixmapSize (pPixmap, &pScreenPriv->accel.pixmap.size)) - pPixmapPriv->target = xglPixmapTargetOut; - } - - if (pPixmapPriv->pVisual && pPixmapPriv->pVisual->format.surface) - { - if (!pPixmapPriv->pDamage) - { - if (!xglPixmapCreateDamage (pPixmap)) - FatalError (XGL_SW_FAILURE_STRING); - } - - if (width && height) - { - if (width == 1 && height == 1) - { - pPixmapPriv->acceleratedTile = TRUE; - } - else if (features & GLITZ_FEATURE_TEXTURE_BORDER_CLAMP_MASK) - { - if ((features & GLITZ_FEATURE_TEXTURE_NON_POWER_OF_TWO_MASK) || - (POWER_OF_TWO (width) && POWER_OF_TWO (height))) - pPixmapPriv->acceleratedTile = TRUE; - } - } - } - - return TRUE; -} - -PixmapPtr -xglCreatePixmap (ScreenPtr pScreen, - int width, - int height, - int depth, - unsigned usage_hint) -{ - xglPixmapPtr pPixmapPriv; - PixmapPtr pPixmap; - - XGL_SCREEN_PRIV (pScreen); - - pPixmap = AllocatePixmap (pScreen, 0); - if (!pPixmap) - return NullPixmap; - - pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = 0; - pPixmap->drawable.pScreen = pScreen; - pPixmap->drawable.depth = depth; - pPixmap->drawable.bitsPerPixel = BitsPerPixel (depth); - pPixmap->drawable.id = 0; - pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - pPixmap->drawable.x = 0; - pPixmap->drawable.y = 0; - pPixmap->drawable.width = width; - pPixmap->drawable.height = height; - -#ifdef COMPOSITE - pPixmap->screen_x = 0; - pPixmap->screen_y = 0; -#endif - - pPixmap->devKind = 0; - pPixmap->refcnt = 1; - pPixmap->devPrivate.ptr = 0; - pPixmap->usage_hint = usage_hint; - - pPixmapPriv = XGL_GET_PIXMAP_PRIV (pPixmap); - - pPixmapPriv->pVisual = NULL; - pPixmapPriv->pDamage = NULL; - - if (!xglPixmapSurfaceInit (pPixmap, pScreenPriv->features, width, height)) - return NullPixmap; - - pPixmapPriv->buffer = NULL; - pPixmapPriv->bits = (pointer) 0; - pPixmapPriv->stride = 0; - pPixmapPriv->pGeometry = NULL; - pPixmapPriv->allBits = TRUE; - - pPixmapPriv->damageBox = miEmptyBox; - - return pPixmap; -} - -void -xglFiniPixmap (PixmapPtr pPixmap) -{ - XGL_PIXMAP_PRIV (pPixmap); - - if (pPixmap->devPrivate.ptr) - { - if (pPixmapPriv->buffer) - glitz_buffer_unmap (pPixmapPriv->buffer); - } - - if (pPixmapPriv->pGeometry) - GEOMETRY_UNINIT (pPixmapPriv->pGeometry); - - if (pPixmapPriv->buffer) - glitz_buffer_destroy (pPixmapPriv->buffer); - - if (pPixmapPriv->bits) - xfree (pPixmapPriv->bits); - - REGION_UNINIT (pPixmap->drawable.pScreen, &pPixmapPriv->bitRegion); - - if (pPixmapPriv->drawable) - glitz_drawable_destroy (pPixmapPriv->drawable); - - if (pPixmapPriv->surface) - glitz_surface_destroy (pPixmapPriv->surface); -} - -Bool -xglDestroyPixmap (PixmapPtr pPixmap) -{ - if (--pPixmap->refcnt) - return TRUE; - - xglFiniPixmap (pPixmap); - - dixFreePrivates(pPixmap->devPrivates); - xfree (pPixmap); - - return TRUE; -} - -Bool -xglModifyPixmapHeader (PixmapPtr pPixmap, - int width, - int height, - int depth, - int bitsPerPixel, - int devKind, - pointer pPixData) -{ - xglScreenPtr pScreenPriv; - xglPixmapPtr pPixmapPriv; - int oldWidth, oldHeight; - - if (!pPixmap) - return FALSE; - - pScreenPriv = XGL_GET_SCREEN_PRIV (pPixmap->drawable.pScreen); - pPixmapPriv = XGL_GET_PIXMAP_PRIV (pPixmap); - - oldWidth = pPixmap->drawable.width; - oldHeight = pPixmap->drawable.height; - - if ((width > 0) && (height > 0) && (depth > 0) && (bitsPerPixel > 0) && - (devKind > 0) && pPixData) - { - pPixmap->drawable.depth = depth; - pPixmap->drawable.bitsPerPixel = bitsPerPixel; - pPixmap->drawable.id = 0; - pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - pPixmap->drawable.x = 0; - pPixmap->drawable.y = 0; - pPixmap->drawable.width = width; - pPixmap->drawable.height = height; - pPixmapPriv->stride = devKind; - pPixmap->refcnt = 1; - } - else - { - if (width > 0) - pPixmap->drawable.width = width; - - if (height > 0) - pPixmap->drawable.height = height; - - if (depth > 0) - pPixmap->drawable.depth = depth; - - if (bitsPerPixel > 0) - pPixmap->drawable.bitsPerPixel = bitsPerPixel; - else if ((bitsPerPixel < 0) && (depth > 0)) - pPixmap->drawable.bitsPerPixel = BitsPerPixel (depth); - - if (devKind > 0) - pPixmapPriv->stride = devKind; - else if ((devKind < 0) && ((width > 0) || (depth > 0))) - pPixmapPriv->stride = PixmapBytePad (pPixmap->drawable.width, - pPixmap->drawable.depth); - } - - if (pPixmap->drawable.width != oldWidth || - pPixmap->drawable.height != oldHeight) - { - pPixmapPriv->pVisual = NULL; - pPixmapPriv->target = xglPixmapTargetNo; - - if (pPixmapPriv->drawable) - glitz_drawable_destroy (pPixmapPriv->drawable); - - if (pPixmapPriv->surface) - glitz_surface_destroy (pPixmapPriv->surface); - - REGION_UNINIT (pPixmap->drawable.pScreen, &pPixmapPriv->bitRegion); - - if (!xglPixmapSurfaceInit (pPixmap, - pScreenPriv->features, - pPixmap->drawable.width, - pPixmap->drawable.height)) - return FALSE; - } - - if (pPixData) - { - BoxRec box; - - if (pPixmap->devPrivate.ptr) - { - if (pPixmapPriv->buffer) - glitz_buffer_unmap (pPixmapPriv->buffer); - - pPixmap->devPrivate.ptr = 0; - } - - if (pPixmapPriv->pGeometry) - { - GEOMETRY_UNINIT (pPixmapPriv->pGeometry); - pPixmapPriv->pGeometry = NULL; - } - - if (pPixmapPriv->buffer) - glitz_buffer_destroy (pPixmapPriv->buffer); - - if (pPixmapPriv->bits) - xfree (pPixmapPriv->bits); - - pPixmapPriv->bits = (pointer) 0; - pPixmapPriv->buffer = glitz_buffer_create_for_data (pPixData); - if (!pPixmapPriv->buffer) - return FALSE; - - pPixmapPriv->allBits = TRUE; - - box.x1 = 0; - box.y1 = 0; - box.x2 = pPixmap->drawable.width; - box.y2 = pPixmap->drawable.height; - - REGION_UNINIT (pPixmap->drawable.pScreen, &pPixmapPriv->bitRegion); - REGION_INIT (pPixmap->drawable.pScreen, &pPixmapPriv->bitRegion, - &box, 1); - - if (pPixmapPriv->pDamage) - { - RegionPtr pRegion; - - pRegion = DamageRegion (pPixmapPriv->pDamage); - - REGION_UNINIT (pPixmap->drawable.pScreen, pRegion); - REGION_INIT (pPixmap->drawable.pScreen, pRegion, NullBox, 0); - REGION_SUBTRACT (pPixmap->drawable.pScreen, pRegion, - &pPixmapPriv->bitRegion, pRegion); - - } - } - - /* - * Screen pixmap - */ - if (!pScreenPriv->pScreenPixmap || pScreenPriv->pScreenPixmap == pPixmap) - { - if (!pPixmapPriv->drawable) - { - glitz_drawable_reference (pScreenPriv->drawable); - pPixmapPriv->drawable = pScreenPriv->drawable; - } - - if (!pPixmapPriv->surface) - { - glitz_surface_reference (pScreenPriv->surface); - pPixmapPriv->surface = pScreenPriv->surface; - } - - pPixmapPriv->pVisual = pScreenPriv->rootVisual; - pPixmapPriv->target = xglPixmapTargetIn; - - if (!pScreenPriv->pScreenPixmap) - pScreenPriv->pScreenPixmap = pPixmap; - } - - return TRUE; -} - -RegionPtr -xglPixmapToRegion (PixmapPtr pPixmap) -{ - ScreenPtr pScreen = pPixmap->drawable.pScreen; - RegionPtr pRegion; - - XGL_SCREEN_PRIV (pScreen); - - if (!xglSyncBits (&pPixmap->drawable, NullBox)) - FatalError (XGL_SW_FAILURE_STRING); - - XGL_SCREEN_UNWRAP (BitmapToRegion); - pRegion = (*pScreen->BitmapToRegion) (pPixmap); - XGL_SCREEN_WRAP (BitmapToRegion, xglPixmapToRegion); - - return pRegion; -} - -xglGeometryPtr -xglPixmapToGeometry (PixmapPtr pPixmap, - int xOff, - int yOff) -{ - XGL_PIXMAP_PRIV (pPixmap); - - if (pPixmap->devPrivate.ptr) - xglUnmapPixmapBits (pPixmap); - - if (!pPixmapPriv->pGeometry) - { - xglGeometryPtr pGeometry; - - if (!pPixmapPriv->buffer) - { - if (!xglAllocatePixmapBits (pPixmap, - XGL_PIXMAP_USAGE_HINT_DEFAULT)) - return NULL; - } - - pGeometry = xalloc (sizeof (xglGeometryRec)); - if (!pGeometry) - return NULL; - - GEOMETRY_INIT (pPixmap->drawable.pScreen, pGeometry, - GLITZ_GEOMETRY_TYPE_BITMAP, - GEOMETRY_USAGE_DYNAMIC, 0); - - GEOMETRY_SET_BUFFER (pGeometry, pPixmapPriv->buffer); - - if (pPixmapPriv->stride < 0) - { - pGeometry->f.bitmap.bytes_per_line = -pPixmapPriv->stride; - pGeometry->f.bitmap.scanline_order = - GLITZ_PIXEL_SCANLINE_ORDER_BOTTOM_UP; - } - else - { - pGeometry->f.bitmap.bytes_per_line = pPixmapPriv->stride; - pGeometry->f.bitmap.scanline_order = - GLITZ_PIXEL_SCANLINE_ORDER_TOP_DOWN; - } - - pGeometry->f.bitmap.pad = ((1 + FB_MASK) >> FB_SHIFT) * - sizeof (FbBits); - pGeometry->width = pPixmap->drawable.width; - pGeometry->count = pPixmap->drawable.height; - - pPixmapPriv->pGeometry = pGeometry; - } - - pPixmapPriv->pGeometry->xOff = xOff << 16; - pPixmapPriv->pGeometry->yOff = yOff << 16; - - return pPixmapPriv->pGeometry; -} - -Bool -xglCreatePixmapSurface (PixmapPtr pPixmap) -{ - XGL_PIXMAP_PRIV (pPixmap); - - if (!pPixmapPriv->surface) - { - XGL_SCREEN_PRIV (pPixmap->drawable.pScreen); - - if (!pPixmapPriv->pVisual || !pPixmapPriv->pVisual->format.surface) - return FALSE; - - pPixmapPriv->surface = - glitz_surface_create (pScreenPriv->drawable, - pPixmapPriv->pVisual->format.surface, - pPixmap->drawable.width, - pPixmap->drawable.height, - 0, NULL); - if (!pPixmapPriv->surface) - { - pPixmapPriv->pVisual = NULL; - pPixmapPriv->target = xglPixmapTargetNo; - - return FALSE; - } - } - - return TRUE; -} - -Bool -xglAllocatePixmapBits (PixmapPtr pPixmap, int hint) -{ - int width, height, bpp, stride; - - XGL_PIXMAP_PRIV (pPixmap); - XGL_SCREEN_PRIV (pPixmap->drawable.pScreen); - - width = pPixmap->drawable.width; - height = pPixmap->drawable.height; - bpp = pPixmap->drawable.bitsPerPixel; - - stride = ((width * bpp + FB_MASK) >> FB_SHIFT) * sizeof (FbBits); - - if (stride) - { - glitz_buffer_t *buffer; - - if ((pScreenPriv->pboMask & bpp) && hint) - { - buffer = glitz_pixel_buffer_create (pScreenPriv->drawable, - NULL, height * stride, - XGL_PIXMAP_USAGE_HINT (hint)); - } - else - { - pPixmapPriv->bits = xalloc (height * stride); - if (!pPixmapPriv->bits) - return FALSE; - - buffer = glitz_buffer_create_for_data (pPixmapPriv->bits); - } - - if (!buffer) - { - if (pPixmapPriv->bits) - xfree (pPixmapPriv->bits); - pPixmapPriv->bits = NULL; - return FALSE; - } - pPixmapPriv->buffer = buffer; - } - - if (pScreenPriv->yInverted) - pPixmapPriv->stride = stride; - else - pPixmapPriv->stride = -stride; - - return TRUE; -} - -Bool -xglMapPixmapBits (PixmapPtr pPixmap) -{ - if (!pPixmap->devPrivate.ptr) - { - CARD8 *bits; - - XGL_PIXMAP_PRIV (pPixmap); - - if (!pPixmapPriv->buffer) - if (!xglAllocatePixmapBits (pPixmap, - XGL_PIXMAP_USAGE_HINT_DEFAULT)) - return FALSE; - - bits = glitz_buffer_map (pPixmapPriv->buffer, - GLITZ_BUFFER_ACCESS_READ_WRITE); - if (!bits) - return FALSE; - - pPixmap->devKind = pPixmapPriv->stride; - if (pPixmapPriv->stride < 0) - { - pPixmap->devPrivate.ptr = bits + - (pPixmap->drawable.height - 1) * -pPixmapPriv->stride; - } - else - { - pPixmap->devPrivate.ptr = bits; - } - } - - return TRUE; -} - -Bool -xglUnmapPixmapBits (PixmapPtr pPixmap) -{ - XGL_PIXMAP_PRIV (pPixmap); - - pPixmap->devKind = 0; - pPixmap->devPrivate.ptr = 0; - - if (pPixmapPriv->buffer) - if (glitz_buffer_unmap (pPixmapPriv->buffer)) - return FALSE; - - return TRUE; -} - -Bool -xglCheckPixmapSize (PixmapPtr pPixmap, - xglSizeConstraintPtr pSize) -{ - if (pPixmap->drawable.width < pSize->minWidth || - pPixmap->drawable.height < pSize->minHeight) - return FALSE; - - if (pPixmap->drawable.width > pSize->aboveWidth || - pPixmap->drawable.height > pSize->aboveHeight) - return TRUE; - - return FALSE; -} - -void -xglEnablePixmapAccel (PixmapPtr pPixmap, - xglAccelInfoPtr pAccel) -{ - XGL_SCREEN_PRIV (pPixmap->drawable.pScreen); - XGL_PIXMAP_PRIV (pPixmap); - - if (pAccel->enabled && xglCheckPixmapSize (pPixmap, &pAccel->size)) - { - xglVisualPtr v; - - if (pAccel->pbuffer) - { - for (v = pScreenPriv->pVisual; v; v = v->next) - { - if (v->pPixel->depth != pPixmap->drawable.depth) - continue; - - if (v->format.drawable && v->pbuffer) - break; - } - } - else - { - for (v = pScreenPriv->pVisual; v; v = v->next) - { - if (v->pPixel->depth != pPixmap->drawable.depth) - continue; - - if (v->format.drawable && !v->pbuffer) - break; - } - } - - if (v) - { - xglSetPixmapVisual (pPixmap, v); - if (!pPixmapPriv->target) - pPixmapPriv->target = xglPixmapTargetOut; - } - } -} diff --git a/hw/xgl/xglscreen.c b/hw/xgl/xglscreen.c deleted file mode 100644 index 47ed34508..000000000 --- a/hw/xgl/xglscreen.c +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "inputstr.h" -#include "mipointer.h" -#include "damage.h" -#include "fb.h" -#ifdef MITSHM -#include "shmint.h" -static ShmFuncs shmFuncs = { NULL, xglShmPutImage }; -#endif -#ifdef RENDER -#include "glyphstr.h" -#endif -#ifdef COMPOSITE -#include "compint.h" -#endif - -int xglScreenGeneration = -1; -int xglScreenPrivateIndex; -int xglGCPrivateIndex; -int xglPixmapPrivateIndex; -int xglWinPrivateIndex; - -#ifdef RENDER -int xglGlyphPrivateIndex; -#endif - -#define xglQueryBestSize (void *) NoopDDA -#define xglSaveScreen (void *) NoopDDA - -#define xglConstrainCursor (void *) NoopDDA -#define xglCursorLimits (void *) NoopDDA -#define xglDisplayCursor (void *) NoopDDA -#define xglRealizeCursor (void *) NoopDDA -#define xglUnrealizeCursor (void *) NoopDDA -#define xglRecolorCursor (void *) NoopDDA -#define xglSetCursorPosition (void *) NoopDDA - -static Bool -xglAllocatePrivates (ScreenPtr pScreen) -{ - xglScreenPtr pScreenPriv; - - if (xglScreenGeneration != serverGeneration) - { - xglScreenPrivateIndex = AllocateScreenPrivateIndex (); - if (xglScreenPrivateIndex < 0) - return FALSE; - - xglGCPrivateIndex = AllocateGCPrivateIndex (); - if (xglGCPrivateIndex < 0) - return FALSE; - - xglPixmapPrivateIndex = AllocatePixmapPrivateIndex (); - if (xglPixmapPrivateIndex < 0) - return FALSE; - - xglWinPrivateIndex = AllocateWindowPrivateIndex (); - if (xglWinPrivateIndex < 0) - return FALSE; - -#ifdef RENDER - xglGlyphPrivateIndex = AllocateGlyphPrivateIndex (); - if (xglGlyphPrivateIndex < 0) - return FALSE; -#endif - - xglScreenGeneration = serverGeneration; - } - - if (!AllocateGCPrivate (pScreen, xglGCPrivateIndex, sizeof (xglGCRec))) - return FALSE; - - if (!AllocatePixmapPrivate (pScreen, xglPixmapPrivateIndex, - sizeof (xglPixmapRec))) - return FALSE; - - if (!AllocateWindowPrivate (pScreen, xglWinPrivateIndex, - sizeof (xglWinRec))) - return FALSE; - - pScreenPriv = xalloc (sizeof (xglScreenRec)); - if (!pScreenPriv) - return FALSE; - - XGL_SET_SCREEN_PRIV (pScreen, pScreenPriv); - - return TRUE; -} - -Bool -xglScreenInit (ScreenPtr pScreen) -{ - xglScreenPtr pScreenPriv; - xglVisualPtr v; - int i, depth, bpp = 0; - -#ifdef RENDER - PictureScreenPtr pPictureScreen; -#endif - - depth = xglScreenInfo.depth; - - for (v = xglVisuals; v; v = v->next) - { - if (v->pPixel->depth == depth) - { - bpp = v->pPixel->masks.bpp; - break; - } - } - - if (!bpp) - return FALSE; - - if (!xglAllocatePrivates (pScreen)) - return FALSE; - - pScreenPriv = XGL_GET_SCREEN_PRIV (pScreen); - - pScreenPriv->pScreenPixmap = NULL; - - /* Add any unlisted depths from the pixmap formats */ - for (i = 0; i < screenInfo.numPixmapFormats; i++) - { - if (!xglHasVisualTypes (xglVisuals, screenInfo.formats[i].depth)) - xglSetVisualTypes (screenInfo.formats[i].depth, 0, 0, 0, 0); - } - - pScreenPriv->pVisual = 0; - -#ifdef GLXEXT - pScreenPriv->pGlxVisual = 0; -#endif - - pScreenPriv->rootVisual = 0; - - pScreenPriv->drawable = xglScreenInfo.drawable; - pScreenPriv->features = - glitz_drawable_get_features (xglScreenInfo.drawable); - - GEOMETRY_INIT (pScreen, &pScreenPriv->scratchGeometry, - GLITZ_GEOMETRY_TYPE_VERTEX, - pScreenPriv->geometryUsage, 0); - - pScreenPriv->geometryDataType = xglScreenInfo.geometryDataType; - pScreenPriv->geometryUsage = xglScreenInfo.geometryUsage; - pScreenPriv->yInverted = xglScreenInfo.yInverted; - pScreenPriv->pboMask = xglScreenInfo.pboMask; - pScreenPriv->lines = xglScreenInfo.lines; - pScreenPriv->accel = xglScreenInfo.accel; - - if (monitorResolution == 0) - monitorResolution = XGL_DEFAULT_DPI; - - if (!fbSetupScreen (pScreen, NULL, - xglScreenInfo.width, xglScreenInfo.height, - monitorResolution, monitorResolution, - xglScreenInfo.width, bpp)) - return FALSE; - - pScreen->SaveScreen = xglSaveScreen; - - pScreen->CreatePixmap = xglCreatePixmap; - pScreen->DestroyPixmap = xglDestroyPixmap; - - if (!fbFinishScreenInit (pScreen, NULL, - xglScreenInfo.width, xglScreenInfo.height, - monitorResolution, monitorResolution, - xglScreenInfo.width, bpp)) - return FALSE; - -#ifdef MITSHM - ShmRegisterFuncs (pScreen, &shmFuncs); -#endif - -#ifdef RENDER - if (!xglPictureInit (pScreen)) - return FALSE; -#endif - - XGL_SCREEN_WRAP (GetImage, xglGetImage); - XGL_SCREEN_WRAP (GetSpans, xglGetSpans); - - XGL_SCREEN_WRAP (CopyWindow, xglCopyWindow); - XGL_SCREEN_WRAP (CreateWindow, xglCreateWindow); - XGL_SCREEN_WRAP (DestroyWindow, xglDestroyWindow); - XGL_SCREEN_WRAP (ChangeWindowAttributes, xglChangeWindowAttributes); - - XGL_SCREEN_WRAP (CreateGC, xglCreateGC); - - pScreen->ConstrainCursor = xglConstrainCursor; - pScreen->CursorLimits = xglCursorLimits; - pScreen->DisplayCursor = xglDisplayCursor; - pScreen->RealizeCursor = xglRealizeCursor; - pScreen->UnrealizeCursor = xglUnrealizeCursor; - pScreen->RecolorCursor = xglRecolorCursor; - pScreen->SetCursorPosition = xglSetCursorPosition; - - pScreen->ModifyPixmapHeader = xglModifyPixmapHeader; - - XGL_SCREEN_WRAP (BitmapToRegion, xglPixmapToRegion); - - pScreen->GetWindowPixmap = xglGetWindowPixmap; - - XGL_SCREEN_WRAP (SetWindowPixmap, xglSetWindowPixmap); - -#ifdef RENDER - pPictureScreen = GetPictureScreenIfSet (pScreen); - if (pPictureScreen) - { - if (!AllocateGlyphPrivate (pScreen, xglGlyphPrivateIndex, - sizeof (xglGlyphRec))) - return FALSE; - - XGL_PICTURE_SCREEN_WRAP (RealizeGlyph, xglRealizeGlyph); - XGL_PICTURE_SCREEN_WRAP (UnrealizeGlyph, xglUnrealizeGlyph); - XGL_PICTURE_SCREEN_WRAP (Composite, xglComposite); - XGL_PICTURE_SCREEN_WRAP (Glyphs, xglGlyphs); - XGL_PICTURE_SCREEN_WRAP (Trapezoids, xglTrapezoids); - XGL_PICTURE_SCREEN_WRAP (AddTraps, xglAddTraps); - XGL_PICTURE_SCREEN_WRAP (AddTriangles, xglAddTriangles); - XGL_PICTURE_SCREEN_WRAP (ChangePicture, xglChangePicture); - XGL_PICTURE_SCREEN_WRAP (ChangePictureTransform, - xglChangePictureTransform); - XGL_PICTURE_SCREEN_WRAP (ChangePictureFilter, xglChangePictureFilter); - } -#endif - - if (!fbCreateDefColormap (pScreen)) - return FALSE; - -#ifdef COMPOSITE -#warning "composite building" - if (!compScreenInit (pScreen)) - return FALSE; -#endif - - /* Damage is required */ - DamageSetup (pScreen); - - XGL_SCREEN_WRAP (CloseScreen, xglCloseScreen); - - return TRUE; -} - -Bool -xglFinishScreenInit (ScreenPtr pScreen) -{ - xglVisualPtr v; - -#ifdef RENDER - glitz_vertex_format_t *format; - static glitz_color_t clearBlack = { 0x0, 0x0, 0x0, 0x0 }; - static glitz_color_t solidWhite = { 0xffff, 0xffff, 0xffff, 0xffff }; - int i; -#endif - - XGL_SCREEN_PRIV (pScreen); - - xglInitVisuals (pScreen); - - for (v = pScreenPriv->pVisual; v; v = v->next) - { - if (v->vid == pScreen->rootVisual) - pScreenPriv->rootVisual = v; - } - - if (!pScreenPriv->rootVisual || !pScreenPriv->rootVisual->format.surface) - return FALSE; - - pScreenPriv->surface = - glitz_surface_create (pScreenPriv->drawable, - pScreenPriv->rootVisual->format.surface, - xglScreenInfo.width, xglScreenInfo.height, - 0, NULL); - if (!pScreenPriv->surface) - return FALSE; - - glitz_surface_attach (pScreenPriv->surface, - pScreenPriv->drawable, - GLITZ_DRAWABLE_BUFFER_FRONT_COLOR); - -#ifdef RENDER - for (i = 0; i < 33; i++) - pScreenPriv->glyphCache[i].pScreen = NULL; - - for (v = pScreenPriv->pVisual; v; v = v->next) - { - if (v->pPixel->depth == 8) - break; - } - - pScreenPriv->pSolidAlpha = 0; - pScreenPriv->trapInfo.pMask = 0; - - /* An accelerated alpha only Xgl visual is required for trapezoid - acceleration */ - if (v && v->format.surface) - { - glitz_surface_t *mask; - - mask = glitz_surface_create (pScreenPriv->drawable, - v->format.surface, - 2, 1, 0, NULL); - if (mask) - { - glitz_set_rectangle (mask, &clearBlack, 0, 0, 1, 1); - glitz_set_rectangle (mask, &solidWhite, 1, 0, 1, 1); - - glitz_surface_set_fill (mask, GLITZ_FILL_NEAREST); - glitz_surface_set_filter (mask, GLITZ_FILTER_BILINEAR, NULL, 0); - - pScreenPriv->trapInfo.pMask = xglCreateDevicePicture (mask); - if (!pScreenPriv->trapInfo.pMask) - return FALSE; - } - } - - format = &pScreenPriv->trapInfo.format.vertex; - format->primitive = GLITZ_PRIMITIVE_QUADS; - format->attributes = GLITZ_VERTEX_ATTRIBUTE_MASK_COORD_MASK; - - format->mask.type = GLITZ_DATA_TYPE_FLOAT; - format->mask.size = GLITZ_COORDINATE_SIZE_X; - format->bytes_per_vertex = sizeof (glitz_float_t); - - if (pScreenPriv->geometryDataType) - { - format->type = GLITZ_DATA_TYPE_FLOAT; - format->bytes_per_vertex += 2 * sizeof (glitz_float_t); - format->mask.offset = 2 * sizeof (glitz_float_t); - } - else - { - format->type = GLITZ_DATA_TYPE_SHORT; - format->bytes_per_vertex += 2 * sizeof (glitz_short_t); - format->mask.offset = 2 * sizeof (glitz_short_t); - } -#endif - -#ifdef XV - if (!xglXvScreenInit (pScreen)) - return FALSE; -#endif - - return TRUE; -} - -Bool -xglCloseScreen (int index, - ScreenPtr pScreen) -{ - xglVisualPtr v; - - XGL_SCREEN_PRIV (pScreen); - XGL_PIXMAP_PRIV (pScreenPriv->pScreenPixmap); - -#ifdef RENDER - int i; - - for (i = 0; i < 33; i++) - xglFiniGlyphCache (&pScreenPriv->glyphCache[i]); - - if (pScreenPriv->pSolidAlpha) - FreePicture ((pointer) pScreenPriv->pSolidAlpha, 0); - - if (pScreenPriv->trapInfo.pMask) - FreePicture ((pointer) pScreenPriv->trapInfo.pMask, 0); -#endif - - xglFiniPixmap (pScreenPriv->pScreenPixmap); - if (pPixmapPriv->pDamage) - DamageDestroy (pPixmapPriv->pDamage); - - if (pScreenPriv->surface) - glitz_surface_destroy (pScreenPriv->surface); - - GEOMETRY_UNINIT (&pScreenPriv->scratchGeometry); - - while (pScreenPriv->pVisual) - { - v = pScreenPriv->pVisual; - pScreenPriv->pVisual = v->next; - xfree (v); - } - -#ifdef GLXEXT - while (pScreenPriv->pGlxVisual) - { - v = pScreenPriv->pGlxVisual; - pScreenPriv->pGlxVisual = v->next; - xfree (v); - } -#endif - - XGL_SCREEN_UNWRAP (CloseScreen); - xfree (pScreenPriv); - - return (*pScreen->CloseScreen) (index, pScreen); -} - -#ifdef RENDER -void -xglCreateSolidAlphaPicture (ScreenPtr pScreen) -{ - static xRenderColor solidWhite = { 0xffff, 0xffff, 0xffff, 0xffff }; - static xRectangle one = { 0, 0, 1, 1 }; - PixmapPtr pPixmap; - PictFormatPtr pFormat; - int error; - Pixel pixel; - GCPtr pGC; - XID tmpval[2]; - - XGL_SCREEN_PRIV (pScreen); - - pFormat = PictureMatchFormat (pScreen, 32, PICT_a8r8g8b8); - if (!pFormat) - return; - - pGC = GetScratchGC (pFormat->depth, pScreen); - if (!pGC) - return; - - pPixmap = (*pScreen->CreatePixmap) (pScreen, 1, 1, pFormat->depth, 0); - if (!pPixmap) - return; - - miRenderColorToPixel (pFormat, &solidWhite, &pixel); - - tmpval[0] = GXcopy; - tmpval[1] = pixel; - - ChangeGC (pGC, GCFunction | GCForeground, tmpval); - ValidateGC (&pPixmap->drawable, pGC); - (*pGC->ops->PolyFillRect) (&pPixmap->drawable, pGC, 1, &one); - FreeScratchGC (pGC); - - tmpval[0] = xTrue; - pScreenPriv->pSolidAlpha = CreatePicture (0, &pPixmap->drawable, pFormat, - CPRepeat, tmpval, - serverClient, &error); - (*pScreen->DestroyPixmap) (pPixmap); - - if (pScreenPriv->pSolidAlpha) - ValidatePicture (pScreenPriv->pSolidAlpha); -} -#endif diff --git a/hw/xgl/xglshm.c b/hw/xgl/xglshm.c deleted file mode 100644 index 567daa954..000000000 --- a/hw/xgl/xglshm.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "gcstruct.h" - -#ifdef MITSHM - -void -xglShmPutImage (DrawablePtr pDrawable, - GCPtr pGC, - int depth, - unsigned int format, - int w, - int h, - int sx, - int sy, - int sw, - int sh, - int dx, - int dy, - char *data) -{ - ScreenPtr pScreen = pDrawable->pScreen; - PixmapPtr pPixmapHeader = NULL; - PixmapPtr pPixmap; - int saveTarget; - - XGL_DRAWABLE_PIXMAP_PRIV (pDrawable); - - if ((format == ZPixmap) || (depth == 1)) - { - pPixmap = pPixmapHeader = - GetScratchPixmapHeader (pScreen, w, h, depth, - BitsPerPixel (depth), - PixmapBytePad (w, depth), - (pointer) data); - - /* disable any possible acceleration of this pixmap */ - if (pPixmap) - xglSetPixmapVisual (pPixmap, 0); - } - else - { - pPixmap = (*pScreen->CreatePixmap) (pScreen, sw, sh, depth, - CREATE_PIXMAP_USAGE_SCRATCH); - if (pPixmap) - { - GCPtr pScratchGC; - - if (!xglAllocatePixmapBits (pPixmap, - XGL_PIXMAP_USAGE_HINT_DEFAULT)) - { - (*pScreen->DestroyPixmap) (pPixmap); - return; - } - - xglSetPixmapVisual (pPixmap, 0); - - pScratchGC = GetScratchGC (depth, pScreen); - if (!pScratchGC) - { - (*pScreen->DestroyPixmap) (pPixmap); - return; - } - - ValidateGC ((DrawablePtr) pPixmap, pScratchGC); - (*pGC->ops->PutImage) ((DrawablePtr) pPixmap, pScratchGC, depth, - -sx, -sy, w, h, 0, - (format == XYPixmap) ? XYPixmap : ZPixmap, - data); - - FreeScratchGC (pScratchGC); - - sx = sy = 0; - } - } - - if (!pPixmap) - return; - - /* CopyArea should always be done in software */ - saveTarget = pPixmapPriv->target; - pPixmapPriv->target = xglPixmapTargetNo; - - if (format == XYBitmap) - (*pGC->ops->CopyPlane) ((DrawablePtr) pPixmap, pDrawable, pGC, - sx, sy, sw, sh, dx, dy, 1L); - else - (*pGC->ops->CopyArea) ((DrawablePtr) pPixmap, pDrawable, pGC, - sx, sy, sw, sh, dx, dy); - - pPixmapPriv->target = saveTarget; - - if (pPixmapHeader) - FreeScratchPixmapHeader (pPixmapHeader); - else - (*pScreen->DestroyPixmap) (pPixmap); -} - -#endif diff --git a/hw/xgl/xglsolid.c b/hw/xgl/xglsolid.c deleted file mode 100644 index 8657a9a16..000000000 --- a/hw/xgl/xglsolid.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "gcstruct.h" -#include <X11/fonts/fontstruct.h> -#include "dixfontstr.h" - -Bool -xglSolid (DrawablePtr pDrawable, - glitz_operator_t op, - glitz_surface_t *solid, - xglGeometryPtr pGeometry, - int x, - int y, - int width, - int height, - BoxPtr pBox, - int nBox) -{ - glitz_surface_t *surface; - int xOff, yOff; - - if (nBox < 1) - return TRUE; - - if (!xglPrepareTarget (pDrawable)) - return FALSE; - - XGL_GET_DRAWABLE (pDrawable, surface, xOff, yOff); - - if (pGeometry) - { - glitz_surface_set_clip_region (surface, xOff, yOff, - (glitz_box_t *) pBox, nBox); - } - else - { - pGeometry = xglGetScratchVertexGeometry (pDrawable->pScreen, 4 * nBox); - GEOMETRY_ADD_BOX (pDrawable->pScreen, pGeometry, pBox, nBox); - } - - GEOMETRY_TRANSLATE (pGeometry, xOff, yOff); - - if (!GEOMETRY_ENABLE (pGeometry, surface)) - return FALSE; - - glitz_composite (op, - solid, NULL, surface, - 0, 0, - 0, 0, - x + xOff, - y + yOff, - width, height); - - glitz_surface_set_clip_region (surface, 0, 0, NULL, 0); - - if (glitz_surface_get_status (surface)) - return FALSE; - - return TRUE; -} - -Bool -xglSolidGlyph (DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nGlyph, - CharInfoPtr *ppci, - pointer pglyphBase) -{ - xglGeometryRec geometry; - int xBack, widthBack; - int yBack, heightBack; - - XGL_GC_PRIV (pGC); - - x += pDrawable->x; - y += pDrawable->y; - - GEOMETRY_INIT (pDrawable->pScreen, &geometry, - GLITZ_GEOMETRY_TYPE_BITMAP, - GEOMETRY_USAGE_SYSMEM, 0); - - GEOMETRY_FOR_GLYPH (pDrawable->pScreen, - &geometry, - nGlyph, - ppci, - pglyphBase); - - GEOMETRY_TRANSLATE (&geometry, x, y); - - widthBack = 0; - while (nGlyph--) - widthBack += (*ppci++)->metrics.characterWidth; - - xBack = x; - if (widthBack < 0) - { - xBack += widthBack; - widthBack = -widthBack; - } - yBack = y - FONTASCENT (pGC->font); - heightBack = FONTASCENT (pGC->font) + FONTDESCENT (pGC->font); - - if (xglSolid (pDrawable, - pGCPriv->op, - pGCPriv->bg, - NULL, - xBack, - yBack, - widthBack, - heightBack, - REGION_RECTS (pGC->pCompositeClip), - REGION_NUM_RECTS (pGC->pCompositeClip))) - { - if (xglSolid (pDrawable, - pGCPriv->op, - pGCPriv->fg, - &geometry, - xBack, - yBack, - widthBack, - heightBack, - REGION_RECTS (pGC->pCompositeClip), - REGION_NUM_RECTS (pGC->pCompositeClip))) - { - GEOMETRY_UNINIT (&geometry); - xglAddCurrentBitDamage (pDrawable); - return TRUE; - } - } - - GEOMETRY_UNINIT (&geometry); - return FALSE; -} diff --git a/hw/xgl/xglsync.c b/hw/xgl/xglsync.c deleted file mode 100644 index 6b5c00b57..000000000 --- a/hw/xgl/xglsync.c +++ /dev/null @@ -1,453 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" - -Bool -xglSyncBits (DrawablePtr pDrawable, - BoxPtr pExtents) -{ - RegionRec region; - BoxRec box; - - XGL_DRAWABLE_PIXMAP (pDrawable); - XGL_PIXMAP_PRIV (pPixmap); - - if (pPixmapPriv->allBits) - return xglMapPixmapBits (pPixmap); - - if (pPixmapPriv->target == xglPixmapTargetIn && pExtents) - { - box.x1 = 0; - box.y1 = 0; - box.x2 = pPixmap->drawable.width; - box.y2 = pPixmap->drawable.height; - if (pExtents->x1 > box.x1) - box.x1 = pExtents->x1; - if (pExtents->y1 > box.y1) - box.y1 = pExtents->y1; - if (pExtents->x2 < box.x2) - box.x2 = pExtents->x2; - if (pExtents->y2 < box.y2) - box.y2 = pExtents->y2; - - if (box.x2 <= box.x1 || box.y2 <= box.y1) - return xglMapPixmapBits (pPixmap); - - if (REGION_NOTEMPTY (pDrawable->pScreen, &pPixmapPriv->bitRegion)) - { - switch (RECT_IN_REGION (pDrawable->pScreen, - &pPixmapPriv->bitRegion, - &box)) { - case rgnIN: - REGION_INIT (pDrawable->pScreen, ®ion, NullBox, 0); - break; - case rgnOUT: - REGION_INIT (pDrawable->pScreen, ®ion, &box, 1); - REGION_UNION (pDrawable->pScreen, - &pPixmapPriv->bitRegion, &pPixmapPriv->bitRegion, - ®ion); - break; - case rgnPART: - REGION_INIT (pDrawable->pScreen, ®ion, &box, 1); - REGION_SUBTRACT (pDrawable->pScreen, ®ion, ®ion, - &pPixmapPriv->bitRegion); - REGION_UNION (pDrawable->pScreen, - &pPixmapPriv->bitRegion, &pPixmapPriv->bitRegion, - ®ion); - break; - } - } - else - { - REGION_INIT (pDrawable->pScreen, ®ion, &box, 1); - REGION_SUBTRACT (pDrawable->pScreen, &pPixmapPriv->bitRegion, - ®ion, &pPixmapPriv->bitRegion); - } - - if (REGION_NUM_RECTS (&pPixmapPriv->bitRegion) == 1) - { - BoxPtr pBox; - - pBox = REGION_RECTS (&pPixmapPriv->bitRegion); - - if (pBox->x1 <= 0 && - pBox->y1 <= 0 && - pBox->x2 >= pPixmap->drawable.width && - pBox->y2 >= pPixmap->drawable.height) - pPixmapPriv->allBits = TRUE; - } - } - else - { - box.x1 = 0; - box.y1 = 0; - box.x2 = pPixmap->drawable.width; - box.y2 = pPixmap->drawable.height; - - REGION_INIT (pDrawable->pScreen, ®ion, &box, 1); - REGION_SUBTRACT (pDrawable->pScreen, ®ion, ®ion, - &pPixmapPriv->bitRegion); - - pPixmapPriv->allBits = TRUE; - } - - if (!pPixmapPriv->buffer) - if (!xglAllocatePixmapBits (pPixmap, XGL_PIXMAP_USAGE_HINT_DEFAULT)) - return FALSE; - - if (REGION_NOTEMPTY (pDrawable->pScreen, ®ion) && pPixmapPriv->surface) - { - glitz_pixel_format_t format; - BoxPtr pBox; - BoxPtr pExt; - int nBox; - - if (!xglSyncSurface (pDrawable)) - FatalError (XGL_SW_FAILURE_STRING); - - xglUnmapPixmapBits (pPixmap); - - pBox = REGION_RECTS (®ion); - nBox = REGION_NUM_RECTS (®ion); - pExt = REGION_EXTENTS (pDrawable->pScreen, ®ion); - - format.fourcc = GLITZ_FOURCC_RGB; - format.masks = pPixmapPriv->pVisual->pPixel->masks; - format.xoffset = pExt->x1; - - if (pPixmapPriv->stride < 0) - { - format.skip_lines = pPixmap->drawable.height - pExt->y2; - format.bytes_per_line = -pPixmapPriv->stride; - format.scanline_order = GLITZ_PIXEL_SCANLINE_ORDER_BOTTOM_UP; - } - else - { - format.skip_lines = pExt->y1; - format.bytes_per_line = pPixmapPriv->stride; - format.scanline_order = GLITZ_PIXEL_SCANLINE_ORDER_TOP_DOWN; - } - - glitz_surface_set_clip_region (pPixmapPriv->surface, - 0, 0, (glitz_box_t *) pBox, nBox); - - glitz_get_pixels (pPixmapPriv->surface, - pExt->x1, - pExt->y1, - pExt->x2 - pExt->x1, - pExt->y2 - pExt->y1, - &format, - pPixmapPriv->buffer); - - glitz_surface_set_clip_region (pPixmapPriv->surface, 0, 0, NULL, 0); - } - - REGION_UNINIT (pDrawable->pScreen, ®ion); - - if (pPixmapPriv->allBits) - { - box.x1 = 0; - box.y1 = 0; - box.x2 = pPixmap->drawable.width; - box.y2 = pPixmap->drawable.height; - - REGION_UNINIT (pDrawable->pScreen, &pPixmapPriv->bitRegion); - REGION_INIT (pDrawable->pScreen, &pPixmapPriv->bitRegion, &box, 1); - } - - return xglMapPixmapBits (pPixmap); -} - -void -xglSyncDamageBoxBits (DrawablePtr pDrawable) -{ - XGL_DRAWABLE_PIXMAP_PRIV (pDrawable); - - if (!xglSyncBits (pDrawable, &pPixmapPriv->damageBox)) - FatalError (XGL_SW_FAILURE_STRING); -} - -Bool -xglSyncSurface (DrawablePtr pDrawable) -{ - RegionPtr pRegion; - - XGL_DRAWABLE_PIXMAP (pDrawable); - XGL_PIXMAP_PRIV (pPixmap); - - if (!pPixmapPriv->surface) - { - if (!xglCreatePixmapSurface (pPixmap)) - return FALSE; - } - - pRegion = DamageRegion (pPixmapPriv->pDamage); - - if (REGION_NOTEMPTY (pDrawable->pScreen, pRegion)) - { - glitz_pixel_format_t format; - BoxPtr pBox; - BoxPtr pExt; - int nBox; - - xglUnmapPixmapBits (pPixmap); - - nBox = REGION_NUM_RECTS (pRegion); - pBox = REGION_RECTS (pRegion); - pExt = REGION_EXTENTS (pDrawable->pScreen, pRegion); - - format.fourcc = pPixmapPriv->pVisual->format.surface->color.fourcc; - format.masks = pPixmapPriv->pVisual->pPixel->masks; - format.xoffset = pExt->x1; - - if (pPixmapPriv->stride < 0) - { - format.skip_lines = pPixmap->drawable.height - pExt->y2; - format.bytes_per_line = -pPixmapPriv->stride; - format.scanline_order = GLITZ_PIXEL_SCANLINE_ORDER_BOTTOM_UP; - } - else - { - format.skip_lines = pExt->y1; - format.bytes_per_line = pPixmapPriv->stride; - format.scanline_order = GLITZ_PIXEL_SCANLINE_ORDER_TOP_DOWN; - } - - glitz_surface_set_clip_region (pPixmapPriv->surface, - 0, 0, (glitz_box_t *) pBox, nBox); - - glitz_set_pixels (pPixmapPriv->surface, - pExt->x1, - pExt->y1, - pExt->x2 - pExt->x1, - pExt->y2 - pExt->y1, - &format, - pPixmapPriv->buffer); - - glitz_surface_set_clip_region (pPixmapPriv->surface, 0, 0, NULL, 0); - - REGION_EMPTY (pDrawable->pScreen, pRegion); - } - - return TRUE; -} - -Bool -xglPrepareTarget (DrawablePtr pDrawable) -{ - XGL_DRAWABLE_PIXMAP (pDrawable); - XGL_PIXMAP_PRIV (pPixmap); - - switch (pPixmapPriv->target) { - case xglPixmapTargetNo: - break; - case xglPixmapTargetOut: - if (xglSyncSurface (pDrawable)) - { - glitz_drawable_format_t *format; - - XGL_SCREEN_PRIV (pDrawable->pScreen); - - if (!pPixmapPriv->drawable) - { - unsigned int width, height; - - format = pPixmapPriv->pVisual->format.drawable; - width = pPixmap->drawable.width; - height = pPixmap->drawable.height; - - if (pPixmapPriv->pVisual->pbuffer) - { - pPixmapPriv->drawable = - glitz_create_pbuffer_drawable (pScreenPriv->drawable, - format, width, height); - } - else - { - pPixmapPriv->drawable = - glitz_create_drawable (pScreenPriv->drawable, - format, width, height); - } - } - - if (pPixmapPriv->drawable) - { - glitz_surface_attach (pPixmapPriv->surface, - pPixmapPriv->drawable, - GLITZ_DRAWABLE_BUFFER_FRONT_COLOR); - - pPixmapPriv->target = xglPixmapTargetIn; - - return TRUE; - } - } - pPixmapPriv->target = xglPixmapTargetNo; - break; - case xglPixmapTargetIn: - if (xglSyncSurface (pDrawable)) - return TRUE; - break; - } - - return FALSE; -} - -void -xglAddSurfaceDamage (DrawablePtr pDrawable, - RegionPtr pRegion) -{ - glitz_surface_t *surface; - int xOff, yOff; - - XGL_DRAWABLE_PIXMAP_PRIV (pDrawable); - - pPixmapPriv->damageBox = miEmptyBox; - - XGL_GET_DRAWABLE (pDrawable, surface, xOff, yOff); - - if (xOff || yOff) - REGION_TRANSLATE (pDrawable->pScreen, pRegion, xOff, yOff); - - if (pPixmapPriv->pDamage) - { - RegionPtr pDamageRegion; - - pDamageRegion = DamageRegion (pPixmapPriv->pDamage); - - REGION_UNION (pDrawable->pScreen, - pDamageRegion, pDamageRegion, - pRegion); - } - - REGION_UNION (pDrawable->pScreen, - &pPixmapPriv->bitRegion, &pPixmapPriv->bitRegion, - pRegion); - - if (xOff || yOff) - REGION_TRANSLATE (pDrawable->pScreen, pRegion, -xOff, -yOff); -} - -void -xglAddCurrentSurfaceDamage (DrawablePtr pDrawable) -{ - XGL_DRAWABLE_PIXMAP_PRIV (pDrawable); - - if (BOX_NOTEMPTY (&pPixmapPriv->damageBox)) - { - RegionRec region; - - REGION_INIT (pDrawable->pScreen, ®ion, &pPixmapPriv->damageBox, 1); - - if (pPixmapPriv->pDamage) - { - RegionPtr pDamageRegion; - - pDamageRegion = DamageRegion (pPixmapPriv->pDamage); - - REGION_UNION (pDrawable->pScreen, - pDamageRegion, pDamageRegion, - ®ion); - } - - REGION_UNION (pDrawable->pScreen, - &pPixmapPriv->bitRegion, &pPixmapPriv->bitRegion, - ®ion); - - REGION_UNINIT (pDrawable->pScreen, ®ion); - - pPixmapPriv->damageBox = miEmptyBox; - } -} - -void -xglAddBitDamage (DrawablePtr pDrawable, - RegionPtr pRegion) -{ - XGL_DRAWABLE_PIXMAP_PRIV (pDrawable); - - if (REGION_NOTEMPTY (pDrawable->pScreen, &pPixmapPriv->bitRegion)) - { - BoxPtr pBox; - BoxPtr pExt, pBitExt; - int nBox; - - pBox = REGION_RECTS (pRegion); - pExt = REGION_EXTENTS (pDrawable->pScreen, pRegion); - nBox = REGION_NUM_RECTS (pRegion); - - pBitExt = REGION_EXTENTS (pDrawable->pScreen, &pPixmapPriv->bitRegion); - - if (pExt->x1 < pBitExt->x2 && - pExt->y1 < pBitExt->y2 && - pExt->x2 > pBitExt->x1 && - pExt->y2 > pBitExt->y1) - { - while (nBox--) - { - if (pBox->x1 < pBitExt->x2 && - pBox->y1 < pBitExt->y2 && - pBox->x2 > pBitExt->x1 && - pBox->y2 > pBitExt->y1) - { - REGION_UNINIT (pDrawable->pScreen, - &pPixmapPriv->bitRegion); - REGION_INIT (pDrawable->pScreen, &pPixmapPriv->bitRegion, - NullBox, 0); - pPixmapPriv->allBits = FALSE; - return; - } - - pBox++; - } - } - } -} - -void -xglAddCurrentBitDamage (DrawablePtr pDrawable) -{ - XGL_DRAWABLE_PIXMAP_PRIV (pDrawable); - - if (REGION_NOTEMPTY (pDrawable->pScreen, &pPixmapPriv->bitRegion)) - { - BoxPtr pBitExt; - - pBitExt = REGION_EXTENTS (pDrawable->pScreen, &pPixmapPriv->bitRegion); - - if (pPixmapPriv->damageBox.x1 < pBitExt->x2 && - pPixmapPriv->damageBox.y1 < pBitExt->y2 && - pPixmapPriv->damageBox.x2 > pBitExt->x1 && - pPixmapPriv->damageBox.y2 > pBitExt->y1) - { - REGION_UNINIT (pDrawable->pScreen, &pPixmapPriv->bitRegion); - REGION_INIT (pDrawable->pScreen, &pPixmapPriv->bitRegion, - NullBox, 0); - pPixmapPriv->allBits = FALSE; - } - } - - pPixmapPriv->damageBox = miEmptyBox; -} diff --git a/hw/xgl/xgltile.c b/hw/xgl/xgltile.c deleted file mode 100644 index 25b78c316..000000000 --- a/hw/xgl/xgltile.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" - -static glitz_geometry_format_t tileGeometryFormat = { - { - GLITZ_PRIMITIVE_QUADS, - GLITZ_DATA_TYPE_FLOAT, - sizeof (glitz_float_t) * 4, - GLITZ_VERTEX_ATTRIBUTE_SRC_COORD_MASK, { - GLITZ_DATA_TYPE_FLOAT, - GLITZ_COORDINATE_SIZE_XY, - sizeof (glitz_float_t) * 2, - }, { - 0, 0, 0 - } - } -}; - -xglGeometryPtr -xglTiledBoxGeometry (PixmapPtr pTile, - int tileX, - int tileY, - BoxPtr pBox, - int nBox) -{ - ScreenPtr pScreen = pTile->drawable.pScreen; - glitz_point_fixed_t p1, p2; - xglGeometryPtr pGeometry; - glitz_float_t x1, x2, y1, y2; - int x, y, width, height, i; - int xTile, yTile; - int widthTile, heightTile; - int widthTmp, xTmp, yTmp, xTileTmp; - int tileWidth, tileHeight; - int size = 0; - glitz_float_t *data; - - XGL_PIXMAP_PRIV (pTile); - - tileWidth = pTile->drawable.width; - tileHeight = pTile->drawable.height; - - for (i = 0; i < nBox; i++) - size += - (((pBox[i].x2 - pBox[i].x1) / tileWidth) + 2) * - (((pBox[i].y2 - pBox[i].y1) / tileHeight) + 2); - - pGeometry = xglGetScratchVertexGeometryWithType (pScreen, - GEOMETRY_DATA_TYPE_FLOAT, - 8 * size); - - data = glitz_buffer_map (pGeometry->buffer, - GLITZ_BUFFER_ACCESS_WRITE_ONLY); - - while (nBox--) - { - x = pBox->x1; - y = pBox->y1; - width = pBox->x2 - pBox->x1; - height = pBox->y2 - pBox->y1; - - xTile = MOD (tileX + x, tileWidth); - yTile = MOD (tileY + y, tileHeight); - - yTmp = y; - - while (height) - { - heightTile = MIN (tileHeight - yTile, height); - - xTileTmp = xTile; - widthTmp = width; - xTmp = x; - - while (widthTmp) - { - widthTile = MIN (tileWidth - xTileTmp, widthTmp); - - p1.x = xTileTmp << 16; - p1.y = yTile << 16; - p2.x = (xTileTmp + widthTile) << 16; - p2.y = (yTile + heightTile) << 16; - - glitz_surface_translate_point (pPixmapPriv->surface, &p1, &p1); - glitz_surface_translate_point (pPixmapPriv->surface, &p2, &p2); - - x1 = FIXED_TO_FLOAT (p1.x); - y1 = FIXED_TO_FLOAT (p1.y); - x2 = FIXED_TO_FLOAT (p2.x); - y2 = FIXED_TO_FLOAT (p2.y); - - *data++ = (glitz_float_t) xTmp; - *data++ = (glitz_float_t) yTmp; - *data++ = x1; - *data++ = y1; - - *data++ = (glitz_float_t) (xTmp + widthTile); - *data++ = (glitz_float_t) yTmp; - *data++ = x2; - *data++ = y1; - - *data++ = (glitz_float_t) (xTmp + widthTile); - *data++ = (glitz_float_t) (yTmp + heightTile); - *data++ = x2; - *data++ = y2; - - *data++ = (glitz_float_t) xTmp; - *data++ = (glitz_float_t) (yTmp + heightTile); - *data++ = x1; - *data++ = y2; - - pGeometry->endOffset += sizeof (glitz_float_t) * 16; - - xTileTmp = 0; - xTmp += widthTile; - widthTmp -= widthTile; - } - - yTile = 0; - yTmp += heightTile; - height -= heightTile; - } - - pBox++; - } - - if (glitz_buffer_unmap (pGeometry->buffer)) - return NULL; - - pGeometry->f = tileGeometryFormat; - pGeometry->count = - pGeometry->endOffset / tileGeometryFormat.vertex.bytes_per_vertex; - - pPixmapPriv->pictureMask |= xglPCFillMask; - glitz_surface_set_fill (pPixmapPriv->surface, GLITZ_FILL_TRANSPARENT); - - return pGeometry; -} - -Bool -xglTile (DrawablePtr pDrawable, - glitz_operator_t op, - PixmapPtr pTile, - int tileX, - int tileY, - xglGeometryPtr pGeometry, - int x, - int y, - int width, - int height, - BoxPtr pBox, - int nBox) -{ - xglPixmapPtr pTilePriv; - glitz_surface_t *surface; - int xOff, yOff; - - if (nBox < 1) - return TRUE; - - if (!xglPrepareTarget (pDrawable)) - return FALSE; - - if (!xglSyncSurface (&pTile->drawable)) - return FALSE; - - XGL_GET_DRAWABLE (pDrawable, surface, xOff, yOff); - - pTilePriv = XGL_GET_PIXMAP_PRIV (pTile); - - pTilePriv->pictureMask |= xglPCFilterMask | xglPCTransformMask; - glitz_surface_set_filter (pTilePriv->surface, - GLITZ_FILTER_NEAREST, - NULL, 0); - glitz_surface_set_transform (pTilePriv->surface, NULL); - - if (pTilePriv->acceleratedTile) - { - if (pGeometry) - { - glitz_surface_set_clip_region (surface, xOff, yOff, - (glitz_box_t *) pBox, nBox); - nBox = 0; - } - else - { - pGeometry = xglGetScratchVertexGeometry (pDrawable->pScreen, - 4 * nBox); - GEOMETRY_ADD_BOX (pDrawable->pScreen, pGeometry, pBox, nBox); - } - - GEOMETRY_TRANSLATE (pGeometry, xOff, yOff); - - if (!GEOMETRY_ENABLE (pGeometry, surface)) - return FALSE; - - pTilePriv->pictureMask |= xglPCFillMask; - glitz_surface_set_fill (pTilePriv->surface, GLITZ_FILL_REPEAT); - - glitz_composite (op, - pTilePriv->surface, NULL, surface, - x + tileX, - y + tileY, - 0, 0, - x + xOff, - y + yOff, - width, height); - - glitz_surface_set_clip_region (surface, 0, 0, NULL, 0); - - if (!glitz_surface_get_status (surface)) - return TRUE; - - if (!nBox) - return FALSE; - } - else - { - if (pGeometry) - return FALSE; - } - - pGeometry = xglTiledBoxGeometry (pTile, tileX, tileY, pBox, nBox); - if (!pGeometry) - return FALSE; - - GEOMETRY_TRANSLATE (pGeometry, xOff, yOff); - - if (!GEOMETRY_ENABLE (pGeometry, surface)) - return FALSE; - - glitz_composite (op, - pTilePriv->surface, NULL, surface, - 0, 0, - 0, 0, - x + xOff, - y + yOff, - width, height); - - if (glitz_surface_get_status (surface)) - return FALSE; - - return TRUE; -} diff --git a/hw/xgl/xgltrap.c b/hw/xgl/xgltrap.c deleted file mode 100644 index 6e7a5082c..000000000 --- a/hw/xgl/xgltrap.c +++ /dev/null @@ -1,481 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "gcstruct.h" -#include "damage.h" - -#ifdef RENDER - -#define XGL_TRAP_FALLBACK_PROLOGUE(pPicture, func) \ - xglSyncDamageBoxBits (pPicture->pDrawable); \ - XGL_PICTURE_SCREEN_UNWRAP (func) - -#define XGL_TRAP_FALLBACK_EPILOGUE(pPicture, func, xglfunc) \ - XGL_PICTURE_SCREEN_WRAP (func, xglfunc); \ - xglAddCurrentSurfaceDamage (pPicture->pDrawable) - -/* just a guess */ -#define SMOOTH_TRAPS_ESTIMATE_RECTS(nTrap) (30 * nTrap) - -#define LINE_FIXED_X(l, _y, v) \ - dx = (l)->p2.x - (l)->p1.x; \ - ex = (xFixed_32_32) ((_y) - (l)->p1.y) * dx; \ - dy = (l)->p2.y - (l)->p1.y; \ - (v) = (l)->p1.x + (xFixed) (ex / dy) - -#define LINE_FIXED_X_CEIL(l, _y, v) \ - dx = (l)->p2.x - (l)->p1.x; \ - ex = (xFixed_32_32) ((_y) - (l)->p1.y) * dx; \ - dy = (l)->p2.y - (l)->p1.y; \ - (v) = (l)->p1.x + (xFixed) ((ex + (dy - 1)) / dy) - -static Bool -xglTrapezoidExtents (PicturePtr pDst, - int ntrap, - xTrapezoid *traps, - BoxPtr extents) -{ - Bool x_overlap, overlap = FALSE; - xFixed dx, dy, top, bottom; - xFixed_32_32 ex; - - if (!ntrap) - { - extents->x1 = MAXSHORT; - extents->x2 = MINSHORT; - extents->y1 = MAXSHORT; - extents->y2 = MINSHORT; - - return FALSE; - } - - extents->y1 = xFixedToInt (traps->top); - extents->y2 = xFixedToInt (xFixedCeil (traps->bottom)); - - LINE_FIXED_X (&traps->left, traps->top, top); - LINE_FIXED_X (&traps->left, traps->bottom, bottom); - extents->x1 = xFixedToInt (MIN (top, bottom)); - - LINE_FIXED_X_CEIL (&traps->right, traps->top, top); - LINE_FIXED_X_CEIL (&traps->right, traps->bottom, bottom); - extents->x2 = xFixedToInt (xFixedCeil (MAX (top, bottom))); - - ntrap--; - traps++; - - for (; ntrap; ntrap--, traps++) - { - INT16 x1, y1, x2, y2; - - if (!xTrapezoidValid (traps)) - continue; - - y1 = xFixedToInt (traps->top); - y2 = xFixedToInt (xFixedCeil (traps->bottom)); - - LINE_FIXED_X (&traps->left, traps->top, top); - LINE_FIXED_X (&traps->left, traps->bottom, bottom); - x1 = xFixedToInt (MIN (top, bottom)); - - LINE_FIXED_X_CEIL (&traps->right, traps->top, top); - LINE_FIXED_X_CEIL (&traps->right, traps->bottom, bottom); - x2 = xFixedToInt (xFixedCeil (MAX (top, bottom))); - - x_overlap = FALSE; - if (x1 >= extents->x2) - extents->x2 = x2; - else if (x2 <= extents->x1) - extents->x1 = x1; - else - { - x_overlap = TRUE; - if (x1 < extents->x1) - extents->x1 = x1; - if (x2 > extents->x2) - extents->x2 = x2; - } - - if (y1 >= extents->y2) - extents->y2 = y2; - else if (y2 <= extents->y1) - extents->y1 = y1; - else - { - if (y1 < extents->y1) - extents->y1 = y1; - if (y2 > extents->y2) - extents->y2 = y2; - - if (x_overlap) - overlap = TRUE; - } - } - - xglPictureClipExtents (pDst, extents); - - return overlap; -} - -void -xglTrapezoids (CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, - int nTrap, - xTrapezoid *traps) -{ - ScreenPtr pScreen = pDst->pDrawable->pScreen; - PicturePtr pMask = NULL, pSrcPicture, pDstPicture; - PicturePtr pMaskPicture = NULL; - xglGeometryPtr pGeometry = NULL; - unsigned int polyEdge = pDst->polyEdge; - INT16 xDst, yDst; - INT16 xOff, yOff; - BoxRec extents; - Bool overlap; - Bool target; - - XGL_SCREEN_PRIV (pScreen); - - xDst = traps[0].left.p1.x >> 16; - yDst = traps[0].left.p1.y >> 16; - - overlap = xglTrapezoidExtents (pDst, nTrap, traps, &extents); - if (extents.y1 >= extents.y2 || extents.x1 >= extents.x2) - return; - - target = xglPrepareTarget (pDst->pDrawable); - - if (nTrap > 1 && op != PictOpAdd && maskFormat && - (!target || overlap || op != PictOpOver)) - { - PixmapPtr pPixmap; - GCPtr pGC; - xRectangle rect; - int error; - int area; - - if (!pScreenPriv->pSolidAlpha) - { - xglCreateSolidAlphaPicture (pScreen); - if (!pScreenPriv->pSolidAlpha) - return; - } - - rect.x = 0; - rect.y = 0; - rect.width = extents.x2 - extents.x1; - rect.height = extents.y2 - extents.y1; - - pPixmap = (*pScreen->CreatePixmap) (pScreen, - rect.width, rect.height, - maskFormat->depth, - CREATE_PIXMAP_USAGE_SCRATCH); - if (!pPixmap) - return; - - pMask = CreatePicture (0, &pPixmap->drawable, maskFormat, - 0, 0, serverClient, &error); - if (!pMask) - { - (*pScreen->DestroyPixmap) (pPixmap); - return; - } - - if (!target) - { - /* make sure we don't do accelerated drawing to mask */ - xglSetPixmapVisual (pPixmap, NULL); - } - - area = rect.width * rect.height; - if ((SMOOTH_TRAPS_ESTIMATE_RECTS (nTrap) * 4) > area) - XGL_GET_PIXMAP_PRIV (pPixmap)->target = xglPixmapTargetNo; - - ValidatePicture (pMask); - pGC = GetScratchGC (pPixmap->drawable.depth, pScreen); - ValidateGC (&pPixmap->drawable, pGC); - (*pGC->ops->PolyFillRect) (&pPixmap->drawable, pGC, 1, &rect); - FreeScratchGC (pGC); - - (*pScreen->DestroyPixmap) (pPixmap); - - target = xglPrepareTarget (pMask->pDrawable); - - xOff = -extents.x1; - yOff = -extents.y1; - pSrcPicture = pScreenPriv->pSolidAlpha; - pDstPicture = pMask; - } - else - { - if (maskFormat) - { - if (maskFormat->depth == 1) - polyEdge = PolyEdgeSharp; - else - polyEdge = PolyEdgeSmooth; - } - - xOff = 0; - yOff = 0; - pSrcPicture = pSrc; - pDstPicture = pDst; - } - - if (target) - { - if (maskFormat || polyEdge == PolyEdgeSmooth) - { - glitz_vertex_format_t *format; - glitz_surface_t *mask; - xTrapezoid *pTrap = traps; - int nAddedTrap, n = nTrap; - int offset = 0; - int size = SMOOTH_TRAPS_ESTIMATE_RECTS (n); - - pMaskPicture = pScreenPriv->trapInfo.pMask; - format = &pScreenPriv->trapInfo.format.vertex; - mask = pMaskPicture->pSourcePict->source.devPrivate.ptr; - - size *= format->bytes_per_vertex; - pGeometry = xglGetScratchGeometryWithSize (pScreen, size); - - while (n) - { - if (pGeometry->size < size) - GEOMETRY_RESIZE (pScreen, pGeometry, size); - - if (!pGeometry->buffer) - { - if (pMask) - FreePicture (pMask, 0); - - return; - } - - offset += - glitz_add_trapezoids (pGeometry->buffer, - offset, size - offset, format->type, - mask, (glitz_trapezoid_t *) pTrap, n, - &nAddedTrap); - - n -= nAddedTrap; - pTrap += nAddedTrap; - size *= 2; - } - - pGeometry->f = pScreenPriv->trapInfo.format; - pGeometry->count = offset / format->bytes_per_vertex; - } - else - { - pGeometry = - xglGetScratchVertexGeometryWithType (pScreen, - GEOMETRY_DATA_TYPE_FLOAT, - 4 * nTrap); - if (!pGeometry->buffer) - { - if (pMask) - FreePicture (pMask, 0); - - return; - } - - GEOMETRY_ADD_TRAPEZOID (pScreen, pGeometry, traps, nTrap); - } - - GEOMETRY_TRANSLATE (pGeometry, - pDstPicture->pDrawable->x + xOff, - pDstPicture->pDrawable->y + yOff); - } - - if (pGeometry && - xglCompositeGeneral (pMask ? PictOpAdd : op, - pSrcPicture, - pMaskPicture, - pDstPicture, - pGeometry, - extents.x1 + xOff + xSrc - xDst, - extents.y1 + yOff + ySrc - yDst, - 0, 0, - pDstPicture->pDrawable->x + extents.x1 + xOff, - pDstPicture->pDrawable->y + extents.y1 + yOff, - extents.x2 - extents.x1, - extents.y2 - extents.y1)) - { - /* no intermediate mask? we need to register damage from here as - CompositePicture will never be called. */ - if (!pMask) - { - RegionRec region; - - REGION_INIT (pScreen, ®ion, &extents, 1); - REGION_TRANSLATE (pScreen, ®ion, - pDst->pDrawable->x, pDst->pDrawable->y); - - DamageDamageRegion (pDst->pDrawable, ®ion); - - REGION_UNINIT (pScreen, ®ion); - } - - xglAddCurrentBitDamage (pDstPicture->pDrawable); - } - else - { - XGL_DRAWABLE_PIXMAP_PRIV (pDstPicture->pDrawable); - - pPixmapPriv->damageBox.x1 = extents.x1 + xOff; - pPixmapPriv->damageBox.y1 = extents.y1 + yOff; - pPixmapPriv->damageBox.x2 = extents.x2 + xOff; - pPixmapPriv->damageBox.y2 = extents.y2 + yOff; - - xglSyncDamageBoxBits (pDstPicture->pDrawable); - - if (pMask || (polyEdge == PolyEdgeSmooth && - op == PictOpAdd && miIsSolidAlpha (pSrc))) - { - PictureScreenPtr ps = GetPictureScreen (pScreen); - - for (; nTrap; nTrap--, traps++) - (*ps->RasterizeTrapezoid) (pDstPicture, traps, xOff, yOff); - - xglAddCurrentSurfaceDamage (pDstPicture->pDrawable); - } - else - miTrapezoids (op, pSrc, pDstPicture, maskFormat, - xSrc, ySrc, nTrap, traps); - } - - if (pMask) - { - CompositePicture (op, pSrc, pMask, pDst, - extents.x1 + xSrc - xDst, - extents.y1 + ySrc - yDst, - 0, 0, - extents.x1, extents.y1, - extents.x2 - extents.x1, - extents.y2 - extents.y1); - - FreePicture (pMask, 0); - } -} - -void -xglAddTraps (PicturePtr pDst, - INT16 xOff, - INT16 yOff, - int nTrap, - xTrap *traps) -{ - PictureScreenPtr pPictureScreen; - ScreenPtr pScreen = pDst->pDrawable->pScreen; - - XGL_SCREEN_PRIV (pScreen); - XGL_DRAWABLE_PIXMAP_PRIV (pDst->pDrawable); - - if (!pScreenPriv->pSolidAlpha) - { - xglCreateSolidAlphaPicture (pScreen); - if (!pScreenPriv->pSolidAlpha) - return; - } - - pPixmapPriv->damageBox.x1 = 0; - pPixmapPriv->damageBox.y1 = 0; - pPixmapPriv->damageBox.x2 = pDst->pDrawable->width; - pPixmapPriv->damageBox.y2 = pDst->pDrawable->height; - - if (xglPrepareTarget (pDst->pDrawable)) - { - PicturePtr pMask; - glitz_vertex_format_t *format; - glitz_surface_t *mask; - xglGeometryPtr pGeometry; - xTrap *pTrap = traps; - int nAddedTrap, n = nTrap; - int offset = 0; - int size = SMOOTH_TRAPS_ESTIMATE_RECTS (n); - - pMask = pScreenPriv->trapInfo.pMask; - format = &pScreenPriv->trapInfo.format.vertex; - mask = pMask->pSourcePict->source.devPrivate.ptr; - - size *= format->bytes_per_vertex; - pGeometry = xglGetScratchGeometryWithSize (pScreen, size); - - while (n) - { - if (pGeometry->size < size) - GEOMETRY_RESIZE (pScreen, pGeometry, size); - - if (!pGeometry->buffer) - return; - - offset += - glitz_add_traps (pGeometry->buffer, - offset, size - offset, format->type, mask, - (glitz_trap_t *) pTrap, n, - &nAddedTrap); - - n -= nAddedTrap; - pTrap += nAddedTrap; - size *= 2; - } - - pGeometry->f = pScreenPriv->trapInfo.format; - pGeometry->count = offset / format->bytes_per_vertex; - - GEOMETRY_TRANSLATE (pGeometry, - pDst->pDrawable->x + xOff, - pDst->pDrawable->y + yOff); - - if (xglCompositeGeneral (PictOpAdd, - pScreenPriv->pSolidAlpha, - pMask, - pDst, - pGeometry, - 0, 0, - 0, 0, - pDst->pDrawable->x, pDst->pDrawable->y, - pDst->pDrawable->width, - pDst->pDrawable->height)) - { - xglAddCurrentBitDamage (pDst->pDrawable); - return; - } - } - - pPictureScreen = GetPictureScreen (pScreen); - - XGL_TRAP_FALLBACK_PROLOGUE (pDst, AddTraps); - (*pPictureScreen->AddTraps) (pDst, xOff, yOff, nTrap, traps); - XGL_TRAP_FALLBACK_EPILOGUE (pDst, AddTraps, xglAddTraps); -} - -#endif diff --git a/hw/xgl/xglwindow.c b/hw/xgl/xglwindow.c deleted file mode 100644 index 393f01df1..000000000 --- a/hw/xgl/xglwindow.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright © 2004 David Reveman - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * David Reveman not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * David Reveman makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Author: David Reveman <davidr@novell.com> - */ - -#include "xgl.h" -#include "fb.h" - -#define XGL_WINDOW_FALLBACK_PROLOGUE(pWin, func) \ - if (!xglMapPixmapBits (XGL_GET_DRAWABLE_PIXMAP (&pWin->drawable))) \ - FatalError (XGL_SW_FAILURE_STRING); \ - XGL_SCREEN_UNWRAP (func) - -#define XGL_WINDOW_FALLBACK_EPILOGUE(pWin, pRegion, func, xglfunc) \ - XGL_SCREEN_WRAP (func, xglfunc); \ - xglAddSurfaceDamage (&pWin->drawable, pRegion) - -Bool -xglCreateWindow (WindowPtr pWin) -{ - ScreenPtr pScreen = pWin->drawable.pScreen; - Bool ret; - - XGL_SCREEN_PRIV (pScreen); - XGL_WINDOW_PRIV (pWin); - - XGL_SCREEN_UNWRAP (CreateWindow); - ret = (*pScreen->CreateWindow) (pWin); - XGL_SCREEN_WRAP (CreateWindow, xglCreateWindow); - - pWinPriv->pPixmap = pWin->drawable.pScreen->devPrivate; - - return ret; -} - -Bool -xglDestroyWindow (WindowPtr pWin) -{ - ScreenPtr pScreen = pWin->drawable.pScreen; - Bool ret; - - XGL_SCREEN_PRIV (pScreen); - - XGL_SCREEN_UNWRAP (DestroyWindow); - ret = (*pScreen->DestroyWindow) (pWin); - XGL_SCREEN_WRAP (DestroyWindow, xglDestroyWindow); - - return ret; -} - -Bool -xglChangeWindowAttributes (WindowPtr pWin, - unsigned long mask) -{ - ScreenPtr pScreen = pWin->drawable.pScreen; - PixmapPtr pPixmap; - Bool ret; - - XGL_SCREEN_PRIV (pScreen); - - if (mask & CWBackPixmap) - { - if (pWin->backgroundState == BackgroundPixmap) - { - pPixmap = pWin->background.pixmap; - - if (FbEvenTile (pPixmap->drawable.width * - pPixmap->drawable.bitsPerPixel)) - xglSyncBits (&pPixmap->drawable, NULL); - } - } - - if (mask & CWBorderPixmap) - { - if (pWin->borderIsPixel == FALSE) - { - pPixmap = pWin->border.pixmap; - - if (FbEvenTile (pPixmap->drawable.width * - pPixmap->drawable.bitsPerPixel)) - xglSyncBits (&pPixmap->drawable, NULL); - } - } - - XGL_SCREEN_UNWRAP (ChangeWindowAttributes); - ret = (*pScreen->ChangeWindowAttributes) (pWin, mask); - XGL_SCREEN_WRAP (ChangeWindowAttributes, xglChangeWindowAttributes); - - return ret; -} - -void -xglCopyWindow (WindowPtr pWin, - DDXPointRec ptOldOrg, - RegionPtr prgnSrc) -{ - PixmapPtr pPixmap; - RegionRec rgnDst; - int dx, dy; - BoxPtr pExtent = REGION_EXTENTS (pWin->drawable.pScreen, prgnSrc); - BoxRec box; - - pPixmap = XGL_GET_WINDOW_PIXMAP (pWin); - - box.x1 = pExtent->x1; - box.y1 = pExtent->y1; - box.x2 = pExtent->x2; - box.y2 = pExtent->y2; - - dx = ptOldOrg.x - pWin->drawable.x; - dy = ptOldOrg.y - pWin->drawable.y; - - REGION_TRANSLATE (pWin->drawable.pScreen, prgnSrc, -dx, -dy); - REGION_INIT (pWin->drawable.pScreen, &rgnDst, NullBox, 0); - REGION_INTERSECT (pWin->drawable.pScreen, - &rgnDst, &pWin->borderClip, prgnSrc); - - fbCopyRegion (&pWin->drawable, &pWin->drawable, - 0, &rgnDst, dx, dy, xglCopyProc, 0, (void *) &box); - - REGION_UNINIT (pWin->drawable.pScreen, &rgnDst); -} - -PixmapPtr -xglGetWindowPixmap (WindowPtr pWin) -{ - return XGL_GET_WINDOW_PIXMAP (pWin); -} - -void -xglSetWindowPixmap (WindowPtr pWin, - PixmapPtr pPixmap) -{ - ScreenPtr pScreen = pWin->drawable.pScreen; - - XGL_SCREEN_PRIV (pScreen); - - XGL_SCREEN_UNWRAP (SetWindowPixmap); - (*pScreen->SetWindowPixmap) (pWin, pPixmap); - XGL_SCREEN_WRAP (SetWindowPixmap, xglSetWindowPixmap); - - XGL_GET_WINDOW_PRIV (pWin)->pPixmap = pPixmap; - - if (pPixmap != pScreenPriv->pScreenPixmap) - xglEnablePixmapAccel (pPixmap, &pScreenPriv->accel.window); -} diff --git a/hw/xgl/xglxv.c b/hw/xgl/xglxv.c deleted file mode 100644 index 353f9b3bb..000000000 --- a/hw/xgl/xglxv.c +++ /dev/null @@ -1,634 +0,0 @@ -/* - * Copyright © 2005 Novell, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Novell, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Novell, Inc. makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN - * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Authors: David Reveman <davidr@novell.com> - * Matthias Hopf <mhopf@suse.de> - */ - -#include "xgl.h" - -#ifdef XV - -#include "xvdix.h" -#include "gcstruct.h" -#include "dixstruct.h" - -#include <X11/extensions/Xv.h> -#include <X11/extensions/Xvproto.h> - -static DevPrivateKey xglXvScreenKey; -static unsigned long portResource = 0; - -#define XGL_GET_XV_SCREEN(pScreen) ((XvScreenPtr) \ - dixLookupPrivate(&(pScreen)->devPrivates, xglXvScreenKey)) - -#define XGL_XV_SCREEN(pScreen) \ - XvScreenPtr pXvScreen = XGL_GET_XV_SCREEN (pScreen) - -#define XGL_GET_XV_SCREEN_PRIV(pScreen) \ - ((xglXvScreenPtr) (GET_XV_SCREEN (pScreen)->devPriv.ptr)) - -#define XGL_XV_SCREEN_PRIV(pScreen) \ - xglXvScreenPtr pXvScreenPriv = XGL_GET_XV_SCREEN_PRIV (pScreen) - -#define XGL_GET_XV_PORT_PRIV(pPort) \ - ((xglXvPortPtr) ((pPort)->devPriv.ptr)) - -#define XGL_XV_PORT_PRIV(pPort) \ - xglXvPortPtr pPortPriv = XGL_GET_XV_PORT_PRIV (pPort) - -#define XGL_XV_NUM_PORTS 32 - -#define XGL_XV_IMAGE_MAX_WIDTH 2048 -#define XGL_XV_IMAGE_MAX_HEIGHT 2048 - -static XvImageRec xvImages[] = { - { - GLITZ_FOURCC_YUY2, XvYUV, BITMAP_BIT_ORDER, - { - 'Y','U','Y','2', - 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, - 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 - }, - 16, XvPacked, 1, - 0, 0, 0, 0, - 8, 8, 8, 1, 2, 2, 1, 1, 1, - { - 'Y', 'U', 'Y', 'V', - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - XvTopToBottom - }, { - GLITZ_FOURCC_YV12, XvYUV, BITMAP_BIT_ORDER, - { - 'Y', 'V', '1', '2', - 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, - 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 - }, - 12, XvPlanar, 3, - 0, 0, 0, 0, - 8, 8, 8, 1, 2, 2, 1, 2, 2, - { - 'Y', 'V', 'U', 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - XvTopToBottom - }, { - GLITZ_FOURCC_RGB, XvRGB, BITMAP_BIT_ORDER, - { - 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, - 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 - }, - 32, XvPacked, 1, - 24, 0xff0000, 0xff00, 0xff, - 0, 0, 0, 0, 0, 0, 0, 0, 0, - { - 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - XvTopToBottom - } -}; - -static struct _xglXvFormat { - CARD32 format; - glitz_fourcc_t fourcc; - xglPixelFormatRec pixel; -} xglXvFormat[XGL_XV_FORMAT_NUM] = { - { - PICT_yuy2, - GLITZ_FOURCC_YUY2, - { - 16, 6, - { - 16, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - } - } - }, { - PICT_yv12, - GLITZ_FOURCC_YV12, - { - 12, 4, - { - 12, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - } - } - }, { - PICT_x8r8g8b8, - GLITZ_FOURCC_RGB, - { - 24, 8, - { - 32, - 0x00000000, - 0x00ff0000, - 0x0000ff00, - 0x000000ff, - } - } - } -}; - -static int -xglXvQueryAdaptors (ScreenPtr pScreen, - XvAdaptorPtr *pAdaptors, - int *nAdaptors) -{ - XGL_XV_SCREEN (pScreen); - - *nAdaptors = pXvScreen->nAdaptors; - *pAdaptors = pXvScreen->pAdaptors; - - return Success; -} - -static int -xglXvAllocatePort (unsigned long port, - XvPortPtr pPort, - XvPortPtr *ppPort) -{ - *ppPort = pPort; - - return Success; -} - -static int -xglXvFreePort (XvPortPtr pPort) -{ - XGL_XV_PORT_PRIV (pPort); - - if (pPortPriv->pDst) - { - FreePicture ((pointer) pPortPriv->pDst, 0); - pPortPriv->pDst = (PicturePtr) 0; - } - - if (pPortPriv->pSrc) - { - FreePicture ((pointer) pPortPriv->pSrc, 0); - pPortPriv->pSrc = (PicturePtr) 0; - } - - if (pPortPriv->pPixmap) - { - ScreenPtr pScreen; - - pScreen = pPortPriv->pPixmap->drawable.pScreen; - (*pScreen->DestroyPixmap) (pPortPriv->pPixmap); - pPortPriv->pPixmap = (PixmapPtr) 0; - } - - return Success; -} - -static int -xglXvQueryBestSize (ClientPtr client, - XvPortPtr pPort, - CARD8 motion, - CARD16 srcWidth, - CARD16 srcHeight, - CARD16 dstWidth, - CARD16 dstHeight, - unsigned int *pWidth, - unsigned int *pHeight) -{ - *pWidth = dstWidth; - *pHeight = dstHeight; - - return Success; -} - -static int -xglXvStopVideo (ClientPtr client, - XvPortPtr pPort, - DrawablePtr pDrawable) -{ - xglXvFreePort (pPort); - - return Success; -} - -static int -xglXvPutImage (ClientPtr client, - DrawablePtr pDrawable, - XvPortPtr pPort, - GCPtr pGC, - INT16 srcX, - INT16 srcY, - CARD16 srcWidth, - CARD16 srcHeight, - INT16 dstX, - INT16 dstY, - CARD16 dstWidth, - CARD16 dstHeight, - XvImagePtr pImage, - unsigned char *data, - Bool sync, - CARD16 width, - CARD16 height) -{ - ScreenPtr pScreen = pDrawable->pScreen; - PictTransform transform; - int depth, bpp; - CARD32 format; - - XGL_SCREEN_PRIV (pScreen); - XGL_XV_PORT_PRIV (pPort); - XGL_DRAWABLE_PIXMAP (pDrawable); - XGL_PIXMAP_PRIV (pPixmap); - - switch (pImage->id) { - case GLITZ_FOURCC_YUY2: - bpp = depth = 16; - format = PICT_yuy2; - break; - case GLITZ_FOURCC_YV12: - depth = bpp = 12; - format = PICT_yv12; - break; - case GLITZ_FOURCC_RGB: - depth = 24; - bpp = 32; - format = PICT_x8r8g8b8; - break; - default: - return BadImplementation; - } - - pPort->pDraw = pDrawable; - - if (!pPortPriv->pPixmap) - { - pPortPriv->pPixmap = (*pScreen->CreatePixmap) (pScreen, 0, 0, depth, 0); - if (!pPortPriv->pPixmap) - return BadAlloc; - } - - (*pScreen->ModifyPixmapHeader) (pPortPriv->pPixmap, - srcWidth, srcHeight, - depth, bpp, -1, (pointer) data); - - XGL_GET_PIXMAP_PRIV (pPortPriv->pPixmap)->stride = -srcWidth; - - pPortPriv->pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - - if (!pPortPriv->pSrc || pPortPriv->pSrc->format != format) - { - PictFormatPtr pFormat; - int error; - static XID value = RepeatPad; - - pFormat = PictureMatchFormat (pScreen, depth, format); - if (!pFormat) - return BadImplementation; - - if (pPortPriv->pSrc) - FreePicture ((pointer) pPortPriv->pSrc, 0); - - pPortPriv->pSrc = CreatePicture (0, &pPortPriv->pPixmap->drawable, - pFormat, CPRepeat, &value, - serverClient, &error); - if (!pPortPriv->pSrc) - { - xglXvFreePort (pPort); - return error; - } - - SetPictureFilter (pPortPriv->pSrc, - FilterBilinear, strlen (FilterBilinear), - 0, 0); - } - - if (!pPortPriv->pDst || pPortPriv->pDst->pDrawable != pDrawable) - { - PictFormatPtr pFormat = 0; - int i, error; - - for (i = 0; i < pScreen->numVisuals; i++) - { - if (pScreen->visuals[i].nplanes == pDrawable->depth) - { - pFormat = PictureMatchVisual (pScreen, pDrawable->depth, - &pScreen->visuals[i]); - break; - } - } - - if (!pFormat) - return BadImplementation; - - if (pPortPriv->pDst) - FreePicture ((pointer) pPortPriv->pDst, 0); - - pPortPriv->pDst = CreatePicture (0, pDrawable, - pFormat, 0, 0, serverClient, - &error); - if (!pPortPriv->pDst) - { - xglXvFreePort (pPort); - return error; - } - } - - transform.matrix[0][0] = ((srcWidth << 16) + (dstWidth >> 1)) - / dstWidth; - transform.matrix[0][1] = 0; - transform.matrix[0][2] = 0; - - /* flip Y */ - transform.matrix[1][0] = 0; - transform.matrix[1][1] = -((srcHeight << 16) + (dstHeight >> 1)) - / dstHeight; - transform.matrix[1][2] = (srcHeight << 16); - - transform.matrix[2][0] = 0; - transform.matrix[2][1] = 0; - transform.matrix[2][2] = 1 << 16; - - SetPictureTransform (pPortPriv->pSrc, &transform); - - if (pPixmap != pScreenPriv->pScreenPixmap && !pPixmapPriv->target) - xglEnablePixmapAccel (pPixmap, &pScreenPriv->accel.xv); - - CompositePicture (PictOpSrc, - pPortPriv->pSrc, - (PicturePtr) 0, - pPortPriv->pDst, - srcX, srcY, - 0, 0, - dstX, dstY, - dstWidth, dstHeight); - - return Success; -} - -static int -xglXvQueryImageAttributes (ClientPtr client, - XvPortPtr pPort, - XvImagePtr pImage, - CARD16 *width, - CARD16 *height, - int *pitches, - int *offsets) -{ - if (*width > XGL_XV_IMAGE_MAX_WIDTH) - *width = XGL_XV_IMAGE_MAX_WIDTH; - - if (*height > XGL_XV_IMAGE_MAX_HEIGHT) - *height = XGL_XV_IMAGE_MAX_HEIGHT; - - *width = (*width + 7) & ~7; - - switch (pImage->id) { - case GLITZ_FOURCC_YUY2: - if (offsets) - offsets[0] = 0; - - if (pitches) - pitches[0] = *width * 2; - - return *width * *height * 2; - case GLITZ_FOURCC_YV12: - *height = (*height + 1) & ~1; - - if (offsets) - { - offsets[0] = 0; - offsets[1] = *width * *height; - offsets[2] = *width * *height + (*width >> 1) * (*height >> 1); - } - - if (pitches) - { - pitches[0] = *width; - pitches[1] = pitches[2] = *width >> 1; - } - - return *width * *height + (*width >> 1) * *height; - case GLITZ_FOURCC_RGB: - if (offsets) - offsets[0] = 0; - - if (pitches) - pitches[0] = *width * 4; - - return *width * *height * 4; - default: - return 0; - } -} - -static void -xglXvFreeAdaptor (XvAdaptorPtr pAdaptor) -{ - xfree (pAdaptor->pEncodings); - xfree (pAdaptor->pFormats); - - if (pAdaptor->pPorts) - xfree (pAdaptor->pPorts); -} - -static Bool -xglXvInitAdaptors (ScreenPtr pScreen) -{ - XvAdaptorPtr pAdaptor; - xglXvPortPtr pPortPriv; - XvPortPtr pPort; - XvFormatPtr pFormat; - XvEncodingPtr pEncoding; - int i; - - XGL_XV_SCREEN (pScreen); - - pXvScreen->nAdaptors = 0; - pXvScreen->pAdaptors = NULL; - - pAdaptor = xcalloc (1, sizeof (XvAdaptorRec)); - if (!pAdaptor) - return FALSE; - - pAdaptor->type = XvInputMask | XvImageMask; - pAdaptor->pScreen = pScreen; - - pAdaptor->ddAllocatePort = xglXvAllocatePort; - pAdaptor->ddFreePort = xglXvFreePort; - pAdaptor->ddStopVideo = xglXvStopVideo; - pAdaptor->ddPutImage = xglXvPutImage; - pAdaptor->ddQueryBestSize = xglXvQueryBestSize; - pAdaptor->ddQueryImageAttributes = xglXvQueryImageAttributes; - - pAdaptor->name = "Xgl Generic Texture Video"; - - pEncoding = xcalloc (1, sizeof (XvEncodingRec)); - if (!pEncoding) - return FALSE; - - pEncoding->id = 0; - pEncoding->pScreen = pScreen; - pEncoding->name = "XV_IMAGE"; - - pEncoding->width = XGL_XV_IMAGE_MAX_WIDTH; - pEncoding->height = XGL_XV_IMAGE_MAX_HEIGHT; - - pEncoding->rate.numerator = 1; - pEncoding->rate.denominator = 1; - - pAdaptor->nEncodings = 1; - pAdaptor->pEncodings = pEncoding; - - pAdaptor->nImages = sizeof (xvImages) / sizeof (XvImageRec); - pAdaptor->pImages = xvImages; - - /* TODO: Currently no attributes */ - pAdaptor->nAttributes = 0; - pAdaptor->pAttributes = 0; - - pFormat = xcalloc (pScreen->numVisuals, sizeof (XvFormatRec)); - if (!pFormat) - return FALSE; - - for (i = 0; i < pScreen->numVisuals; i++) - { - pFormat[i].depth = pScreen->visuals[i].nplanes; - pFormat[i].visual = pScreen->visuals[i].vid; - } - - /* All visuals allowed */ - pAdaptor->nFormats = pScreen->numVisuals; - pAdaptor->pFormats = pFormat; - - pPort = xcalloc (XGL_XV_NUM_PORTS, - sizeof (XvPortRec) + sizeof (xglXvPortRec)); - pPortPriv = (xglXvPortPtr) (pPort + XGL_XV_NUM_PORTS); - if (!pPort) - return FALSE; - - for (i = 0; i < XGL_XV_NUM_PORTS; i++) - { - pPort[i].id = FakeClientID (0); - if (!pPort[i].id) - return FALSE; - - if (!AddResource (pPort[i].id, portResource, &pPort[i])) - return FALSE; - - pPort[i].pAdaptor = pAdaptor; - pPort[i].pNotify = (XvPortNotifyPtr) 0; - pPort[i].pDraw = (DrawablePtr) 0; - pPort[i].client = (ClientPtr) 0; - pPort[i].grab.client = (ClientPtr) 0; - pPort[i].time = currentTime; - pPort[i].devPriv.ptr = pPortPriv + i; - } - - pAdaptor->nPorts = XGL_XV_NUM_PORTS; - pAdaptor->pPorts = pPort; - pAdaptor->base_id = pPort->id; - - pXvScreen->pAdaptors = pAdaptor; - pXvScreen->nAdaptors = 1; - - return TRUE; -} - -static Bool -xglXvCloseScreen (int i, ScreenPtr pScreen) -{ - int j; - - XGL_XV_SCREEN (pScreen); - - for (j = 0; j < pXvScreen->nAdaptors; j++) - xglXvFreeAdaptor (&pXvScreen->pAdaptors[j]); - - if (pXvScreen->pAdaptors) - xfree (pXvScreen->pAdaptors); - - return TRUE; -} - -Bool -xglXvScreenInit (ScreenPtr pScreen) -{ - XvScreenPtr pXvScreen; - xglVisualPtr v; - int i, status, vid = 0; - - XGL_SCREEN_PRIV (pScreen); - - status = XvScreenInit (pScreen); - if (status != Success) - return FALSE; - - xglXvScreenKey = XvGetScreenKey (); - portResource = XvGetRTPort (); - - pXvScreen = XGL_GET_XV_SCREEN (pScreen); - - /* Anyone initializing the Xv layer must provide these two. - The Xv di layer calls them without even checking if they exist! */ - pXvScreen->ddCloseScreen = xglXvCloseScreen; - pXvScreen->ddQueryAdaptors = xglXvQueryAdaptors; - - pXvScreen->devPriv.ptr = (pointer) 0; - - if (!xglXvInitAdaptors (pScreen)) - return FALSE; - - for (v = pScreenPriv->pVisual; v; v = v->next) - { - if (v->vid > vid) - vid = v->vid; - } - - memset (pScreenPriv->pXvVisual, 0, sizeof (pScreenPriv->pXvVisual)); - - for (i = 0; i < XGL_XV_FORMAT_NUM; i++) - { - glitz_format_t templ; - - templ.color.fourcc = xglXvFormat[i].fourcc; - - pScreenPriv->pXvVisual[i].vid = ++vid; - pScreenPriv->pXvVisual[i].pPixel = &xglXvFormat[i].pixel; - pScreenPriv->pXvVisual[i].format.surface = - glitz_find_format (pScreenPriv->drawable, - GLITZ_FORMAT_FOURCC_MASK, - &templ, 0); - } - - return TRUE; -} - -#endif diff --git a/include/xgl-config.h.in b/include/xgl-config.h.in deleted file mode 100644 index 877d179c4..000000000 --- a/include/xgl-config.h.in +++ /dev/null @@ -1,14 +0,0 @@ -/* - * xgl-config.h.in - * - * This file has defines used in the xgl ddx - * - */ - -#include <dix-config.h> - -/* Use loadable XGL modules. */ -#undef XGL_MODULAR - -/* Default XGL module search path */ -#undef XGL_MODULE_PATH |