Revert changes outside of glamor from the glamor branch.

We want to merge the external glamor code to the xserver, with the
internal history retained.  However, we don't want a bunch of
non-building changes along the way, so remove all the build system and
support code outside of glamor for now.
This commit is contained in:
Eric Anholt 2013-12-18 11:16:15 -08:00
parent 284328a6be
commit 7982eca622
20 changed files with 15 additions and 2559 deletions

View File

@ -17,10 +17,6 @@ if RECORD
RECORD_DIR=record RECORD_DIR=record
endif endif
if GLAMOR
GLAMOR_DIR=glamor
endif
SUBDIRS = \ SUBDIRS = \
doc \ doc \
man \ man \
@ -42,7 +38,6 @@ SUBDIRS = \
$(COMPOSITE_DIR) \ $(COMPOSITE_DIR) \
$(GLX_DIR) \ $(GLX_DIR) \
exa \ exa \
$(GLAMOR_DIR) \
config \ config \
hw \ hw \
test test
@ -93,7 +88,6 @@ DIST_SUBDIRS = \
composite \ composite \
glx \ glx \
exa \ exa \
glamor \
config \ config \
hw \ hw \
test test

39
README
View File

@ -1,41 +1,4 @@
Glamor setup X Server
1. Prerequirement.
Please install makedepend and libudev-devel firstly.
2. Build xserver-glamor.
Then do the following steps one by one.
2.1. get latest glamor at github.
2.2 Setup xorg development environment, use xserver-glamor to
replace the official xserver.
Here is the link of how to setup xorg development environment:
http://www.x.org/wiki/ModularDevelopersGuide
For most of the packages, we prefer latest git version. Especially
for the mesa package.
When build mesa, use the following parameters: (assume you want to
install the experimental xorg to /opt/gfx-test)
#mesa/./autogen.sh --prefix=/opt/gfx-test --with-egl-platforms=drm --disable-gallium --disable-gallium-egl
build xserver-glamor as below:
#xserver-glamor/./autogen.sh --disable-glx --enable-kdrive --enable-xephyr
Once you finish all the building process, you can have a try as below:
xserver-glamor#startx -- `pwd`/hw/xfree86/Xorg If you can find the
following messages on the console, then everything should work correctly.
Mesa: Initializing x86-64 optimizations
3. Restrictions:
Currently, glamor doesn't support glx extension, will be fixed in the future.
Glamor setup done.
X Server
The X server accepts requests from client applications to create windows, The X server accepts requests from client applications to create windows,
which are (normally rectangular) "virtual screens" that the client program which are (normally rectangular) "virtual screens" that the client program

View File

