From 7982eca622bbc4b6a4845801a77da8a16138004a Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 18 Dec 2013 11:16:15 -0800 Subject: [PATCH] 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. --- Makefile.am | 6 - README | 39 +- configure.ac | 45 +- hw/kdrive/ephyr/Makefile.am | 16 +- hw/kdrive/ephyr/ephyr.c | 16 +- hw/kdrive/ephyr/ephyr.h | 7 - hw/kdrive/ephyr/ephyr_glamor.c | 67 -- hw/kdrive/ephyr/ephyrinit.c | 11 - hw/kdrive/ephyr/hostx.c | 103 +- hw/kdrive/ephyr/hostx.h | 3 - hw/xfree86/Makefile.am | 8 +- hw/xfree86/common/Makefile.am | 8 +- hw/xfree86/common/xf86pciBus.c | 6 +- hw/xfree86/dixmods/Makefile.am | 15 +- hw/xfree86/dixmods/glamor_module.c | 47 - hw/xfree86/glamor/Makefile.am | 28 - hw/xfree86/glamor/glamor_crtc.c | 1565 ---------------------------- hw/xfree86/glamor/glamor_ddx.c | 531 ---------- hw/xfree86/glamor/glamor_ddx.h | 42 - include/xorg-config.h.in | 11 - 20 files changed, 15 insertions(+), 2559 deletions(-) delete mode 100644 hw/kdrive/ephyr/ephyr_glamor.c delete mode 100644 hw/xfree86/dixmods/glamor_module.c delete mode 100644 hw/xfree86/glamor/Makefile.am delete mode 100644 hw/xfree86/glamor/glamor_crtc.c delete mode 100644 hw/xfree86/glamor/glamor_ddx.c delete mode 100644 hw/xfree86/glamor/glamor_ddx.h diff --git a/Makefile.am b/Makefile.am index 632258eec..cea140bea 100644 --- a/Makefile.am +++ b/Makefile.am @@ -17,10 +17,6 @@ if RECORD RECORD_DIR=record endif -if GLAMOR -GLAMOR_DIR=glamor -endif - SUBDIRS = \ doc \ man \ @@ -42,7 +38,6 @@ SUBDIRS = \ $(COMPOSITE_DIR) \ $(GLX_DIR) \ exa \ - $(GLAMOR_DIR) \ config \ hw \ test @@ -93,7 +88,6 @@ DIST_SUBDIRS = \ composite \ glx \ exa \ - glamor \ config \ hw \ test diff --git a/README b/README index c240ac775..b2499a059 100644 --- a/README +++ b/README @@ -1,41 +1,4 @@ - Glamor setup - -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 + X Server The X server accepts requests from client applications to create windows, which are (normally rectangular) "virtual screens" that the client program diff --git a/configure.ac b/configure.ac index bf174351f..b0d26435a 100644 --- a/configure.ac +++ b/configure.ac @@ -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(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(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 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]) @@ -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-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]) -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 @@ -801,9 +797,7 @@ LIBUDEV="libudev >= 143" LIBSELINUX="libselinux >= 2.0.86" LIBDBUS="dbus-1 >= 1.0" 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 specific modules against it 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([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 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 XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS $LIBGL libdrm" 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"]) if test "x$XEPHYR" = xauto; then @@ -2174,7 +2133,6 @@ Xext/Makefile Xi/Makefile xfixes/Makefile exa/Makefile -glamor/Makefile hw/Makefile hw/xfree86/Makefile hw/xfree86/common/Makefile @@ -2212,7 +2170,6 @@ hw/xfree86/utils/Makefile hw/xfree86/utils/man/Makefile hw/xfree86/utils/cvt/Makefile hw/xfree86/utils/gtf/Makefile -hw/xfree86/glamor/Makefile hw/dmx/config/Makefile hw/dmx/config/man/Makefile hw/dmx/doc/Makefile diff --git a/hw/kdrive/ephyr/Makefile.am b/hw/kdrive/ephyr/Makefile.am index 744604eea..9d9b64ee5 100644 --- a/hw/kdrive/ephyr/Makefile.am +++ b/hw/kdrive/ephyr/Makefile.am @@ -7,8 +7,7 @@ INCLUDES = \ @XEPHYR_CFLAGS@ \ @DRIPROTO_CFLAGS@ \ -I$(top_srcdir) \ - -I$(top_srcdir)/exa \ - -I$(top_srcdir)/glamor + -I$(top_srcdir)/exa if XV LIBXEPHYR_HOSTXV=libxephyr-hostxv.la @@ -48,7 +47,6 @@ XEPHYR_SRCS = \ ephyr.h \ ephyrlog.h \ ephyr_draw.c \ - ephyr_glamor.c \ os.c libxephyr_hostx_la_SOURCES = $(HOSTX_SRCS) @@ -66,28 +64,18 @@ libxephyr_la_SOURCES = $(XEPHYR_SRCS) Xephyr_SOURCES = \ ephyrinit.c -if GLAMOR_GLES2 -GLAMOR_GL_LIB = -lGLESv2 -else -GLAMOR_GL_LIB = -lGL -endif - Xephyr_LDADD = \ libxephyr.la \ libxephyr-hostx.la \ $(LIBXEPHYR_HOSTXV) \ $(LIBXEPHYR_HOSTDRI) \ $(top_builddir)/exa/libexa.la \ - $(top_builddir)/glamor/libglamor.la \ @KDRIVE_LIBS@ \ - @XEPHYR_LIBS@ \ - $(GLAMOR_GL_LIB) + @XEPHYR_LIBS@ Xephyr_DEPENDENCIES = \ libxephyr.la \ libxephyr-hostx.la \ - $(top_builddir)/exa/libexa.la \ - $(top_builddir)/glamor/libglamor.la \ $(LIBXEPHYR_HOSTXV) \ $(LIBXEPHYR_HOSTDRI) \ @KDRIVE_LOCAL_LIBS@ diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c index 5e217487f..7ebf1c253 100644 --- a/hw/kdrive/ephyr/ephyr.c +++ b/hw/kdrive/ephyr/ephyr.c @@ -394,7 +394,7 @@ ephyrSetInternalDamage (ScreenPtr pScreen) KdScreenInfo *screen = pScreenPriv->screen; EphyrScrPriv *scrpriv = screen->driver; PixmapPtr pPixmap = NULL; - + scrpriv->pDamage = DamageCreate ((DamageReportFunc) 0, (DamageDestroyFunc) 0, DamageReportNone, @@ -669,9 +669,7 @@ ephyrInitScreen (ScreenPtr pScreen) } if (!ephyrNoDRI) { ephyrDRIExtensionInit (pScreen) ; -#if 0 ephyrHijackGLXExtension () ; -#endif } #endif @@ -684,7 +682,6 @@ ephyrInitScreen (ScreenPtr pScreen) return TRUE; } - Bool ephyrFinishInitScreen (ScreenPtr pScreen) { @@ -701,7 +698,6 @@ ephyrFinishInitScreen (ScreenPtr pScreen) return TRUE; } -extern Bool ephyr_glamor; Bool ephyrCreateResources (ScreenPtr pScreen) @@ -712,20 +708,14 @@ ephyrCreateResources (ScreenPtr pScreen) EPHYR_LOG("mark pScreen=%p mynum=%d shadow=%d", pScreen, pScreen->myNum, scrpriv->shadow); + if (scrpriv->shadow) return KdShadowSet (pScreen, scrpriv->randr, ephyrShadowUpdate, ephyrWindowLinear); - 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); - } + else return ephyrSetInternalDamage(pScreen); - } } void diff --git a/hw/kdrive/ephyr/ephyr.h b/hw/kdrive/ephyr/ephyr.h index 9dcde8d56..23848004c 100644 --- a/hw/kdrive/ephyr/ephyr.h +++ b/hw/kdrive/ephyr/ephyr.h @@ -196,13 +196,6 @@ ephyrDrawDisable(ScreenPtr pScreen); void 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*/ Bool ephyrInitVideo(ScreenPtr pScreen) ; diff --git a/hw/kdrive/ephyr/ephyr_glamor.c b/hw/kdrive/ephyr/ephyr_glamor.c deleted file mode 100644 index 53bfbb995..000000000 --- a/hw/kdrive/ephyr/ephyr_glamor.c +++ /dev/null @@ -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 - * - */ - -#ifdef HAVE_CONFIG_H -#include -#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); -} diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c index 9155d0861..b674bb8d0 100644 --- a/hw/kdrive/ephyr/ephyrinit.c +++ b/hw/kdrive/ephyr/ephyrinit.c @@ -31,7 +31,6 @@ extern Window EphyrPreExistingHostWin; extern Bool EphyrWantGrayScale; -extern Bool ephyr_glamor; extern Bool kdHasPointer; extern Bool kdHasKbd; @@ -118,7 +117,6 @@ ddxUseMsg (void) ErrorF("-host-cursor Re-use exisiting X host server cursor\n"); ErrorF("-fullscreen Attempt to run Xephyr fullscreen\n"); ErrorF("-grayscale Simulate 8bit grayscale\n"); - ErrorF("-glamor Enable 2D acceleration using glamor\n"); ErrorF("-fakexa Simulate acceleration using software rendering\n"); ErrorF("-verbosity Set log verbosity level\n"); #ifdef GLXEXT @@ -222,15 +220,6 @@ ddxProcessArgument (int argc, char **argv, int i) EphyrWantGrayScale = 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")) { ephyrFuncs.initAccel = ephyrDrawInit; diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c index 935c7c667..4caf4516d 100644 --- a/hw/kdrive/ephyr/hostx.c +++ b/hw/kdrive/ephyr/hostx.c @@ -46,7 +46,6 @@ #include #include /* for memset */ #include -#include #include #include @@ -62,7 +61,6 @@ #include #endif /* XF86DRI */ #include "ephyrlog.h" -#include "GL/glx.h" #ifdef XF86DRI extern Bool XF86DRIQueryExtension (Display *dpy, @@ -97,7 +95,6 @@ struct EphyrHostXVars Display *dpy; int screen; Visual *visual; - XVisualInfo *visual_info; Window winroot; GC gc; int depth; @@ -126,14 +123,10 @@ extern int monitorResolution; char *ephyrResName = NULL; int ephyrResNameFromCmd = 0; char *ephyrTitle = NULL; -Bool ephyr_glamor = FALSE; static void hostx_set_fullscreen_hint(void); -static void -ephyr_glamor_get_visual(void); - /* X Error traps */ static int trapped_error_code = 0; @@ -369,11 +362,8 @@ hostx_init (void) HostX.winroot = RootWindow(HostX.dpy, HostX.screen); HostX.gc = XCreateGC(HostX.dpy, HostX.winroot, 0, NULL); HostX.depth = DefaultDepth(HostX.dpy, HostX.screen); - if (ephyr_glamor) { - ephyr_glamor_get_visual(); - } else { - HostX.visual = DefaultVisual(HostX.dpy, HostX.screen); - } + HostX.visual = DefaultVisual(HostX.dpy, HostX.screen); + class_hint = XAllocClassHint(); 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, int x, int y, 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 hostx_paint_rect (EphyrScreenInfo screen, @@ -783,11 +768,6 @@ hostx_paint_rect (EphyrScreenInfo screen, 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 * on to the window @@ -1465,82 +1445,3 @@ hostx_has_glx (void) } #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; -} diff --git a/hw/kdrive/ephyr/hostx.h b/hw/kdrive/ephyr/hostx.h index d5cb0faa6..42578576a 100644 --- a/hw/kdrive/ephyr/hostx.h +++ b/hw/kdrive/ephyr/hostx.h @@ -261,7 +261,4 @@ int hostx_has_dri (void) ; int hostx_has_glx (void) ; #endif /* XF86DRI */ -/* ephyr_glamor_host.c */ -void ephyr_glamor_host_create_context(EphyrScreenInfo ephyr_screen); - #endif /*_XLIBS_STUFF_H_*/ diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am index f76a36155..e3ef14fc1 100644 --- a/hw/xfree86/Makefile.am +++ b/hw/xfree86/Makefile.am @@ -27,16 +27,12 @@ if INT10MODULE INT10_SUBDIR = int10 endif -if GLAMOR -GLAMOR_DIR=glamor -endif - -SUBDIRS = common ddc i2c x86emu $(INT10_SUBDIR) fbdevhw $(GLAMOR_DIR) os-support parser \ +SUBDIRS = common ddc i2c x86emu $(INT10_SUBDIR) fbdevhw os-support parser \ ramdac shadowfb $(VBE_SUBDIR) $(VGAHW_SUBDIR) $(XAA_SUBDIR) \ loader dixmods exa modes \ $(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 \ loader dixmods dri dri2 exa modes \ utils doc man diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am index 173d76570..c031d4be3 100644 --- a/hw/xfree86/common/Makefile.am +++ b/hw/xfree86/common/Makefile.am @@ -89,10 +89,4 @@ if LNXACPI XORG_CFLAGS += -DHAVE_ACPI endif -if GLAMOR_DDX -GLAMOR_DDX_CFLAGS = -DGLAMOR_DDX -endif - -AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS) $(GLAMOR_DDX_CFLAGS) - - +AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS) diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c index 7ab3f2875..447b19229 100644 --- a/hw/xfree86/common/xf86pciBus.c +++ b/hw/xfree86/common/xf86pciBus.c @@ -1118,11 +1118,7 @@ videoPtrToDriverList(struct pci_device *dev, } else if (dev->device_id == 0x8108) { break; /* "hooray" for poulsbo */ } else { -#ifdef GLAMOR_DDX - driverList[0] = "glamor"; -#else - driverList[0] = "intel"; -#endif + driverList[0] = "intel"; } break; case 0x102b: driverList[0] = "mga"; break; diff --git a/hw/xfree86/dixmods/Makefile.am b/hw/xfree86/dixmods/Makefile.am index ba4aeb402..1a162ab1c 100644 --- a/hw/xfree86/dixmods/Makefile.am +++ b/hw/xfree86/dixmods/Makefile.am @@ -14,14 +14,9 @@ if RECORD RECORDMOD = librecord.la endif -if GLAMOR -LIBGLAMOR_DIX = libglamor_dix.la -endif - module_LTLIBRARIES = libfb.la \ libwfb.la \ - libshadow.la \ - $(LIBGLAMOR_DIX) + libshadow.la extsmoduledir = $(moduledir)/extensions extsmodule_LTLIBRARIES = $(RECORDMOD) \ @@ -34,17 +29,11 @@ INCLUDES = @XORG_INCS@ \ -I$(top_srcdir)/hw/xfree86/loader \ -I$(top_srcdir)/miext/shadow \ -I$(top_srcdir)/glx - libdbe_la_LDFLAGS = -avoid-version libdbe_la_LIBADD = $(top_builddir)/dbe/libdbe.la 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_LIBADD = $(top_builddir)/fb/libfb.la libfb_la_SOURCES = $(top_builddir)/fb/fbcmap_mi.c fbmodule.c diff --git a/hw/xfree86/dixmods/glamor_module.c b/hw/xfree86/dixmods/glamor_module.c deleted file mode 100644 index ee2dba871..000000000 --- a/hw/xfree86/dixmods/glamor_module.c +++ /dev/null @@ -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 -#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 }; diff --git a/hw/xfree86/glamor/Makefile.am b/hw/xfree86/glamor/Makefile.am deleted file mode 100644 index 1d729f46b..000000000 --- a/hw/xfree86/glamor/Makefile.am +++ /dev/null @@ -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 diff --git a/hw/xfree86/glamor/glamor_crtc.c b/hw/xfree86/glamor/glamor_crtc.c deleted file mode 100644 index ce4f31f54..000000000 --- a/hw/xfree86/glamor/glamor_crtc.c +++ /dev/null @@ -1,1565 +0,0 @@ -/* - * Copyright © 2007 Red Hat, Inc. - * 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: - * Dave Airlie - * - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "glamor_ddx.h" - -typedef struct { - int fd; - uint32_t fb_id; - drmModeResPtr mode_res; - int cpp; - - drmEventContext event_context; - void *event_data; - int old_fb_id; - int flip_count; -} drmmode_rec, *drmmode_ptr; - -typedef struct { - drmmode_ptr drmmode; - drmModeCrtcPtr mode_crtc; - uint32_t rotate_fb_id; - struct glamor_gbm_cursor *cursor; -} drmmode_crtc_private_rec, *drmmode_crtc_private_ptr; - -typedef struct { - drmModePropertyPtr mode_prop; - uint64_t value; - int num_atoms; /* if range prop, num_atoms == 1; if enum prop, num_atoms == num_enums + 1 */ - Atom *atoms; -} drmmode_prop_rec, *drmmode_prop_ptr; - -struct fixed_panel_lvds { - int hdisplay; - int vdisplay; -}; -typedef struct { - drmmode_ptr drmmode; - int output_id; - drmModeConnectorPtr mode_output; - drmModeEncoderPtr mode_encoder; - drmModePropertyBlobPtr edid_blob; - int num_props; - drmmode_prop_ptr props; - void *private_data; - int dpms_mode; - char *backlight_iface; - int backlight_active_level; - int backlight_max; -} drmmode_output_private_rec, *drmmode_output_private_ptr; - -static void -drmmode_output_dpms(xf86OutputPtr output, int mode); -static Bool -drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height); - -#define BACKLIGHT_CLASS "/sys/class/backlight" - -/* - * List of available kernel interfaces in priority order - */ -static char *backlight_interfaces[] = { - "asus-laptop", - "eeepc", - "thinkpad_screen", - "acpi_video1", - "acpi_video0", - "fujitsu-laptop", - "sony", - "samsung", - NULL, -}; -/* - * Must be long enough for BACKLIGHT_CLASS + '/' + longest in above table + - * '/' + "max_backlight" - */ -#define BACKLIGHT_PATH_LEN 80 -/* Enough for 10 digits of backlight + '\n' + '\0' */ -#define BACKLIGHT_VALUE_LEN 12 - -static void -drmmode_backlight_set(xf86OutputPtr output, int level) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - char path[BACKLIGHT_PATH_LEN], val[BACKLIGHT_VALUE_LEN]; - int fd, len, ret; - - if (level > drmmode_output->backlight_max) - level = drmmode_output->backlight_max; - if (! drmmode_output->backlight_iface || level < 0) - return; - - len = snprintf(val, BACKLIGHT_VALUE_LEN, "%d\n", level); - sprintf(path, "%s/%s/brightness", - BACKLIGHT_CLASS, drmmode_output->backlight_iface); - fd = open(path, O_RDWR); - if (fd == -1) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, "failed to open %s for backlight " - "control: %s\n", path, strerror(errno)); - return; - } - - ret = write(fd, val, len); - if (ret == -1) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, "write to %s for backlight " - "control failed: %s\n", path, strerror(errno)); - } - - close(fd); -} - -static int -drmmode_backlight_get(xf86OutputPtr output) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - char path[BACKLIGHT_PATH_LEN], val[BACKLIGHT_VALUE_LEN]; - int fd, level; - - if (! drmmode_output->backlight_iface) - return -1; - - sprintf(path, "%s/%s/actual_brightness", - BACKLIGHT_CLASS, drmmode_output->backlight_iface); - fd = open(path, O_RDONLY); - if (fd == -1) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, "failed to open %s " - "for backlight control: %s\n", path, strerror(errno)); - return -1; - } - - memset(val, 0, sizeof(val)); - if (read(fd, val, BACKLIGHT_VALUE_LEN) == -1) { - close(fd); - return -1; - } - - close(fd); - - level = atoi(val); - if (level > drmmode_output->backlight_max) - level = drmmode_output->backlight_max; - if (level < 0) - level = -1; - return level; -} - -static int -drmmode_backlight_get_max(xf86OutputPtr output) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - char path[BACKLIGHT_PATH_LEN], val[BACKLIGHT_VALUE_LEN]; - int fd, max = 0; - - sprintf(path, "%s/%s/max_brightness", - BACKLIGHT_CLASS, drmmode_output->backlight_iface); - fd = open(path, O_RDONLY); - if (fd == -1) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, "failed to open %s " - "for backlight control: %s\n", path, strerror(errno)); - return 0; - } - - memset(val, 0, sizeof(val)); - if (read(fd, val, BACKLIGHT_VALUE_LEN) == -1) { - close(fd); - return -1; - } - - close(fd); - - max = atoi(val); - if (max <= 0) - max = -1; - return max; -} - -static void -drmmode_backlight_init(xf86OutputPtr output) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - char path[BACKLIGHT_PATH_LEN]; - struct stat buf; - int i; - - for (i = 0; backlight_interfaces[i] != NULL; i++) { - sprintf(path, "%s/%s", BACKLIGHT_CLASS, backlight_interfaces[i]); - if (!stat(path, &buf)) { - drmmode_output->backlight_iface = backlight_interfaces[i]; - xf86DrvMsg(output->scrn->scrnIndex, X_INFO, - "found backlight control interface %s\n", path); - drmmode_output->backlight_max = drmmode_backlight_get_max(output); - drmmode_output->backlight_active_level = drmmode_backlight_get(output); - return; - } - } - drmmode_output->backlight_iface = NULL; -} - - -static void -drmmode_ConvertFromKMode(ScrnInfoPtr scrn, - drmModeModeInfoPtr kmode, - DisplayModePtr mode) -{ - memset(mode, 0, sizeof(DisplayModeRec)); - mode->status = MODE_OK; - - mode->Clock = kmode->clock; - - mode->HDisplay = kmode->hdisplay; - mode->HSyncStart = kmode->hsync_start; - mode->HSyncEnd = kmode->hsync_end; - mode->HTotal = kmode->htotal; - mode->HSkew = kmode->hskew; - - mode->VDisplay = kmode->vdisplay; - mode->VSyncStart = kmode->vsync_start; - mode->VSyncEnd = kmode->vsync_end; - mode->VTotal = kmode->vtotal; - mode->VScan = kmode->vscan; - - mode->Flags = kmode->flags; //& FLAG_BITS; - mode->name = strdup(kmode->name); - - if (kmode->type & DRM_MODE_TYPE_DRIVER) - mode->type = M_T_DRIVER; - if (kmode->type & DRM_MODE_TYPE_PREFERRED) - mode->type |= M_T_PREFERRED; - xf86SetModeCrtc (mode, scrn->adjustFlags); -} - -static void -drmmode_ConvertToKMode(ScrnInfoPtr scrn, - drmModeModeInfoPtr kmode, - DisplayModePtr mode) -{ - memset(kmode, 0, sizeof(*kmode)); - - kmode->clock = mode->Clock; - kmode->hdisplay = mode->HDisplay; - kmode->hsync_start = mode->HSyncStart; - kmode->hsync_end = mode->HSyncEnd; - kmode->htotal = mode->HTotal; - kmode->hskew = mode->HSkew; - - kmode->vdisplay = mode->VDisplay; - kmode->vsync_start = mode->VSyncStart; - kmode->vsync_end = mode->VSyncEnd; - kmode->vtotal = mode->VTotal; - kmode->vscan = mode->VScan; - - kmode->flags = mode->Flags; //& FLAG_BITS; - if (mode->name) - strncpy(kmode->name, mode->name, DRM_DISPLAY_MODE_LEN); - kmode->name[DRM_DISPLAY_MODE_LEN-1] = 0; - -} - -static void -drmmode_crtc_dpms(xf86CrtcPtr drmmode_crtc, int mode) -{ - -} - -static Bool -drmmode_update_fb (ScrnInfoPtr scrn, int width, int height) -{ - xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); - drmmode_crtc_private_ptr - drmmode_crtc = xf86_config->crtc[0]->driver_private; - drmmode_ptr drmmode = drmmode_crtc->drmmode; - uint32_t handle, pitch; - int ret; - - if (drmmode->fb_id != 0 && - scrn->virtualX == width && scrn->virtualY == height) - return TRUE; - if (!glamor_front_buffer_resize(scrn, width, height)) - return FALSE; - if (drmmode->fb_id != 0) - drmModeRmFB(drmmode->fd, drmmode->fb_id); - glamor_frontbuffer_handle(scrn, &handle, &pitch); - ret = drmModeAddFB(drmmode->fd, width, height, scrn->depth, - scrn->bitsPerPixel, pitch /** drmmode->cpp*/, - handle, &drmmode->fb_id); - if (ret) - /* FIXME: Undo glamor_resize() */ - return FALSE; - - return TRUE; -} - -static Bool -drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode, - Rotation rotation, int x, int y) -{ - ScrnInfoPtr scrn = crtc->scrn; - xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn); - drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; - drmmode_ptr drmmode = drmmode_crtc->drmmode; - int saved_x, saved_y; - Rotation saved_rotation; - DisplayModeRec saved_mode; - uint32_t *output_ids; - int output_count = 0; - int ret = TRUE; - int i; - int fb_id; - uint32_t handle, pitch; - drmModeModeInfo kmode; - - if (drmmode->fb_id == 0) { - - glamor_frontbuffer_handle(scrn, &handle, &pitch); - ret = drmModeAddFB(drmmode->fd, - scrn->virtualX, scrn->virtualY, - scrn->depth, scrn->bitsPerPixel, - pitch, handle, - &drmmode->fb_id); - if (ret < 0) { - ErrorF("failed to add fb\n"); - return FALSE; - } - } - - saved_mode = crtc->mode; - saved_x = crtc->x; - saved_y = crtc->y; - saved_rotation = crtc->rotation; - - crtc->mode = *mode; - crtc->x = x; - crtc->y = y; - crtc->rotation = rotation; - - output_ids = calloc(sizeof(uint32_t), xf86_config->num_output); - if (!output_ids) { - ret = FALSE; - goto done; - } - - for (i = 0; i < xf86_config->num_output; i++) { - xf86OutputPtr output = xf86_config->output[i]; - drmmode_output_private_ptr drmmode_output; - - if (output->crtc != crtc) - continue; - - drmmode_output = output->driver_private; - output_ids[output_count] = - drmmode_output->mode_output->connector_id; - output_count++; - } - -#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,5,99,0,0) - if (!xf86CrtcRotate(crtc, mode, rotation)) - goto done; -#else - if (!xf86CrtcRotate(crtc)) - goto done; -#endif - -#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,7,0,0,0) - crtc->funcs->gamma_set(crtc, crtc->gamma_red, crtc->gamma_green, - crtc->gamma_blue, crtc->gamma_size); -#endif - - drmmode_ConvertToKMode(crtc->scrn, &kmode, mode); - - - fb_id = drmmode->fb_id; - if (drmmode_crtc->rotate_fb_id) { - fb_id = drmmode_crtc->rotate_fb_id; - x = 0; - y = 0; - } - ret = drmModeSetCrtc(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, - fb_id, x, y, output_ids, output_count, &kmode); - if (ret) - xf86DrvMsg(crtc->scrn->scrnIndex, X_ERROR, - "failed to set mode: %s", strerror(-ret)); - else - ret = TRUE; - - /* Turn on any outputs on this crtc that may have been disabled */ - for (i = 0; i < xf86_config->num_output; i++) { - xf86OutputPtr output = xf86_config->output[i]; - - if (output->crtc != crtc) - continue; - - drmmode_output_dpms(output, DPMSModeOn); - } - - if (scrn->pScreen) - xf86_reload_cursors(scrn->pScreen); -done: - if (!ret) { - crtc->x = saved_x; - crtc->y = saved_y; - crtc->rotation = saved_rotation; - crtc->mode = saved_mode; - } - return ret; -} - -static void -drmmode_set_cursor_colors (xf86CrtcPtr crtc, int bg, int fg) -{ - -} - -static void -drmmode_set_cursor_position (xf86CrtcPtr crtc, int x, int y) -{ - drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; - drmmode_ptr drmmode = drmmode_crtc->drmmode; - - drmModeMoveCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, x, y); -} - -static void -drmmode_load_cursor_argb (xf86CrtcPtr crtc, CARD32 *image) -{ - drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; - ScrnInfoPtr scrn = crtc->scrn; - ScreenPtr screen = screenInfo.screens[scrn->scrnIndex]; - struct glamor_ddx_screen_private *glamor = glamor_ddx_get_screen_private(scrn); - GCPtr gc; - - if (drmmode_crtc->cursor == NULL) - { - drmmode_crtc->cursor = calloc(1, sizeof(*drmmode_crtc->cursor)); - if (drmmode_crtc->cursor == NULL) { - ErrorF("Failed to allocate cursor.\n"); - return; - } - if (!glamor_create_cursor(scrn, drmmode_crtc->cursor, 64, 64)) { - free(drmmode_crtc->cursor); - drmmode_crtc->cursor = NULL; - ErrorF("Failed to create glamor cursor.\n"); - return; - } - } - - gc = GetScratchGC (drmmode_crtc->cursor->cursor_pixmap->drawable.depth, screen); - if (!gc) - return; - - ValidateGC (&drmmode_crtc->cursor->cursor_pixmap->drawable, gc); - (*gc->ops->PutImage)(&drmmode_crtc->cursor->cursor_pixmap->drawable, gc, - 32, 0, 0, 64, 64, 0, ZPixmap, (char*)image); - FreeScratchGC (gc); -} - - -static void -drmmode_hide_cursor (xf86CrtcPtr crtc) -{ - drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; - drmmode_ptr drmmode = drmmode_crtc->drmmode; - - drmModeSetCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, - 0, 64, 64); -} - - -static void -_drmmode_destroy_cursor(xf86CrtcPtr crtc) -{ - drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; - - if (drmmode_crtc->cursor == NULL) - return; - drmmode_hide_cursor(crtc); - glamor_destroy_cursor(crtc->scrn, drmmode_crtc->cursor); - free(drmmode_crtc->cursor); - drmmode_crtc->cursor = NULL; -} - -static void -drmmode_destroy_cursor(ScrnInfoPtr scrn) -{ - int i; - xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); - - for (i = 0; i < xf86_config->num_crtc; i++) - _drmmode_destroy_cursor(xf86_config->crtc[i]); -} - - - - -static void -drmmode_show_cursor (xf86CrtcPtr crtc) -{ - drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; - drmmode_ptr drmmode = drmmode_crtc->drmmode; - uint32_t handle, stride; - - ErrorF("show cursor\n"); - glamor_cursor_handle(drmmode_crtc->cursor, &handle, &stride); - - drmModeSetCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, - handle, 64, 64); -} - -#if 0 -static void * -drmmode_crtc_shadow_allocate(xf86CrtcPtr crtc, int width, int height) -{ - ScrnInfoPtr scrn = crtc->scrn; - intel_screen_private *intel = intel_get_screen_private(scrn); - drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; - drmmode_ptr drmmode = drmmode_crtc->drmmode; - int size, ret; - unsigned long rotate_pitch; - - width = i830_pad_drawable_width(width, drmmode->cpp); - rotate_pitch = width * drmmode->cpp; - size = rotate_pitch * height; - - drmmode_crtc->rotate_bo = - drm_intel_bo_alloc(intel->bufmgr, "rotate", size, 4096); - - if (!drmmode_crtc->rotate_bo) { - xf86DrvMsg(crtc->scrn->scrnIndex, X_ERROR, - "Couldn't allocate shadow memory for rotated CRTC\n"); - return NULL; - } - - drm_intel_bo_disable_reuse(drmmode_crtc->rotate_bo); - - ret = drmModeAddFB(drmmode->fd, width, height, crtc->scrn->depth, - crtc->scrn->bitsPerPixel, rotate_pitch, - drmmode_crtc->rotate_bo->handle, - &drmmode_crtc->rotate_fb_id); - if (ret) { - ErrorF("failed to add rotate fb\n"); - drm_intel_bo_unreference(drmmode_crtc->rotate_bo); - return NULL; - } - - return drmmode_crtc->rotate_bo; -} - -static PixmapPtr -drmmode_crtc_shadow_create(xf86CrtcPtr crtc, void *data, int width, int height) -{ - ScrnInfoPtr scrn = crtc->scrn; - intel_screen_private *intel = intel_get_screen_private(scrn); - drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; - drmmode_ptr drmmode = drmmode_crtc->drmmode; - unsigned long rotate_pitch; - PixmapPtr rotate_pixmap; - - if (!data) { - data = drmmode_crtc_shadow_allocate (crtc, width, height); - if (!data) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "Couldn't allocate shadow pixmap for rotated CRTC\n"); - return NULL; - } - } - - rotate_pitch = - i830_pad_drawable_width(width, drmmode->cpp) * drmmode->cpp; - rotate_pixmap = GetScratchPixmapHeader(scrn->pScreen, - width, height, - scrn->depth, - scrn->bitsPerPixel, - rotate_pitch, - NULL); - - if (rotate_pixmap == NULL) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "Couldn't allocate shadow pixmap for rotated CRTC\n"); - return NULL; - } - - if (drmmode_crtc->rotate_bo) - i830_set_pixmap_bo(rotate_pixmap, drmmode_crtc->rotate_bo); - - intel->shadow_present = TRUE; - - return rotate_pixmap; -} - -static void -drmmode_crtc_shadow_destroy(xf86CrtcPtr crtc, PixmapPtr rotate_pixmap, void *data) -{ -} -#endif - -static void -drmmode_crtc_gamma_set(xf86CrtcPtr crtc, - CARD16 *red, CARD16 *green, CARD16 *blue, int size) -{ - drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; - drmmode_ptr drmmode = drmmode_crtc->drmmode; - - drmModeCrtcSetGamma(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, - size, red, green, blue); -} -static void -drmmode_crtc_destroy(xf86CrtcPtr crtc) -{ - ScrnInfoPtr scrn = crtc->scrn; - _drmmode_destroy_cursor(crtc); - crtc->driver_private = NULL; -} - -static const xf86CrtcFuncsRec drmmode_crtc_funcs = { - .dpms = drmmode_crtc_dpms, - .set_mode_major = drmmode_set_mode_major, - .set_cursor_colors = drmmode_set_cursor_colors, - .set_cursor_position = drmmode_set_cursor_position, - .show_cursor = drmmode_show_cursor, - .hide_cursor = drmmode_hide_cursor, - .load_cursor_argb = drmmode_load_cursor_argb, - .load_cursor_image = NULL, -#if 0 - .shadow_create = drmmode_crtc_shadow_create, - .shadow_allocate = drmmode_crtc_shadow_allocate, - .shadow_destroy = drmmode_crtc_shadow_destroy, -#endif - .gamma_set = drmmode_crtc_gamma_set, - .destroy = drmmode_crtc_destroy -}; - - -static void -drmmode_crtc_init(ScrnInfoPtr scrn, drmmode_ptr drmmode, int num) -{ - xf86CrtcPtr crtc; - drmmode_crtc_private_ptr drmmode_crtc; - - crtc = xf86CrtcCreate(scrn, &drmmode_crtc_funcs); - if (crtc == NULL) - return; - - drmmode_crtc = xnfcalloc(sizeof(drmmode_crtc_private_rec), 1); - drmmode_crtc->mode_crtc = drmModeGetCrtc(drmmode->fd, - drmmode->mode_res->crtcs[num]); - drmmode_crtc->drmmode = drmmode; - crtc->driver_private = drmmode_crtc; - - return; -} - -static xf86OutputStatus -drmmode_output_detect(xf86OutputPtr output) -{ - /* go to the hw and retrieve a new output struct */ - drmmode_output_private_ptr drmmode_output = output->driver_private; - drmmode_ptr drmmode = drmmode_output->drmmode; - xf86OutputStatus status; - drmModeFreeConnector(drmmode_output->mode_output); - - drmmode_output->mode_output = - drmModeGetConnector(drmmode->fd, drmmode_output->output_id); - - switch (drmmode_output->mode_output->connection) { - case DRM_MODE_CONNECTED: - status = XF86OutputStatusConnected; - break; - case DRM_MODE_DISCONNECTED: - status = XF86OutputStatusDisconnected; - break; - default: - case DRM_MODE_UNKNOWNCONNECTION: - status = XF86OutputStatusUnknown; - break; - } - return status; -} - -static Bool -drmmode_output_mode_valid(xf86OutputPtr output, DisplayModePtr pModes) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - drmModeConnectorPtr koutput = drmmode_output->mode_output; - struct fixed_panel_lvds *p_lvds = drmmode_output->private_data; - - /* - * If the connector type is LVDS, we will use the panel limit to - * verfiy whether the mode is valid. - */ - if ((koutput->connector_type == DRM_MODE_CONNECTOR_LVDS) && p_lvds) { - if (pModes->HDisplay > p_lvds->hdisplay || - pModes->VDisplay > p_lvds->vdisplay) - return MODE_PANEL; - else - return MODE_OK; - } - return MODE_OK; -} - -static void fill_detailed_lvds_block(struct detailed_monitor_section *det_mon, - DisplayModePtr mode) -{ - struct detailed_timings *timing = &det_mon->section.d_timings; - - det_mon->type = DT; - timing->clock = mode->Clock * 1000; - timing->h_active = mode->HDisplay; - timing->h_blanking = mode->HTotal - mode->HDisplay; - timing->v_active = mode->VDisplay; - timing->v_blanking = mode->VTotal - mode->VDisplay; - timing->h_sync_off = mode->HSyncStart - mode->HDisplay; - timing->h_sync_width = mode->HSyncEnd - mode->HSyncStart; - timing->v_sync_off = mode->VSyncStart - mode->VDisplay; - timing->v_sync_width = mode->VSyncEnd - mode->VSyncStart; - - if (mode->Flags & V_PVSYNC) - timing->misc |= 0x02; - - if (mode->Flags & V_PHSYNC) - timing->misc |= 0x01; -} - -static int drmmode_output_lvds_edid(xf86OutputPtr output, - struct fixed_panel_lvds *p_lvds) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - drmModeConnectorPtr koutput = drmmode_output->mode_output; - int i, j; - DisplayModePtr pmode; - xf86MonPtr edid_mon; - drmModeModeInfo *mode_ptr; - struct detailed_monitor_section *det_mon; - - if (output->MonInfo) { - /* - * If there exists the EDID, we will either find a DS_RANGES - * or replace a DS_VENDOR block, smashing it into a DS_RANGES - * block with opern refresh to match all the default modes. - */ - int edid_det_block_num; - edid_mon = output->MonInfo; - edid_mon->features.msc |= 0x01; - j = -1; - edid_det_block_num = sizeof(edid_mon->det_mon) / - sizeof(edid_mon->det_mon[0]); - for (i = 0; i < edid_det_block_num; i++) { - if (edid_mon->det_mon[i].type >= DS_VENDOR && j == -1) - j = i; - if (edid_mon->det_mon[i].type == DS_RANGES) { - j = i; - break; - } - } - if (j != -1) { - struct monitor_ranges *ranges = - &edid_mon->det_mon[j].section.ranges; - edid_mon->det_mon[j].type = DS_RANGES; - ranges->min_v = 0; - ranges->max_v = 200; - ranges->min_h = 0; - ranges->max_h = 200; - } - return 0; - } - /* - * If there is no EDID, we will construct a bogus EDID for LVDS output - * device. This is similar to what we have done in i830_lvds.c - */ - edid_mon = NULL; - edid_mon = calloc(1, sizeof(xf86Monitor)); - if (!edid_mon) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "Can't allocate memory for edid_mon.\n"); - return 0; - } - /* Find the fixed panel mode. - * In theory when there is no EDID, KMS kernel will return only one - * mode. And this can be regarded as fixed lvds panel mode. - * But it will be better to traverse the mode list to get the fixed - * lvds panel mode again as we don't know whether some new modes - * are added for the LVDS output device - */ - j = 0; - for (i = 0; i < koutput->count_modes; i++) { - mode_ptr = &koutput->modes[i]; - if ((mode_ptr->hdisplay == p_lvds->hdisplay) && - (mode_ptr->vdisplay == p_lvds->vdisplay)) { - /* find the fixed panel mode */ - j = i; - break; - } - } - pmode = xnfalloc(sizeof(DisplayModeRec)); - drmmode_ConvertFromKMode(output->scrn, &koutput->modes[j], pmode); - /*support DPM, instead of DPMS*/ - edid_mon->features.dpms |= 0x1; - /*defaultly support RGB color display*/ - edid_mon->features.display_type |= 0x1; - /*defaultly display support continuous-freqencey*/ - edid_mon->features.msc |= 0x1; - /*defaultly the EDID version is 1.4 */ - edid_mon->ver.version = 1; - edid_mon->ver.revision = 4; - det_mon = edid_mon->det_mon; - if (pmode) { - /* now we construct new EDID monitor, - * so filled one detailed timing block - */ - fill_detailed_lvds_block(det_mon, pmode); - /* the filed timing block should be set preferred*/ - edid_mon->features.msc |= 0x2; - det_mon = det_mon + 1; - } - /* Set wide sync ranges so we get all modes - * handed to valid_mode for checking - */ - det_mon->type = DS_RANGES; - det_mon->section.ranges.min_v = 0; - det_mon->section.ranges.max_v = 200; - det_mon->section.ranges.min_h = 0; - det_mon->section.ranges.max_h = 200; - output->MonInfo = edid_mon; - return 0; -} - -static DisplayModePtr -drmmode_output_get_modes(xf86OutputPtr output) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - drmModeConnectorPtr koutput = drmmode_output->mode_output; - drmmode_ptr drmmode = drmmode_output->drmmode; - int i; - DisplayModePtr Modes = NULL, Mode; - drmModePropertyPtr props; - struct fixed_panel_lvds *p_lvds; - drmModeModeInfo *mode_ptr; - - /* look for an EDID property */ - for (i = 0; i < koutput->count_props; i++) { - props = drmModeGetProperty(drmmode->fd, koutput->props[i]); - if (!props) - continue; - if (!(props->flags & DRM_MODE_PROP_BLOB)) { - drmModeFreeProperty(props); - continue; - } - - if (!strcmp(props->name, "EDID")) { - drmModeFreePropertyBlob(drmmode_output->edid_blob); - drmmode_output->edid_blob = - drmModeGetPropertyBlob(drmmode->fd, - koutput->prop_values[i]); - } - drmModeFreeProperty(props); - } - - if (drmmode_output->edid_blob) - xf86OutputSetEDID(output, - xf86InterpretEDID(output->scrn->scrnIndex, - drmmode_output->edid_blob->data)); - else - xf86OutputSetEDID(output, - xf86InterpretEDID(output->scrn->scrnIndex, - NULL)); - - /* modes should already be available */ - for (i = 0; i < koutput->count_modes; i++) { - Mode = xnfalloc(sizeof(DisplayModeRec)); - - drmmode_ConvertFromKMode(output->scrn, &koutput->modes[i], - Mode); - Modes = xf86ModesAdd(Modes, Mode); - - } - p_lvds = drmmode_output->private_data; - /* - * If the connector type is LVDS, we will traverse the kernel mode to - * get the panel limit. - * If it is incorrect, please fix me. - */ - if ((koutput->connector_type == DRM_MODE_CONNECTOR_LVDS) && p_lvds) { - p_lvds->hdisplay = 0; - p_lvds->vdisplay = 0; - for (i = 0; i < koutput->count_modes; i++) { - mode_ptr = &koutput->modes[i]; - if ((mode_ptr->hdisplay >= p_lvds->hdisplay) && - (mode_ptr->vdisplay >= p_lvds->vdisplay)) { - p_lvds->hdisplay = mode_ptr->hdisplay; - p_lvds->vdisplay = mode_ptr->vdisplay; - } - } - if (!p_lvds->hdisplay || !p_lvds->vdisplay) - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "Incorrect KMS mode.\n"); - drmmode_output_lvds_edid(output, p_lvds); - } - return Modes; -} - -static void -drmmode_output_destroy(xf86OutputPtr output) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - int i; - - if (drmmode_output->edid_blob) - drmModeFreePropertyBlob(drmmode_output->edid_blob); - for (i = 0; i < drmmode_output->num_props; i++) { - drmModeFreeProperty(drmmode_output->props[i].mode_prop); - free(drmmode_output->props[i].atoms); - } - free(drmmode_output->props); - drmModeFreeConnector(drmmode_output->mode_output); - if (drmmode_output->private_data) { - free(drmmode_output->private_data); - drmmode_output->private_data = NULL; - } - if (drmmode_output->backlight_iface) - drmmode_backlight_set(output, drmmode_output->backlight_active_level); - free(drmmode_output); - output->driver_private = NULL; -} - -static void -drmmode_output_dpms_backlight(xf86OutputPtr output, int oldmode, int mode) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - - if (!drmmode_output->backlight_iface) - return; - - if (mode == DPMSModeOn) { - /* If we're going from off->on we may need to turn on the backlight. */ - if (oldmode != DPMSModeOn) - drmmode_backlight_set(output, drmmode_output->backlight_active_level); - } else { - /* Only save the current backlight value if we're going from on to off. */ - if (oldmode == DPMSModeOn) - drmmode_output->backlight_active_level = drmmode_backlight_get(output); - drmmode_backlight_set(output, 0); - } -} - -static void -drmmode_output_dpms(xf86OutputPtr output, int mode) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - drmModeConnectorPtr koutput = drmmode_output->mode_output; - drmmode_ptr drmmode = drmmode_output->drmmode; - int i; - drmModePropertyPtr props; - - for (i = 0; i < koutput->count_props; i++) { - props = drmModeGetProperty(drmmode->fd, koutput->props[i]); - if (!props) - continue; - - if (!strcmp(props->name, "DPMS")) { - drmModeConnectorSetProperty(drmmode->fd, - drmmode_output->output_id, - props->prop_id, - mode); - drmmode_output_dpms_backlight(output, - drmmode_output->dpms_mode, - mode); - drmmode_output->dpms_mode = mode; - drmModeFreeProperty(props); - return; - } - drmModeFreeProperty(props); - } -} - -static Bool -drmmode_property_ignore(drmModePropertyPtr prop) -{ - if (!prop) - return TRUE; - /* ignore blob prop */ - if (prop->flags & DRM_MODE_PROP_BLOB) - return TRUE; - /* ignore standard property */ - if (!strcmp(prop->name, "EDID") || - !strcmp(prop->name, "DPMS")) - return TRUE; - - return FALSE; -} - -#define BACKLIGHT_NAME "Backlight" -#define BACKLIGHT_DEPRECATED_NAME "BACKLIGHT" -static Atom backlight_atom, backlight_deprecated_atom; - -static void -drmmode_output_create_resources(xf86OutputPtr output) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - drmModeConnectorPtr mode_output = drmmode_output->mode_output; - drmmode_ptr drmmode = drmmode_output->drmmode; - drmModePropertyPtr drmmode_prop; - int i, j, err; - - drmmode_output->props = calloc(mode_output->count_props, sizeof(drmmode_prop_rec)); - if (!drmmode_output->props) - return; - - drmmode_output->num_props = 0; - for (i = 0, j = 0; i < mode_output->count_props; i++) { - drmmode_prop = drmModeGetProperty(drmmode->fd, mode_output->props[i]); - if (drmmode_property_ignore(drmmode_prop)) { - drmModeFreeProperty(drmmode_prop); - continue; - } - drmmode_output->props[j].mode_prop = drmmode_prop; - drmmode_output->props[j].value = mode_output->prop_values[i]; - drmmode_output->num_props++; - j++; - } - - for (i = 0; i < drmmode_output->num_props; i++) { - drmmode_prop_ptr p = &drmmode_output->props[i]; - drmmode_prop = p->mode_prop; - - if (drmmode_prop->flags & DRM_MODE_PROP_RANGE) { - INT32 range[2]; - - p->num_atoms = 1; - p->atoms = calloc(p->num_atoms, sizeof(Atom)); - if (!p->atoms) - continue; - p->atoms[0] = MakeAtom(drmmode_prop->name, strlen(drmmode_prop->name), TRUE); - range[0] = drmmode_prop->values[0]; - range[1] = drmmode_prop->values[1]; - err = RRConfigureOutputProperty(output->randr_output, p->atoms[0], - FALSE, TRUE, - drmmode_prop->flags & DRM_MODE_PROP_IMMUTABLE ? TRUE : FALSE, - 2, range); - if (err != 0) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "RRConfigureOutputProperty error, %d\n", err); - } - err = RRChangeOutputProperty(output->randr_output, p->atoms[0], - XA_INTEGER, 32, PropModeReplace, 1, &p->value, FALSE, TRUE); - if (err != 0) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "RRChangeOutputProperty error, %d\n", err); - } - } else if (drmmode_prop->flags & DRM_MODE_PROP_ENUM) { - p->num_atoms = drmmode_prop->count_enums + 1; - p->atoms = calloc(p->num_atoms, sizeof(Atom)); - if (!p->atoms) - continue; - p->atoms[0] = MakeAtom(drmmode_prop->name, strlen(drmmode_prop->name), TRUE); - for (j = 1; j <= drmmode_prop->count_enums; j++) { - struct drm_mode_property_enum *e = &drmmode_prop->enums[j-1]; - p->atoms[j] = MakeAtom(e->name, strlen(e->name), TRUE); - } - err = RRConfigureOutputProperty(output->randr_output, p->atoms[0], - FALSE, FALSE, - drmmode_prop->flags & DRM_MODE_PROP_IMMUTABLE ? TRUE : FALSE, - p->num_atoms - 1, (INT32 *)&p->atoms[1]); - if (err != 0) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "RRConfigureOutputProperty error, %d\n", err); - } - for (j = 0; j < drmmode_prop->count_enums; j++) - if (drmmode_prop->enums[j].value == p->value) - break; - /* there's always a matching value */ - err = RRChangeOutputProperty(output->randr_output, p->atoms[0], - XA_ATOM, 32, PropModeReplace, 1, &p->atoms[j+1], FALSE, TRUE); - if (err != 0) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "RRChangeOutputProperty error, %d\n", err); - } - } - } - - if (drmmode_output->backlight_iface) { - INT32 data, backlight_range[2]; - /* Set up the backlight property, which takes effect immediately - * and accepts values only within the backlight_range. */ - backlight_atom = MakeAtom(BACKLIGHT_NAME, sizeof(BACKLIGHT_NAME) - 1, TRUE); - backlight_deprecated_atom = MakeAtom(BACKLIGHT_DEPRECATED_NAME, - sizeof(BACKLIGHT_DEPRECATED_NAME) - 1, TRUE); - - backlight_range[0] = 0; - backlight_range[1] = drmmode_output->backlight_max; - err = RRConfigureOutputProperty(output->randr_output, backlight_atom, - FALSE, TRUE, FALSE, 2, backlight_range); - if (err != 0) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "RRConfigureOutputProperty error, %d\n", err); - } - err = RRConfigureOutputProperty(output->randr_output, backlight_deprecated_atom, - FALSE, TRUE, FALSE, 2, backlight_range); - if (err != 0) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "RRConfigureOutputProperty error, %d\n", err); - } - /* Set the current value of the backlight property */ - data = drmmode_output->backlight_active_level; - err = RRChangeOutputProperty(output->randr_output, backlight_atom, - XA_INTEGER, 32, PropModeReplace, 1, &data, - FALSE, TRUE); - if (err != 0) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "RRChangeOutputProperty error, %d\n", err); - } - err = RRChangeOutputProperty(output->randr_output, backlight_deprecated_atom, - XA_INTEGER, 32, PropModeReplace, 1, &data, - FALSE, TRUE); - if (err != 0) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "RRChangeOutputProperty error, %d\n", err); - } - } -} - -static Bool -drmmode_output_set_property(xf86OutputPtr output, Atom property, - RRPropertyValuePtr value) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - drmmode_ptr drmmode = drmmode_output->drmmode; - int i; - - if (property == backlight_atom || property == backlight_deprecated_atom) { - INT32 val; - - if (value->type != XA_INTEGER || value->format != 32 || - value->size != 1) - { - return FALSE; - } - - val = *(INT32 *)value->data; - if (val < 0 || val > drmmode_output->backlight_max) - return FALSE; - - if (drmmode_output->dpms_mode == DPMSModeOn) - drmmode_backlight_set(output, val); - drmmode_output->backlight_active_level = val; - return TRUE; - } - - for (i = 0; i < drmmode_output->num_props; i++) { - drmmode_prop_ptr p = &drmmode_output->props[i]; - - if (p->atoms[0] != property) - continue; - - if (p->mode_prop->flags & DRM_MODE_PROP_RANGE) { - uint32_t val; - - if (value->type != XA_INTEGER || value->format != 32 || - value->size != 1) - return FALSE; - val = *(uint32_t *)value->data; - - drmModeConnectorSetProperty(drmmode->fd, drmmode_output->output_id, - p->mode_prop->prop_id, (uint64_t)val); - return TRUE; - } else if (p->mode_prop->flags & DRM_MODE_PROP_ENUM) { - Atom atom; - const char *name; - int j; - - if (value->type != XA_ATOM || value->format != 32 || value->size != 1) - return FALSE; - memcpy(&atom, value->data, 4); - name = NameForAtom(atom); - - /* search for matching name string, then set its value down */ - for (j = 0; j < p->mode_prop->count_enums; j++) { - if (!strcmp(p->mode_prop->enums[j].name, name)) { - drmModeConnectorSetProperty(drmmode->fd, drmmode_output->output_id, - p->mode_prop->prop_id, p->mode_prop->enums[j].value); - return TRUE; - } - } - return FALSE; - } - } - - return TRUE; -} - -static Bool -drmmode_output_get_property(xf86OutputPtr output, Atom property) -{ - drmmode_output_private_ptr drmmode_output = output->driver_private; - int err; - - if (property == backlight_atom || property == backlight_deprecated_atom) { - INT32 val; - - if (! drmmode_output->backlight_iface) - return FALSE; - - val = drmmode_backlight_get(output); - if (val < 0) - return FALSE; - err = RRChangeOutputProperty(output->randr_output, property, - XA_INTEGER, 32, PropModeReplace, 1, &val, - FALSE, TRUE); - if (err != 0) { - xf86DrvMsg(output->scrn->scrnIndex, X_ERROR, - "RRChangeOutputProperty error, %d\n", err); - return FALSE; - } - - return TRUE; - } - - return TRUE; -} - -static const xf86OutputFuncsRec drmmode_output_funcs = { - .create_resources = drmmode_output_create_resources, -#ifdef RANDR_12_INTERFACE - .set_property = drmmode_output_set_property, - .get_property = drmmode_output_get_property, -#endif - .dpms = drmmode_output_dpms, - .detect = drmmode_output_detect, - .mode_valid = drmmode_output_mode_valid, - - .get_modes = drmmode_output_get_modes, - .destroy = drmmode_output_destroy -}; - -static int subpixel_conv_table[7] = { 0, SubPixelUnknown, - SubPixelHorizontalRGB, - SubPixelHorizontalBGR, - SubPixelVerticalRGB, - SubPixelVerticalBGR, - SubPixelNone }; - -static const char *output_names[] = { "None", - "VGA", - "DVI", - "DVI", - "DVI", - "Composite", - "TV", - "LVDS", - "CTV", - "DIN", - "DP", - "HDMI", - "HDMI", -}; - - -static void -drmmode_output_init(ScrnInfoPtr scrn, drmmode_ptr drmmode, int num) -{ - xf86OutputPtr output; - drmModeConnectorPtr koutput; - drmModeEncoderPtr kencoder; - drmmode_output_private_ptr drmmode_output; - char name[32]; - - koutput = drmModeGetConnector(drmmode->fd, - drmmode->mode_res->connectors[num]); - if (!koutput) - return; - - kencoder = drmModeGetEncoder(drmmode->fd, koutput->encoders[0]); - if (!kencoder) { - drmModeFreeConnector(koutput); - return; - } - - snprintf(name, 32, "%s%d", output_names[koutput->connector_type], - koutput->connector_type_id); - - output = xf86OutputCreate (scrn, &drmmode_output_funcs, name); - if (!output) { - drmModeFreeEncoder(kencoder); - drmModeFreeConnector(koutput); - return; - } - - drmmode_output = calloc(sizeof(drmmode_output_private_rec), 1); - if (!drmmode_output) { - xf86OutputDestroy(output); - drmModeFreeConnector(koutput); - drmModeFreeEncoder(kencoder); - return; - } - /* - * If the connector type of the output device is LVDS, we will - * allocate the private_data to store the panel limit. - * For example: hdisplay, vdisplay - */ - drmmode_output->private_data = NULL; - if (koutput->connector_type == DRM_MODE_CONNECTOR_LVDS) { - drmmode_output->private_data = calloc( - sizeof(struct fixed_panel_lvds), 1); - if (!drmmode_output->private_data) - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "Can't allocate private memory for LVDS.\n"); - } - drmmode_output->output_id = drmmode->mode_res->connectors[num]; - drmmode_output->mode_output = koutput; - drmmode_output->mode_encoder = kencoder; - drmmode_output->drmmode = drmmode; - output->mm_width = koutput->mmWidth; - output->mm_height = koutput->mmHeight; - - output->subpixel_order = subpixel_conv_table[koutput->subpixel]; - output->driver_private = drmmode_output; - - if (koutput->connector_type == DRM_MODE_CONNECTOR_LVDS) - drmmode_backlight_init(output); - - output->possible_crtcs = kencoder->possible_crtcs; - output->possible_clones = kencoder->possible_clones; - return; -} - - -static Bool -drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height) -{ - xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); - int i; - - if (!drmmode_update_fb(scrn, width, height)) - return FALSE; - for (i = 0; i < xf86_config->num_crtc; i++) { - xf86CrtcPtr crtc = xf86_config->crtc[i]; - - if (!crtc->enabled) - continue; - drmmode_set_mode_major(crtc, &crtc->mode, - crtc->rotation, crtc->x, crtc->y); - } - - return TRUE; -} - -static const xf86CrtcConfigFuncsRec drmmode_xf86crtc_config_funcs = { - drmmode_xf86crtc_resize -}; - -#if 0 -Bool -drmmode_do_pageflip(ScreenPtr screen, dri_bo *new_front, dri_bo *old_front, - void *data) -{ - ScrnInfoPtr scrn = xf86Screens[screen->myNum]; - intel_screen_private *intel = intel_get_screen_private(scrn); - xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); - drmmode_crtc_private_ptr drmmode_crtc = config->crtc[0]->driver_private; - drmmode_ptr drmmode = drmmode_crtc->drmmode; - unsigned int pitch = scrn->displayWidth * intel->cpp; - int i, old_fb_id; - unsigned int crtc_id; - - /* - * Create a new handle for the back buffer - */ - old_fb_id = drmmode->fb_id; - if (drmModeAddFB(drmmode->fd, scrn->virtualX, scrn->virtualY, - scrn->depth, scrn->bitsPerPixel, pitch, - new_front->handle, &drmmode->fb_id)) - goto error_out; - - /* - * Queue flips on all enabled CRTCs - * Note that if/when we get per-CRTC buffers, we'll have to update this. - * Right now it assumes a single shared fb across all CRTCs, with the - * kernel fixing up the offset of each CRTC as necessary. - * - * Also, flips queued on disabled or incorrectly configured displays - * may never complete; this is a configuration error. - */ - for (i = 0; i < config->num_crtc; i++) { - xf86CrtcPtr crtc = config->crtc[i]; - - if (!crtc->enabled) - continue; - - drmmode_crtc = crtc->driver_private; - crtc_id = drmmode_crtc->mode_crtc->crtc_id; - drmmode->event_data = data; - drmmode->flip_count++; - if (drmModePageFlip(drmmode->fd, crtc_id, drmmode->fb_id, - DRM_MODE_PAGE_FLIP_EVENT, drmmode)) { - xf86DrvMsg(scrn->scrnIndex, X_WARNING, - "flip queue failed: %s\n", strerror(errno)); - goto error_undo; - } - } - - dri_bo_pin(new_front, 0); - dri_bo_unpin(new_front); - - scrn->fbOffset = new_front->offset; - intel->front_buffer->bo = new_front; - intel->front_buffer->offset = new_front->offset; - drmmode->old_fb_id = old_fb_id; - - return TRUE; - -error_undo: - drmModeRmFB(drmmode->fd, drmmode->fb_id); - drmmode->fb_id = old_fb_id; - -error_out: - xf86DrvMsg(scrn->scrnIndex, X_WARNING, "Page flip failed: %s\n", - strerror(errno)); - return FALSE; -} - -static void -drmmode_vblank_handler(int fd, unsigned int frame, unsigned int tv_sec, - unsigned int tv_usec, void *event_data) -{ - I830DRI2FrameEventHandler(frame, tv_sec, tv_usec, event_data); -} - -static void -drmmode_page_flip_handler(int fd, unsigned int frame, unsigned int tv_sec, - unsigned int tv_usec, void *event_data) -{ - drmmode_ptr drmmode = event_data; - - drmmode->flip_count--; - if (drmmode->flip_count > 0) - return; - - drmModeRmFB(drmmode->fd, drmmode->old_fb_id); - - I830DRI2FlipEventHandler(frame, tv_sec, tv_usec, drmmode->event_data); -} - -static void -drm_wakeup_handler(pointer data, int err, pointer p) -{ - drmmode_ptr drmmode = data; - fd_set *read_mask = p; - - if (err >= 0 && FD_ISSET(drmmode->fd, read_mask)) - drmHandleEvent(drmmode->fd, &drmmode->event_context); -} -#endif - -Bool drmmode_pre_init(ScrnInfoPtr scrn, int fd, int cpp) -{ - drmmode_ptr drmmode; - unsigned int i; - - drmmode = xnfalloc(sizeof *drmmode); - drmmode->fd = fd; - drmmode->fb_id = 0; - - xf86CrtcConfigInit(scrn, &drmmode_xf86crtc_config_funcs); - - drmmode->cpp = cpp; - drmmode->mode_res = drmModeGetResources(drmmode->fd); - if (!drmmode->mode_res) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "failed to get resources: %s\n", strerror(errno)); - return FALSE; - } - - xf86CrtcSetSizeRange(scrn, 320, 200, drmmode->mode_res->max_width, - drmmode->mode_res->max_height); - for (i = 0; i < drmmode->mode_res->count_crtcs; i++) - drmmode_crtc_init(scrn, drmmode, i); - - for (i = 0; i < drmmode->mode_res->count_connectors; i++) - drmmode_output_init(scrn, drmmode, i); - - xf86InitialConfiguration(scrn, TRUE); - -#if 0 - gp.param = I915_PARAM_HAS_PAGEFLIPPING; - gp.value = &has_flipping; - (void)drmCommandWriteRead(intel->drmSubFD, DRM_I915_GETPARAM, &gp, - sizeof(gp)); - if (has_flipping) { - xf86DrvMsg(scrn->scrnIndex, X_INFO, - "Kernel page flipping support detected, enabling\n"); - intel->use_pageflipping = TRUE; - drmmode->event_context.version = DRM_EVENT_CONTEXT_VERSION; - drmmode->event_context.vblank_handler = drmmode_vblank_handler; - drmmode->event_context.page_flip_handler = - drmmode_page_flip_handler; - AddGeneralSocket(fd); - RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA, - drm_wakeup_handler, drmmode); - } -#endif - - return TRUE; -} - -void drmmode_closefb(ScrnInfoPtr scrn) -{ - xf86CrtcConfigPtr xf86_config; - drmmode_crtc_private_ptr drmmode_crtc; - drmmode_ptr drmmode; - - xf86_config = XF86_CRTC_CONFIG_PTR(scrn); - - drmmode_crtc = xf86_config->crtc[0]->driver_private; - drmmode = drmmode_crtc->drmmode; - - drmmode_destroy_cursor(scrn); - - drmModeRmFB(drmmode->fd, drmmode->fb_id); - drmmode->fb_id = 0; -} diff --git a/hw/xfree86/glamor/glamor_ddx.c b/hw/xfree86/glamor/glamor_ddx.c deleted file mode 100644 index f4b37ab6b..000000000 --- a/hw/xfree86/glamor/glamor_ddx.c +++ /dev/null @@ -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 - * - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include -#include -#include -#include - -#include "../../../mi/micmap.h" -#include -#include -//#define GC XORG_GC -#include -//#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, §ions); - 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 -}; diff --git a/hw/xfree86/glamor/glamor_ddx.h b/hw/xfree86/glamor/glamor_ddx.h deleted file mode 100644 index 3ffd48852..000000000 --- a/hw/xfree86/glamor/glamor_ddx.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef GLAMOR_DDX_H -#define GLAMOR_DDX_H - -#include -#define GLAMOR_FOR_XORG 1 -#include -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 diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in index c9760b090..0d1ea9142 100644 --- a/include/xorg-config.h.in +++ b/include/xorg-config.h.in @@ -139,15 +139,4 @@ /* Build with libdrm support */ #undef WITH_LIBDRM - -/* Build GLAMOR */ -#undef GLAMOR - -/* Build GLAMOR over GLES2*/ -#undef GLAMOR_GLES2 - -/* Build GLAMOR ddx*/ -#undef GLAMOR_DDX - - #endif /* _XORG_CONFIG_H_ */