@ -646,8 +646,6 @@ AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest serv
AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=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(standalone-xpbproxy, AS_HELP_STRING([--enable-standalone-xpbproxy], [Build a standalone xpbproxy (in addition to the one integrated into Xquartz as a separate thread) (default: no)]), [STANDALONE_XPBPROXY=$enableval], [STANDALONE_XPBPROXY=no]) AC_ARG_ENABLE(standalone-xpbproxy, AS_HELP_STRING([--enable-standalone-xpbproxy], [Build a standalone xpbproxy (in addition to the one integrated into Xquartz as a separate thread) (default: no)]), [STANDALONE_XPBPROXY=$enableval], [STANDALONE_XPBPROXY=no])
AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto]) AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto])
AC_ARG_ENABLE(glamor, AS_HELP_STRING([--enable-glamor], [Build glamor dix module (default: no)]), [GLAMOR=$enableval], [GLAMOR=no])
AC_ARG_ENABLE(glamor-ddx, AS_HELP_STRING([--enable-glamor-ddx], [Build glamor ddx (default: no)]), [GLAMOR_DDX=$enableval], [GLAMOR_DDX=no])
dnl kdrive and its subsystems dnl kdrive and its subsystems
AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no]) AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no])
AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto]) AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto])
@ -657,8 +655,6 @@ dnl kdrive options
AC_ARG_ENABLE(kdrive-kbd, AS_HELP_STRING([--enable-kdrive-kbd], [Build kbd driver for kdrive (default: auto)]), [KDRIVE_KBD=$enableval], [KDRIVE_KBD=auto]) AC_ARG_ENABLE(kdrive-kbd, AS_HELP_STRING([--enable-kdrive-kbd], [Build kbd driver for kdrive (default: auto)]), [KDRIVE_KBD=$enableval], [KDRIVE_KBD=auto])
AC_ARG_ENABLE(kdrive-mouse, AC_HELP_STRING([--enable-kdrive-mouse], [Build mouse driver for kdrive (default: auto)]), [KDRIVE_MOUSE=$enableval], [KDRIVE_MOUSE=auto]) AC_ARG_ENABLE(kdrive-mouse, AC_HELP_STRING([--enable-kdrive-mouse], [Build mouse driver for kdrive (default: auto)]), [KDRIVE_MOUSE=$enableval], [KDRIVE_MOUSE=auto])
AC_ARG_ENABLE(kdrive-evdev, AC_HELP_STRING([--enable-kdrive-evdev], [Build evdev driver for kdrive (default: auto)]), [KDRIVE_EVDEV=$enableval], [KDRIVE_EVDEV=auto]) AC_ARG_ENABLE(kdrive-evdev, AC_HELP_STRING([--enable-kdrive-evdev], [Build evdev driver for kdrive (default: auto)]), [KDRIVE_EVDEV=$enableval], [KDRIVE_EVDEV=auto])
dnl glamor options
AC_ARG_ENABLE(glamor-gles2, AS_HELP_STRING([--enable-glamor-gles2], [Build glamor based on gles2 (default: no)]), [GLAMOR_GLES2=$enableval], [GLAMOR_GLES2=no])
dnl chown/chmod to be setuid root as part of build dnl chown/chmod to be setuid root as part of build
@ -801,9 +797,7 @@ LIBUDEV="libudev >= 143"
LIBSELINUX="libselinux >= 2.0.86" LIBSELINUX="libselinux >= 2.0.86"
LIBDBUS="dbus-1 >= 1.0" LIBDBUS="dbus-1 >= 1.0"
LIBPIXMAN="pixman-1 >= 0.21.8" LIBPIXMAN="pixman-1 >= 0.21.8"
LIBEGL="egl"
LIBGLESV2="glesv2"
LIBGBM="gbm"
dnl Pixman is always required, but we separate it out so we can link dnl Pixman is always required, but we separate it out so we can link
dnl specific modules against it dnl specific modules against it
PKG_CHECK_MODULES(PIXMAN, $LIBPIXMAN) PKG_CHECK_MODULES(PIXMAN, $LIBPIXMAN)
@ -1771,37 +1765,6 @@ AM_CONDITIONAL([SOLARIS_VT], [test "x$solaris_vt" = xyes])
AM_CONDITIONAL([DGA], [test "x$DGA" = xyes]) AM_CONDITIONAL([DGA], [test "x$DGA" = xyes])
AM_CONDITIONAL([XF86VIDMODE], [test "x$XF86VIDMODE" = xyes]) AM_CONDITIONAL([XF86VIDMODE], [test "x$XF86VIDMODE" = xyes])
dnl glamor
if [test "x$XEPHYR" = xyes || test "x$GLAMOR_DDX" = xyes] ; then
GLAMOR=yes
fi
AM_CONDITIONAL([GLAMOR], [test "x$GLAMOR" = xyes])
AM_CONDITIONAL([GLAMOR_GLES2], [test "x$GLAMOR_GLES2" = xyes])
AM_CONDITIONAL([GLAMOR_DDX], [test "x$GLAMOR_DDX" = xyes])
if test "x$GLAMOR" = xyes; then
AC_DEFINE(GLAMOR,1,[Build Glamor])
if test "x$GLAMOR_GLES2" = xyes; then
AC_DEFINE(GLAMOR_GLES2,1,[Build glamor over GLES2])
PKG_CHECK_MODULES(GLESV2, $LIBGLESV2)
REQUIRED_LIBS="$REQUIRED_LIBS $LIBGLESV2"
else
AC_DEFINE(GLAMOR_GL,1,[Build glamor over GL])
PKG_CHECK_MODULES(GL, $LIBGL)
REQUIRED_LIBS="$REQUIRED_LIBS $LIBGL"
fi
if test "x$GLAMOR_DDX" = xyes; then
AC_DEFINE(GLAMOR_DDX,1,[Enable glamor ddx driver])
PKG_CHECK_MODULES(EGL, $LIBEGL)
PKG_CHECK_MODULES(EGL, $LIBGBM)
REQUIRED_LIBS="$REQUIRED_LIBS $LIBEGL"
fi
fi
dnl XWin DDX dnl XWin DDX
AC_MSG_CHECKING([whether to build XWin DDX]) AC_MSG_CHECKING([whether to build XWin DDX])
@ -2035,10 +1998,6 @@ if test "$KDRIVE" = yes; then
if test "x$DRI" = xyes && test "x$GLX" = xyes; then if test "x$DRI" = xyes && test "x$GLX" = xyes; then
XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS $LIBGL libdrm" XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS $LIBGL libdrm"
fi fi
# The glamor stuff requires libGL, but that conflicts with GLX currently.
if test "x$GLX" = xno; then
XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS gl"
fi
PKG_CHECK_MODULES(XEPHYR, $XEPHYR_REQUIRED_LIBS, [xephyr="yes"], [xephyr="no"]) PKG_CHECK_MODULES(XEPHYR, $XEPHYR_REQUIRED_LIBS, [xephyr="yes"], [xephyr="no"])
if test "x$XEPHYR" = xauto; then if test "x$XEPHYR" = xauto; then
@ -2174,7 +2133,6 @@ Xext/Makefile
Xi/Makefile Xi/Makefile
xfixes/Makefile xfixes/Makefile
exa/Makefile exa/Makefile
glamor/Makefile
hw/Makefile hw/Makefile
hw/xfree86/Makefile hw/xfree86/Makefile
hw/xfree86/common/Makefile hw/xfree86/common/Makefile
@ -2212,7 +2170,6 @@ hw/xfree86/utils/Makefile
hw/xfree86/utils/man/Makefile hw/xfree86/utils/man/Makefile
hw/xfree86/utils/cvt/Makefile hw/xfree86/utils/cvt/Makefile
hw/xfree86/utils/gtf/Makefile hw/xfree86/utils/gtf/Makefile
hw/xfree86/glamor/Makefile
hw/dmx/config/Makefile hw/dmx/config/Makefile
hw/dmx/config/man/Makefile hw/dmx/config/man/Makefile
hw/dmx/doc/Makefile hw/dmx/doc/Makefile

View File

@ -7,8 +7,7 @@ INCLUDES = \
@XEPHYR_CFLAGS@ \ @XEPHYR_CFLAGS@ \
@DRIPROTO_CFLAGS@ \ @DRIPROTO_CFLAGS@ \
-I$(top_srcdir) \ -I$(top_srcdir) \
-I$(top_srcdir)/exa \ -I$(top_srcdir)/exa
-I$(top_srcdir)/glamor
if XV if XV
LIBXEPHYR_HOSTXV=libxephyr-hostxv.la LIBXEPHYR_HOSTXV=libxephyr-hostxv.la
@ -48,7 +47,6 @@ XEPHYR_SRCS = \
ephyr.h \ ephyr.h \
ephyrlog.h \ ephyrlog.h \
ephyr_draw.c \ ephyr_draw.c \
ephyr_glamor.c \
os.c os.c
libxephyr_hostx_la_SOURCES = $(HOSTX_SRCS) libxephyr_hostx_la_SOURCES = $(HOSTX_SRCS)
@ -66,28 +64,18 @@ libxephyr_la_SOURCES = $(XEPHYR_SRCS)
Xephyr_SOURCES = \ Xephyr_SOURCES = \
ephyrinit.c ephyrinit.c
if GLAMOR_GLES2
GLAMOR_GL_LIB = -lGLESv2
else
GLAMOR_GL_LIB = -lGL
endif
Xephyr_LDADD = \ Xephyr_LDADD = \
libxephyr.la \ libxephyr.la \
libxephyr-hostx.la \ libxephyr-hostx.la \
$(LIBXEPHYR_HOSTXV) \ $(LIBXEPHYR_HOSTXV) \
$(LIBXEPHYR_HOSTDRI) \ $(LIBXEPHYR_HOSTDRI) \
$(top_builddir)/exa/libexa.la \ $(top_builddir)/exa/libexa.la \
$(top_builddir)/glamor/libglamor.la \
@KDRIVE_LIBS@ \ @KDRIVE_LIBS@ \
@XEPHYR_LIBS@ \ @XEPHYR_LIBS@
$(GLAMOR_GL_LIB)
Xephyr_DEPENDENCIES = \ Xephyr_DEPENDENCIES = \
libxephyr.la \ libxephyr.la \
libxephyr-hostx.la \ libxephyr-hostx.la \
$(top_builddir)/exa/libexa.la \
$(top_builddir)/glamor/libglamor.la \
$(LIBXEPHYR_HOSTXV) \ $(LIBXEPHYR_HOSTXV) \
$(LIBXEPHYR_HOSTDRI) \ $(LIBXEPHYR_HOSTDRI) \
@KDRIVE_LOCAL_LIBS@ @KDRIVE_LOCAL_LIBS@

View File

@ -394,7 +394,7 @@ ephyrSetInternalDamage (ScreenPtr pScreen)
KdScreenInfo *screen = pScreenPriv->screen; KdScreenInfo *screen = pScreenPriv->screen;
EphyrScrPriv *scrpriv = screen->driver; EphyrScrPriv *scrpriv = screen->driver;
PixmapPtr pPixmap = NULL; PixmapPtr pPixmap = NULL;
scrpriv->pDamage = DamageCreate ((DamageReportFunc) 0, scrpriv->pDamage = DamageCreate ((DamageReportFunc) 0,
(DamageDestroyFunc) 0, (DamageDestroyFunc) 0,
DamageReportNone, DamageReportNone,
@ -669,9 +669,7 @@ ephyrInitScreen (ScreenPtr pScreen)
} }
if (!ephyrNoDRI) { if (!ephyrNoDRI) {
ephyrDRIExtensionInit (pScreen) ; ephyrDRIExtensionInit (pScreen) ;
#if 0
ephyrHijackGLXExtension () ; ephyrHijackGLXExtension () ;
#endif
} }
#endif #endif
@ -684,7 +682,6 @@ ephyrInitScreen (ScreenPtr pScreen)
return TRUE; return TRUE;
} }
Bool Bool
ephyrFinishInitScreen (ScreenPtr pScreen) ephyrFinishInitScreen (ScreenPtr pScreen)
{ {
@ -701,7 +698,6 @@ ephyrFinishInitScreen (ScreenPtr pScreen)
return TRUE; return TRUE;
} }
extern Bool ephyr_glamor;
Bool Bool
ephyrCreateResources (ScreenPtr pScreen) ephyrCreateResources (ScreenPtr pScreen)
@ -712,20 +708,14 @@ ephyrCreateResources (ScreenPtr pScreen)
EPHYR_LOG("mark pScreen=%p mynum=%d shadow=%d", EPHYR_LOG("mark pScreen=%p mynum=%d shadow=%d",
pScreen, pScreen->myNum, scrpriv->shadow); pScreen, pScreen->myNum, scrpriv->shadow);
if (scrpriv->shadow) if (scrpriv->shadow)
return KdShadowSet (pScreen, return KdShadowSet (pScreen,
scrpriv->randr, scrpriv->randr,
ephyrShadowUpdate, ephyrShadowUpdate,
ephyrWindowLinear); ephyrWindowLinear);
else { else
if (ephyr_glamor) {
KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen;
if (!glamor_glyphs_init(pScreen)) return FALSE;
glamor_set_screen_pixmap_texture(pScreen, screen->width, screen->height, 0);
}
return ephyrSetInternalDamage(pScreen); return ephyrSetInternalDamage(pScreen);
}
} }
void void

View File

@ -196,13 +196,6 @@ ephyrDrawDisable(ScreenPtr pScreen);
void void
ephyrDrawFini(ScreenPtr pScreen); ephyrDrawFini(ScreenPtr pScreen);
/* ephyr_glamor.c */
Bool ephyr_glamor_init(ScreenPtr pScreen);
void ephyr_glamor_enable(ScreenPtr pScreen);
void ephyr_glamor_disable(ScreenPtr pScreen);
void ephyr_glamor_fini(ScreenPtr pScreen);
void ephyr_glamor_host_paint_rect(ScreenPtr pScreen);
/*ephyvideo.c*/ /*ephyvideo.c*/
Bool ephyrInitVideo(ScreenPtr pScreen) ; Bool ephyrInitVideo(ScreenPtr pScreen) ;

View File

@ -1,67 +0,0 @@
/*
* Copyright © 2008 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Authors:
* Eric Anholt <eric@anholt.net>
*
*/
#ifdef HAVE_CONFIG_H
#include <kdrive-config.h>
#endif
#include "ephyr.h"
#include "glamor.h"
/**
* This function initializes EXA to use the fake acceleration implementation
* which just falls through to software. The purpose is to have a reliable,
* correct driver with which to test changes to the EXA core.
*/
Bool
ephyr_glamor_init(ScreenPtr screen)
{
KdScreenPriv(screen);
KdScreenInfo *kd_screen = pScreenPriv->screen;
ephyr_glamor_host_create_context(kd_screen);
glamor_init(screen, GLAMOR_HOSTX);
return TRUE;
}
void
ephyr_glamor_enable(ScreenPtr screen)
{
}
void
ephyr_glamor_disable(ScreenPtr screen)
{
}
void
ephyr_glamor_fini(ScreenPtr screen)
{
glamor_fini(screen);
}

View File

@ -31,7 +31,6 @@
extern Window EphyrPreExistingHostWin; extern Window EphyrPreExistingHostWin;
extern Bool EphyrWantGrayScale; extern Bool EphyrWantGrayScale;
extern Bool ephyr_glamor;
extern Bool kdHasPointer; extern Bool kdHasPointer;
extern Bool kdHasKbd; extern Bool kdHasKbd;
@ -118,7 +117,6 @@ ddxUseMsg (void)
ErrorF("-host-cursor Re-use exisiting X host server cursor\n"); ErrorF("-host-cursor Re-use exisiting X host server cursor\n");
ErrorF("-fullscreen Attempt to run Xephyr fullscreen\n"); ErrorF("-fullscreen Attempt to run Xephyr fullscreen\n");
ErrorF("-grayscale Simulate 8bit grayscale\n"); ErrorF("-grayscale Simulate 8bit grayscale\n");
ErrorF("-glamor Enable 2D acceleration using glamor\n");
ErrorF("-fakexa Simulate acceleration using software rendering\n"); ErrorF("-fakexa Simulate acceleration using software rendering\n");
ErrorF("-verbosity <level> Set log verbosity level\n"); ErrorF("-verbosity <level> Set log verbosity level\n");
#ifdef GLXEXT #ifdef GLXEXT
@ -222,15 +220,6 @@ ddxProcessArgument (int argc, char **argv, int i)
EphyrWantGrayScale = 1; EphyrWantGrayScale = 1;
return 1; return 1;
} }
else if (!strcmp (argv[i], "-glamor"))
{
ephyr_glamor = TRUE;
ephyrFuncs.initAccel = ephyr_glamor_init;
ephyrFuncs.enableAccel = ephyr_glamor_enable;
ephyrFuncs.disableAccel = ephyr_glamor_disable;
ephyrFuncs.finiAccel = ephyr_glamor_fini;
return 1;
}
else if (!strcmp (argv[i], "-fakexa")) else if (!strcmp (argv[i], "-fakexa"))
{ {
ephyrFuncs.initAccel = ephyrDrawInit; ephyrFuncs.initAccel = ephyrDrawInit;

View File

@ -46,7 +46,6 @@
#include <unistd.h> #include <unistd.h>
#include <string.h> /* for memset */ #include <string.h> /* for memset */
#include <time.h> #include <time.h>
#include <err.h>
#include <sys/ipc.h> #include <sys/ipc.h>
#include <sys/shm.h> #include <sys/shm.h>
@ -62,7 +61,6 @@
#include <GL/glx.h> #include <GL/glx.h>
#endif /* XF86DRI */ #endif /* XF86DRI */
#include "ephyrlog.h" #include "ephyrlog.h"
#include "GL/glx.h"
#ifdef XF86DRI #ifdef XF86DRI
extern Bool XF86DRIQueryExtension (Display *dpy, extern Bool XF86DRIQueryExtension (Display *dpy,
@ -97,7 +95,6 @@ struct EphyrHostXVars
Display *dpy; Display *dpy;
int screen; int screen;
Visual *visual; Visual *visual;
XVisualInfo *visual_info;
Window winroot; Window winroot;
GC gc; GC gc;
int depth; int depth;
@ -126,14 +123,10 @@ extern int monitorResolution;
char *ephyrResName = NULL; char *ephyrResName = NULL;
int ephyrResNameFromCmd = 0; int ephyrResNameFromCmd = 0;
char *ephyrTitle = NULL; char *ephyrTitle = NULL;
Bool ephyr_glamor = FALSE;
static void static void
hostx_set_fullscreen_hint(void); hostx_set_fullscreen_hint(void);
static void
ephyr_glamor_get_visual(void);
/* X Error traps */ /* X Error traps */
static int trapped_error_code = 0; static int trapped_error_code = 0;
@ -369,11 +362,8 @@ hostx_init (void)
HostX.winroot = RootWindow(HostX.dpy, HostX.screen); HostX.winroot = RootWindow(HostX.dpy, HostX.screen);
HostX.gc = XCreateGC(HostX.dpy, HostX.winroot, 0, NULL); HostX.gc = XCreateGC(HostX.dpy, HostX.winroot, 0, NULL);
HostX.depth = DefaultDepth(HostX.dpy, HostX.screen); HostX.depth = DefaultDepth(HostX.dpy, HostX.screen);
if (ephyr_glamor) { HostX.visual = DefaultVisual(HostX.dpy, HostX.screen);
ephyr_glamor_get_visual();
} else {
HostX.visual = DefaultVisual(HostX.dpy, HostX.screen);
}
class_hint = XAllocClassHint(); class_hint = XAllocClassHint();
for (index = 0 ; index < HostX.n_screens ; index++) for (index = 0 ; index < HostX.n_screens ; index++)
@ -767,11 +757,6 @@ hostx_screen_init (EphyrScreenInfo screen,
static void hostx_paint_debug_rect (struct EphyrHostScreen *host_screen, static void hostx_paint_debug_rect (struct EphyrHostScreen *host_screen,
int x, int y, int x, int y,
int width, int height); int width, int height);
static void
ephyr_glamor_paint_rect (EphyrScreenInfo screen,
int sx, int sy,
int dx, int dy,
int width, int height);
void void
hostx_paint_rect (EphyrScreenInfo screen, hostx_paint_rect (EphyrScreenInfo screen,
@ -783,11 +768,6 @@ hostx_paint_rect (EphyrScreenInfo screen,
EPHYR_DBG ("painting in screen %d\n", host_screen->mynum) ; EPHYR_DBG ("painting in screen %d\n", host_screen->mynum) ;
if (ephyr_glamor) {
ephyr_glamor_paint_rect(screen, sx, sy, dx, dy, width, height);
return;
}
/* /*
* Copy the image data updated by the shadow layer * Copy the image data updated by the shadow layer
* on to the window * on to the window
@ -1465,82 +1445,3 @@ hostx_has_glx (void)
} }
#endif /* XF86DRI */ #endif /* XF86DRI */
static void
ephyr_glamor_get_visual(void)
{
Display *dpy = HostX.dpy;
int attribs[] = {GLX_RGBA,
GLX_RED_SIZE, 1,
GLX_GREEN_SIZE, 1,
GLX_BLUE_SIZE, 1,
GLX_DOUBLEBUFFER, 1,
None};
XVisualInfo *visual_info;
int event_base = 0, error_base = 0;
if (!glXQueryExtension (dpy, &event_base, &error_base))
errx(1, "Couldn't find GLX extension\n");
visual_info = glXChooseVisual(dpy, DefaultScreen(dpy), attribs);
if (visual_info == NULL)
errx(1, "Couldn't get RGB visual\n");
HostX.visual_info = visual_info;
HostX.visual = visual_info->visual;
}
void
ephyr_glamor_host_create_context(EphyrScreenInfo ephyr_screen)
{
Display *dpy = HostX.dpy;
GLXContext ctx;
struct EphyrHostScreen *host_screen;
host_screen = host_screen_from_screen_info(ephyr_screen);
ctx = glXCreateContext(dpy, HostX.visual_info, NULL, True);
if (ctx == NULL)
errx(1, "glXCreateContext failed\n");
if (!glXMakeCurrent(dpy, host_screen->win, ctx))
errx(1, "glXMakeCurrent failed\n");
}
static void
ephyr_glamor_paint_rect (EphyrScreenInfo screen,
int sx, int sy,
int dx, int dy,
int width, int height)
{
struct EphyrHostScreen *host_screen = host_screen_from_screen_info (screen);
static PFNGLXCOPYSUBBUFFERMESAPROC pglXCopySubBufferMESA = NULL;
if (!pglXCopySubBufferMESA) {
pglXCopySubBufferMESA = (PFNGLXCOPYSUBBUFFERMESAPROC)
glXGetProcAddressARB((const GLubyte*)"glXCopySubBufferMESA");
assert(pglXCopySubBufferMESA);
}
/* Always copy the full screen until we get things rendering correctly. */
#if 0
pglXCopySubBufferMESA(HostX.dpy, host_screen->win,
sx, sy, width, height);
#else
pglXCopySubBufferMESA(HostX.dpy, host_screen->win,
0, 0,
host_screen->win_width, host_screen->win_height);
#endif
}
struct glamor_gl_dispatch;
extern Bool
glamor_gl_dispatch_init_impl(struct glamor_gl_dispatch *dispatch, int gl_version, void* func);
Bool
glamor_gl_dispatch_init(void *screen, struct glamor_gl_dispatch *dispatch, int gl_version)
{
if (!glamor_gl_dispatch_init_impl(dispatch, gl_version, glXGetProcAddress))
return FALSE;
return TRUE;
}

View File

@ -261,7 +261,4 @@ int hostx_has_dri (void) ;
int hostx_has_glx (void) ; int hostx_has_glx (void) ;
#endif /* XF86DRI */ #endif /* XF86DRI */
/* ephyr_glamor_host.c */
void ephyr_glamor_host_create_context(EphyrScreenInfo ephyr_screen);
#endif /*_XLIBS_STUFF_H_*/ #endif /*_XLIBS_STUFF_H_*/

View File

@ -27,16 +27,12 @@ if INT10MODULE
INT10_SUBDIR = int10 INT10_SUBDIR = int10
endif endif
if GLAMOR SUBDIRS = common ddc i2c x86emu $(INT10_SUBDIR) fbdevhw os-support parser \
GLAMOR_DIR=glamor
endif
SUBDIRS = common ddc i2c x86emu $(INT10_SUBDIR) fbdevhw $(GLAMOR_DIR) os-support parser \
ramdac shadowfb $(VBE_SUBDIR) $(VGAHW_SUBDIR) $(XAA_SUBDIR) \ ramdac shadowfb $(VBE_SUBDIR) $(VGAHW_SUBDIR) $(XAA_SUBDIR) \
loader dixmods exa modes \ loader dixmods exa modes \
$(DRI_SUBDIR) $(DRI2_SUBDIR) $(XF86UTILS_SUBDIR) doc man $(DRI_SUBDIR) $(DRI2_SUBDIR) $(XF86UTILS_SUBDIR) doc man
DIST_SUBDIRS = common ddc i2c x86emu int10 fbdevhw $(GLAMOR_DIR) os-support \ DIST_SUBDIRS = common ddc i2c x86emu int10 fbdevhw os-support \
parser ramdac shadowfb vbe vgahw xaa \ parser ramdac shadowfb vbe vgahw xaa \
loader dixmods dri dri2 exa modes \ loader dixmods dri dri2 exa modes \
utils doc man utils doc man

View File

@ -89,10 +89,4 @@ if LNXACPI
XORG_CFLAGS += -DHAVE_ACPI XORG_CFLAGS += -DHAVE_ACPI
endif endif
if GLAMOR_DDX AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
GLAMOR_DDX_CFLAGS = -DGLAMOR_DDX
endif
AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS) $(GLAMOR_DDX_CFLAGS)

View File

@ -1118,11 +1118,7 @@ videoPtrToDriverList(struct pci_device *dev,
} else if (dev->device_id == 0x8108) { } else if (dev->device_id == 0x8108) {
break; /* "hooray" for poulsbo */ break; /* "hooray" for poulsbo */
} else { } else {
#ifdef GLAMOR_DDX driverList[0] = "intel";
driverList[0] = "glamor";
#else
driverList[0] = "intel";
#endif
} }
break; break;
case 0x102b: driverList[0] = "mga"; break; case 0x102b: driverList[0] = "mga"; break;

View File

@ -14,14 +14,9 @@ if RECORD
RECORDMOD = librecord.la RECORDMOD = librecord.la
endif endif
if GLAMOR
LIBGLAMOR_DIX = libglamor_dix.la
endif
module_LTLIBRARIES = libfb.la \ module_LTLIBRARIES = libfb.la \
libwfb.la \ libwfb.la \
libshadow.la \ libshadow.la
$(LIBGLAMOR_DIX)
extsmoduledir = $(moduledir)/extensions extsmoduledir = $(moduledir)/extensions
extsmodule_LTLIBRARIES = $(RECORDMOD) \ extsmodule_LTLIBRARIES = $(RECORDMOD) \
@ -34,17 +29,11 @@ INCLUDES = @XORG_INCS@ \
-I$(top_srcdir)/hw/xfree86/loader \ -I$(top_srcdir)/hw/xfree86/loader \
-I$(top_srcdir)/miext/shadow \ -I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/glx -I$(top_srcdir)/glx
libdbe_la_LDFLAGS = -avoid-version libdbe_la_LDFLAGS = -avoid-version
libdbe_la_LIBADD = $(top_builddir)/dbe/libdbe.la libdbe_la_LIBADD = $(top_builddir)/dbe/libdbe.la
libdbe_la_SOURCES = dbemodule.c libdbe_la_SOURCES = dbemodule.c
if GLAMOR
libglamor_dix_la_LDFLAGS = -avoid-version
libglamor_dix_la_LIBADD = $(top_builddir)/glamor/libglamor.la
libglamor_dix_la_SOURCES = glamor_module.c $(top_srcdir)/glamor/glamor_egl.c
libglamor_dix_la_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/glamor $(LIBDRM_CFLAGS)
endif
libfb_la_LDFLAGS = -avoid-version libfb_la_LDFLAGS = -avoid-version
libfb_la_LIBADD = $(top_builddir)/fb/libfb.la libfb_la_LIBADD = $(top_builddir)/fb/libfb.la
libfb_la_SOURCES = $(top_builddir)/fb/fbcmap_mi.c fbmodule.c libfb_la_SOURCES = $(top_builddir)/fb/fbcmap_mi.c fbmodule.c

View File

@ -1,47 +0,0 @@
/*
* Copyright (C) 1998 The XFree86 Project, Inc. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of the XFree86 Project shall
* not be used in advertising or otherwise to promote the sale, use or other
* dealings in this Software without prior written authorization from the
* XFree86 Project.
*/
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include "xf86Module.h"
static XF86ModuleVersionInfo VersRec =
{
"glamor_dix",
MODULEVENDORSTRING,
MODINFOSTRING1,
MODINFOSTRING2,
XORG_VERSION_CURRENT,
1, 0, 0,
ABI_CLASS_ANSIC, /* Only need the ansic layer */
ABI_ANSIC_VERSION,
MOD_CLASS_NONE,
{0,0,0,0} /* signature, to be patched into the file by a tool */
};
_X_EXPORT XF86ModuleData glamor_dixModuleData = { &VersRec, NULL, NULL };

View File

@ -1,28 +0,0 @@
glamor_la_LTLIBRARIES = glamor.la
glamor_la_CFLAGS = \
-DHAVE_XORG_CONFIG_H \
@DIX_CFLAGS@ @XORG_CFLAGS@ @LIBDRM_CFLAGS@ \
-I$(top_srcdir)/hw/xfree86/common \
-I$(top_srcdir)/hw/xfree86/os-support/bus \
-I$(top_srcdir)/hw/xfree86/parser \
-I$(top_srcdir)/hw/xfree86/modes \
-I$(top_srcdir)/hw/xfree86/ddc \
-I$(top_srcdir)/hw/xfree86/ramdac \
-I$(top_srcdir)/hw/xfree86/i2c \
-I$(top_srcdir)/glamor
if GLAMOR_GLES2
glamor_la_CFLAGS+=-DGLAMOR_GLES2
endif
glamor_la_LDFLAGS = -module -avoid-version \
$(EGL_LIBS)
glamor_ladir = $(moduledir)/drivers
glamor_la_SOURCES = \
glamor_ddx.c \
glamor_crtc.c \
glamor_ddx.h
glamor_la_DEPENDENCIES = \
$(top_builddir)/glamor/libglamor.la

File diff suppressed because it is too large Load Diff

View File

@ -1,531 +0,0 @@
/*
* Copyright © 2010 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including
* the next paragraph) shall be included in all copies or substantial
* portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
* Authors:
* Kristian Høgsberg <krh@bitplanet.net>
*
*/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include <gbm.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <xf86drm.h>
#include "../../../mi/micmap.h"
#include <xf86Crtc.h>
#include <xf86.h>
//#define GC XORG_GC
#include <glamor.h>
//#undef GC
#include "glamor_ddx.h"
#define GLAMOR_VERSION_MAJOR 0
#define GLAMOR_VERSION_MINOR 1
#define GLAMOR_VERSION_PATCH 0
static const char glamor_ddx_name[] = "glamor";
static void
glamor_ddx_identify(int flags)
{
xf86Msg(X_INFO, "Standalone %s: OpenGL accelerated X.org driver\n", glamor_ddx_name);
}
static Bool
glamor_ddx_init_front_buffer(ScrnInfoPtr scrn, int width, int height)
{
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
glamor->root_bo = gbm_bo_create(glamor->gbm, width, height,
GBM_BO_FORMAT_ARGB8888,
GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING);
if (glamor->root_bo == NULL)
return FALSE;
scrn->virtualX = width;
scrn->virtualY = height;
/* XXX shall we update displayWidth here ? */
return TRUE;
}
static Bool
glamor_create_screen_image(ScrnInfoPtr scrn)
{
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
ScreenPtr screen = screenInfo.screens[scrn->scrnIndex];
unsigned int handle, stride;
handle = gbm_bo_get_handle(glamor->root_bo).u32;
stride = gbm_bo_get_pitch(glamor->root_bo);
return glamor_create_egl_screen_image(screen, handle, stride);
}
Bool
glamor_front_buffer_resize(ScrnInfoPtr scrn, int width, int height)
{
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
ScreenPtr screen = screenInfo.screens[scrn->scrnIndex];
if (glamor->root_bo != NULL) {
glamor_close_egl_screen(screen);
gbm_bo_destroy(glamor->root_bo);
glamor->root_bo = NULL;
}
if (!glamor_ddx_init_front_buffer(scrn, width, height))
return FALSE;
return glamor_create_screen_image(scrn);
}
void
glamor_frontbuffer_handle(ScrnInfoPtr scrn, uint32_t *handle, uint32_t *pitch)
{
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
*handle = gbm_bo_get_handle(glamor->root_bo).u32;
*pitch = gbm_bo_get_pitch(glamor->root_bo);
}
Bool
glamor_create_cursor(ScrnInfoPtr scrn, struct glamor_gbm_cursor *cursor, int width, int height)
{
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
ScreenPtr screen = screenInfo.screens[scrn->scrnIndex];
unsigned int handle, stride;
if (cursor->cursor_pixmap)
glamor_destroy_cursor(scrn, cursor);
cursor->cursor_pixmap = screen->CreatePixmap(screen, 0, 0, 32, 0);
if (cursor->cursor_pixmap == NULL)
return FALSE;
screen->ModifyPixmapHeader(cursor->cursor_pixmap, width, height, 0, 0, 0, 0);
cursor->cursor_bo = gbm_bo_create(glamor->gbm, width, height,
GBM_BO_FORMAT_ARGB8888,
GBM_BO_USE_SCANOUT
| GBM_BO_USE_RENDERING
| GBM_BO_USE_CURSOR_64X64);
if (cursor->cursor_bo == NULL)
goto fail;
glamor_cursor_handle(cursor, &handle, &stride);
if (!glamor_create_egl_pixmap_image(cursor->cursor_pixmap, handle, stride))
goto fail;
return TRUE;
fail:
glamor_destroy_cursor(scrn, cursor);
return FALSE;
}
void glamor_destroy_cursor(ScrnInfoPtr scrn, struct glamor_gbm_cursor *cursor)
{
ScreenPtr screen = screenInfo.screens[scrn->scrnIndex];
if (cursor->cursor_pixmap)
screen->DestroyPixmap(cursor->cursor_pixmap);
if (cursor->cursor_bo)
gbm_bo_destroy(cursor->cursor_bo);
cursor->cursor_bo = NULL;
cursor->cursor_pixmap = NULL;
}
void
glamor_cursor_handle(struct glamor_gbm_cursor *cursor, uint32_t *handle, uint32_t *pitch)
{
*handle = gbm_bo_get_handle(cursor->cursor_bo).u32;
*pitch = gbm_bo_get_pitch(cursor->cursor_bo);
ErrorF("cursor stride: %d\n", *pitch);
}
char * dri_device_name = "/dev/dri/card0";
static Bool
glamor_ddx_pre_init(ScrnInfoPtr scrn, int flags)
{
struct glamor_ddx_screen_private *glamor;
rgb defaultWeight = { 0, 0, 0 };
glamor = xnfcalloc(sizeof *glamor, 1);
scrn->driverPrivate = glamor;
glamor->fd = open(dri_device_name, O_RDWR);
if (glamor->fd == -1 ) {
ErrorF("Failed to open %s: %s\n", dri_device_name, strerror(errno));
goto fail;
}
glamor->cpp = 4;
scrn->monitor = scrn->confScreen->monitor;
scrn->progClock = TRUE;
scrn->rgbBits = 8;
if (!xf86SetDepthBpp(scrn, 0, 0, 0, Support32bppFb))
goto fail;
xf86PrintDepthBpp(scrn);
if (!xf86SetWeight(scrn, defaultWeight, defaultWeight))
goto fail;
if (!xf86SetDefaultVisual(scrn, -1))
goto fail;
glamor->cpp = scrn->bitsPerPixel / 8;
if (drmmode_pre_init(scrn, glamor->fd, glamor->cpp) == FALSE) {
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
"Kernel modesetting setup failed\n");
goto fail;
}
scrn->currentMode = scrn->modes;
xf86SetDpi(scrn, 0, 0);
/* Load the required sub modules */
if (!xf86LoadSubModule(scrn, "fb"))
goto fail;
if (!xf86LoadSubModule(scrn, "glamor_dix"))
goto fail;
return TRUE;
fail:
scrn->driverPrivate = NULL;
free(glamor);
return FALSE;
}
static void
glamor_ddx_adjust_frame(int scrnIndex, int x, int y, int flags)
{
}
static Bool
glamor_ddx_enter_vt(int scrnIndex, int flags)
{
ScrnInfoPtr scrn = xf86Screens[scrnIndex];
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
if (drmSetMaster(glamor->fd)) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"drmSetMaster failed: %s\n", strerror(errno));
return FALSE;
}
if (!xf86SetDesiredModes(scrn))
return FALSE;
return TRUE;
}
static void
glamor_ddx_leave_vt(int scrnIndex, int flags)
{
ScrnInfoPtr scrn = xf86Screens[scrnIndex];
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
drmDropMaster(glamor->fd);
}
static Bool
glamor_ddx_create_screen_resources(ScreenPtr screen)
{
ScrnInfoPtr scrn = xf86Screens[screen->myNum];
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
screen->CreateScreenResources = glamor->CreateScreenResources;
if (!(*screen->CreateScreenResources) (screen))
return FALSE;
if (!glamor_glyphs_init(screen))
return FALSE;
if (glamor->root_bo == NULL)
return FALSE;
if (!glamor_create_screen_image(scrn))
return FALSE;
return TRUE;
}
static Bool
glamor_ddx_close_screen(int scrnIndex, ScreenPtr screen)
{
ScrnInfoPtr scrn = xf86Screens[scrnIndex];
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
screen->CloseScreen = glamor->CloseScreen;
(*screen->CloseScreen) (scrnIndex, screen);
if (scrn->vtSema == TRUE)
glamor_ddx_leave_vt(scrnIndex, 0);
glamor_fini(screen);
glamor_close_egl_screen(screen);
gbm_bo_destroy(glamor->root_bo);
drmmode_closefb(scrn);
return TRUE;
}
static Bool
glamor_ddx_screen_init(int scrnIndex, ScreenPtr screen, int argc, char **argv)
{
ScrnInfoPtr scrn = xf86Screens[screen->myNum];
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
VisualPtr visual;
glamor->gbm = gbm_create_device(glamor->fd);
if (glamor->gbm == NULL) {
ErrorF("couldn't create gbm device\n");
return FALSE;
}
glamor_egl_init(scrn, glamor->fd);
miClearVisualTypes();
if (!miSetVisualTypes(scrn->depth,
miGetDefaultVisualMask(scrn->depth),
scrn->rgbBits, scrn->defaultVisual))
return FALSE;
if (!miSetPixmapDepths())
return FALSE;
if (!glamor_ddx_init_front_buffer(scrn, scrn->virtualX, scrn->virtualY))
return FALSE;
if (!fbScreenInit(screen, NULL,
scrn->virtualX, scrn->virtualY,
scrn->xDpi, scrn->yDpi,
1, scrn->bitsPerPixel))
return FALSE;
if (scrn->bitsPerPixel > 8) {
/* Fixup RGB ordering */
visual = screen->visuals + screen->numVisuals;
while(--visual >= screen->visuals) {
if ((visual->class | DynamicClass) == DirectColor) {
visual->offsetRed = scrn->offset.red;
visual->offsetGreen = scrn->offset.green;
visual->offsetBlue = scrn->offset.blue;
visual->redMask = scrn->mask.red;
visual->blueMask = scrn->mask.blue;
}
}
}
fbPictureInit(screen, NULL, 0);
xf86SetBlackWhitePixels(screen);
if (!glamor_init(screen, GLAMOR_INVERTED_Y_AXIS)) {
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
"Failed to initialize glamor\n");
return FALSE;
}
miInitializeBackingStore(screen);
xf86SetBackingStore(screen);
xf86SetSilkenMouse(screen);
miDCInitialize(screen, xf86GetPointerScreenFuncs());
xf86DrvMsg(scrn->scrnIndex, X_INFO, "Initializing HW Cursor\n");
if (!xf86_cursors_init(screen, 64, 64,
(HARDWARE_CURSOR_TRUECOLOR_AT_8BPP |
HARDWARE_CURSOR_BIT_ORDER_MSBFIRST |
HARDWARE_CURSOR_INVERT_MASK |
HARDWARE_CURSOR_SWAP_SOURCE_AND_MASK |
HARDWARE_CURSOR_AND_SOURCE_WITH_MASK |
HARDWARE_CURSOR_SOURCE_MASK_NOT_INTERLEAVED |
HARDWARE_CURSOR_UPDATE_UNHIDDEN |
HARDWARE_CURSOR_ARGB))) {
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
"Hardware cursor initialization failed\n");
}
/* Must force it before EnterVT, so we are in control of VT and
* later memory should be bound when allocating, e.g rotate_mem */
scrn->vtSema = TRUE;
if (!glamor_ddx_enter_vt(scrnIndex, 0))
return FALSE;
screen->SaveScreen = xf86SaveScreen;
glamor->CreateScreenResources = screen->CreateScreenResources;
screen->CreateScreenResources = glamor_ddx_create_screen_resources;
glamor->CloseScreen = screen->CloseScreen;
screen->CloseScreen = glamor_ddx_close_screen;
/* Fixme should we init crtc screen here? */
if (!xf86CrtcScreenInit(screen))
return FALSE;
if (!miCreateDefColormap(screen))
return FALSE;
/* Fixme should we add handle colormap here? */
xf86DPMSInit(screen, xf86DPMSSet, 0);
return TRUE;
}
static void
glamor_ddx_free_screen(int scrnIndex, int flags)
{
ScrnInfoPtr scrn = xf86Screens[scrnIndex];
struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn);
if (glamor != NULL)
{
close(glamor->fd);
free(glamor);
scrn->driverPrivate = NULL;
}
}
static ModeStatus
glamor_ddx_valid_mode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
{
if (mode->Flags & V_INTERLACE) {
if (verbose) {
xf86DrvMsg(scrnIndex, X_PROBED,
"Removing interlaced mode \"%s\"\n",
mode->name);
}
return MODE_BAD;
}
return MODE_OK;
}
static Bool
glamor_ddx_probe(struct _DriverRec *drv, int flags)
{
ScrnInfoPtr scrn = NULL;
GDevPtr *sections;
int entity, n;
n = xf86MatchDevice(glamor_ddx_name, &sections);
if (n <= 0)
return FALSE;
entity = xf86ClaimFbSlot(drv, 0, sections[0], TRUE);
scrn = xf86ConfigFbEntity(scrn, 0, entity, NULL, NULL, NULL, NULL);
if (scrn == NULL) {
xf86Msg(X_ERROR, "Failed to add fb entity\n");
return FALSE;
}
scrn->driverVersion = 1;
scrn->driverName = (char *) glamor_ddx_name;
scrn->name = (char *) glamor_ddx_name;
scrn->Probe = NULL;
scrn->PreInit = glamor_ddx_pre_init;
scrn->ScreenInit = glamor_ddx_screen_init;
scrn->AdjustFrame = glamor_ddx_adjust_frame;
scrn->EnterVT = glamor_ddx_enter_vt;
scrn->LeaveVT = glamor_ddx_leave_vt;
scrn->FreeScreen = glamor_ddx_free_screen;
scrn->ValidMode = glamor_ddx_valid_mode;
return TRUE;
}
static const OptionInfoRec *
glamor_ddx_available_options(int chipid, int busid)
{
return NULL;
}
static Bool
glamor_ddx_driver_func(ScrnInfoPtr pScrn, xorgDriverFuncOp op, pointer ptr)
{
xorgHWFlags *flag;
switch (op) {
case GET_REQUIRED_HW_INTERFACES:
flag = (CARD32*)ptr;
(*flag) = 0;
return TRUE;
default:
/* Unknown or deprecated function */
return FALSE;
}
}
_X_EXPORT DriverRec glamor_ddx = {
1,
"glamor",
glamor_ddx_identify,
glamor_ddx_probe,
glamor_ddx_available_options,
NULL,
0,
glamor_ddx_driver_func,
};
static pointer
glamor_ddx_setup(pointer module, pointer opts, int *errmaj, int *errmin)
{
static Bool setupDone = 0;
/* This module should be loaded only once, but check to be sure.
*/
if (!setupDone) {
setupDone = 1;
xf86AddDriver(&glamor_ddx, module, HaveDriverFuncs);
/*
* The return value must be non-NULL on success even though there
* is no TearDownProc.
*/
return (pointer) 1;
} else {
if (errmaj)
*errmaj = LDR_ONCEONLY;
return NULL;
}
}
static XF86ModuleVersionInfo glamor_ddx_version_info = {
glamor_ddx_name,
MODULEVENDORSTRING,
MODINFOSTRING1,
MODINFOSTRING2,
XORG_VERSION_CURRENT,
GLAMOR_VERSION_MAJOR,
GLAMOR_VERSION_MINOR,
GLAMOR_VERSION_PATCH,
ABI_CLASS_VIDEODRV,
ABI_VIDEODRV_VERSION,
MOD_CLASS_VIDEODRV,
{0, 0, 0, 0}
};
_X_EXPORT XF86ModuleData glamorModuleData = {
&glamor_ddx_version_info,
glamor_ddx_setup,
NULL
};

View File

@ -1,42 +0,0 @@
#ifndef GLAMOR_DDX_H
#define GLAMOR_DDX_H
#include <gbm.h>
#define GLAMOR_FOR_XORG 1
#include <glamor.h>
struct glamor_ddx_screen_private {
struct gbm_bo *root_bo;
struct gbm_bo *cursor_bo;
struct gbm_device *gbm;
CreateScreenResourcesProcPtr CreateScreenResources;
CloseScreenProcPtr CloseScreen;
int fd;
int cpp;
};
struct glamor_gbm_cursor {
struct gbm_bo *cursor_bo;
PixmapPtr cursor_pixmap;
};
inline static struct glamor_ddx_screen_private *
glamor_ddx_get_screen_private(ScrnInfoPtr scrn)
{
return (struct glamor_ddx_screen_private *) (scrn->driverPrivate);
}
Bool glamor_front_buffer_resize(ScrnInfoPtr scrn, int width, int height);
void glamor_frontbuffer_handle(ScrnInfoPtr scrn,
uint32_t *handle, uint32_t *pitch);
Bool glamor_load_cursor(ScrnInfoPtr scrn,
int width, int height);
void glamor_cursor_handle(struct glamor_gbm_cursor *cursor, uint32_t *handle, uint32_t *pitch);
Bool glamor_create_cursor(ScrnInfoPtr scrn, struct glamor_gbm_cursor *cursor, int width, int height);
void glamor_destroy_cursor(ScrnInfoPtr scrn, struct glamor_gbm_cursor *cursor) ;
Bool drmmode_pre_init(ScrnInfoPtr scrn, int fd, int cpp);
void drmmode_closefb(ScrnInfoPtr scrn);
#endif

View File

@ -139,15 +139,4 @@
/* Build with libdrm support */ /* Build with libdrm support */
#undef WITH_LIBDRM #undef WITH_LIBDRM
/* Build GLAMOR */
#undef GLAMOR
/* Build GLAMOR over GLES2*/
#undef GLAMOR_GLES2
/* Build GLAMOR ddx*/
#undef GLAMOR_DDX
#endif /* _XORG_CONFIG_H_ */ #endif /* _XORG_CONFIG_H_ */