Hello community,

here is the log from the commit of package xf86-video-fbdev for 
openSUSE:Factory checked in at 2018-05-25 21:35:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xf86-video-fbdev (Old)
 and      /work/SRC/openSUSE:Factory/.xf86-video-fbdev.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xf86-video-fbdev"

Fri May 25 21:35:27 2018 rev:11 rq:611660 version:0.4.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/xf86-video-fbdev/xf86-video-fbdev.changes        
2017-06-04 01:45:20.698982697 +0200
+++ /work/SRC/openSUSE:Factory/.xf86-video-fbdev.new/xf86-video-fbdev.changes   
2018-05-25 21:35:29.847914666 +0200
@@ -1,0 +2,14 @@
+Wed May 23 11:10:17 UTC 2018 - msta...@suse.com
+
+- Fix build with Xorg server 1.20 by updating to current Git.
+
+U_01-Default-to-32bpp-if-the-console-is-8bpp-and-we-weren-t-told-otherwise.patch
+U_02-Use-own-thunk-functions-instead-of-fbdevHW-Weak.patch
+U_03-Pass-the-pci-device-if-any-through-to-fbdevhw-in-probe-and-preinit.patch
+U_04-Initialize-pci_dev.patch
+U_05-Fix-shadow-fb-allocation-size-v2.patch
+U_11-Remove-dead-pix24bpp-variable.patch
+U_12-Use-shadowUpdate32to24-at-24bpp.patch
+U_13-Use-ifdef-instead-of-if-to-avoid-build-error.patch
+
+-------------------------------------------------------------------

New:
----
  
U_01-Default-to-32bpp-if-the-console-is-8bpp-and-we-weren-t-told-otherwise.patch
  U_02-Use-own-thunk-functions-instead-of-fbdevHW-Weak.patch
  U_03-Pass-the-pci-device-if-any-through-to-fbdevhw-in-probe-and-preinit.patch
  U_04-Initialize-pci_dev.patch
  U_05-Fix-shadow-fb-allocation-size-v2.patch
  U_11-Remove-dead-pix24bpp-variable.patch
  U_12-Use-shadowUpdate32to24-at-24bpp.patch
  U_13-Use-ifdef-instead-of-if-to-avoid-build-error.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xf86-video-fbdev.spec ++++++
--- /var/tmp/diff_new_pack.V34Ppi/_old  2018-05-25 21:35:30.791880502 +0200
+++ /var/tmp/diff_new_pack.V34Ppi/_new  2018-05-25 21:35:30.791880502 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package xf86-video-fbdev
 #
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -24,6 +24,14 @@
 Group:          System/X11/Servers/XF86_4
 Url:            http://xorg.freedesktop.org/
 Source0:        
http://xorg.freedesktop.org/releases/individual/driver/%{name}-%{version}.tar.bz2
+Patch1:         
U_01-Default-to-32bpp-if-the-console-is-8bpp-and-we-weren-t-told-otherwise.patch
+Patch2:         U_02-Use-own-thunk-functions-instead-of-fbdevHW-Weak.patch
+Patch3:         
U_03-Pass-the-pci-device-if-any-through-to-fbdevhw-in-probe-and-preinit.patch
+Patch4:         U_04-Initialize-pci_dev.patch
+Patch5:         U_05-Fix-shadow-fb-allocation-size-v2.patch
+Patch11:        U_11-Remove-dead-pix24bpp-variable.patch
+Patch12:        U_12-Use-shadowUpdate32to24-at-24bpp.patch
+Patch13:        U_13-Use-ifdef-instead-of-if-to-avoid-build-error.patch
 BuildRequires:  pkg-config
 BuildRequires:  pkgconfig(fontsproto)
 BuildRequires:  pkgconfig(pciaccess) >= 0.8.0
@@ -51,6 +59,15 @@
 %prep
 %setup -q
 
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch11 -p1
+%patch12 -p1
+%patch13 -p1
+
 %build
 %configure
 make %{?_smp_mflags}

++++++ 
U_01-Default-to-32bpp-if-the-console-is-8bpp-and-we-weren-t-told-otherwise.patch
 ++++++
From: Adam Jackson <a...@redhat.com>
Date: Fri Mar 21 12:20:01 2014 -0400
Subject: [PATCH 1/13]Default to 32bpp if the console is 8bpp (and we weren't 
told otherwise)
Patch-mainline: Upstream
Git-repo: git://anongit.freedesktop.org/xorg/driver/xf86-video-fbdev
Git-commit: dd1cf1028c3f0de77d075c4a169011518baab0f4
References: 
Signed-off-by: Max Staudt <msta...@suse.de>

You can still override this on the command line or in the config file.
Without this we'll come up at 8bpp on matroxfb (and probably others),
which among other things breaks the default desktop since gnome-shell
wants GLX and GLX doesn't support pseudocolor anymore.

Signed-off-by: Adam Jackson <a...@redhat.com>
---
 src/fbdev.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/src/fbdev.c b/src/fbdev.c
index f5a7378..a73565f 100644
--- a/src/fbdev.c
+++ b/src/fbdev.c
@@ -38,6 +38,9 @@
 #include <pciaccess.h>
 #endif
 
+/* for xf86{Depth,FbBpp}. i am a terrible person, and i am sorry. */
+#include "xf86Priv.h"
+
 static Bool debug = 0;
 
 #define TRACE_ENTER(str) \
@@ -427,6 +430,29 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
        if 
(!fbdevHWInit(pScrn,NULL,xf86FindOptionValue(fPtr->pEnt->device->options,"fbdev")))
                return FALSE;
        default_depth = fbdevHWGetDepth(pScrn,&fbbpp);
+
+       if (default_depth == 8) do {
+           /* trust the command line */
+           if (xf86FbBpp > 0 || xf86Depth > 0)
+               break;
+
+           /* trust the config file's Screen stanza */
+           if (pScrn->confScreen->defaultfbbpp > 0 ||
+               pScrn->confScreen->defaultdepth > 0)
+               break;
+
+           /* trust our Device stanza in the config file */
+           if (xf86FindOption(fPtr->pEnt->device->options, "DefaultDepth") ||
+               xf86FindOption(fPtr->pEnt->device->options, "DefaultFbBpp"))
+               break;
+
+           /* otherwise, lol no */
+           xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                      "Console is 8bpp, defaulting to 32bpp\n");
+           default_depth = 24;
+           fbbpp = 32;
+       } while (0);
+
        if (!xf86SetDepthBpp(pScrn, default_depth, default_depth, fbbpp,
                             Support24bppFb | Support32bppFb | 
SupportConvert32to24 | SupportConvert24to32))
                return FALSE;
++++++ U_02-Use-own-thunk-functions-instead-of-fbdevHW-Weak.patch ++++++
From: Adam Jackson <a...@redhat.com>
Date: Wed May 21 09:49:56 2014 -0400
Subject: [PATCH 2/13]Use own thunk functions instead of fbdevHW*Weak
Patch-mainline: Upstream
Git-repo: git://anongit.freedesktop.org/xorg/driver/xf86-video-fbdev
Git-commit: 2673e727063fe28310836f1e6e9eda552930218a
References: 
Signed-off-by: Max Staudt <msta...@suse.de>

I plan to remove the Weak functions from a future server.

Signed-off-by: Adam Jackson <a...@redhat.com>
---
 src/fbdev.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 71 insertions(+), 15 deletions(-)

diff --git a/src/fbdev.c b/src/fbdev.c
index a73565f..5e38da4 100644
--- a/src/fbdev.c
+++ b/src/fbdev.c
@@ -233,6 +233,35 @@ FBDevIdentify(int flags)
        xf86PrintChipsets(FBDEV_NAME, "driver for framebuffer", FBDevChipsets);
 }
 
+static Bool
+fbdevSwitchMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
+{
+    return fbdevHWSwitchMode(pScrn, mode);
+}
+
+static void
+fbdevAdjustFrame(ScrnInfoPtr pScrn, int x, int y)
+{
+    fbdevHWAdjustFrame(pScrn, x, y);
+}
+
+static Bool
+fbdevEnterVT(ScrnInfoPtr pScrn)
+{
+    return fbdevHWEnterVT(pScrn);
+}
+
+static void
+fbdevLeaveVT(ScrnInfoPtr pScrn)
+{
+    fbdevHWLeaveVT(pScrn);
+}
+
+static ModeStatus
+fbdevValidMode(ScrnInfoPtr pScrn, DisplayModePtr mode, Bool verbose, int flags)
+{
+    return fbdevHWValidMode(pScrn, mode, verbose, flags);
+}
 
 #ifdef XSERVER_LIBPCIACCESS
 static Bool FBDevPciProbe(DriverPtr drv, int entity_num,
@@ -258,11 +287,11 @@ static Bool FBDevPciProbe(DriverPtr drv, int entity_num,
            pScrn->Probe         = FBDevProbe;
            pScrn->PreInit       = FBDevPreInit;
            pScrn->ScreenInit    = FBDevScreenInit;
-           pScrn->SwitchMode    = fbdevHWSwitchModeWeak();
-           pScrn->AdjustFrame   = fbdevHWAdjustFrameWeak();
-           pScrn->EnterVT       = fbdevHWEnterVTWeak();
-           pScrn->LeaveVT       = fbdevHWLeaveVTWeak();
-           pScrn->ValidMode     = fbdevHWValidModeWeak();
+           pScrn->SwitchMode    = fbdevSwitchMode;
+           pScrn->AdjustFrame   = fbdevAdjustFrame;
+           pScrn->EnterVT       = fbdevEnterVT;
+           pScrn->LeaveVT       = fbdevLeaveVT;
+           pScrn->ValidMode     = fbdevValidMode;
 
            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
                       "claimed PCI slot %d@%d:%d:%d\n", 
@@ -375,11 +404,11 @@ FBDevProbe(DriverPtr drv, int flags)
                    pScrn->Probe         = FBDevProbe;
                    pScrn->PreInit       = FBDevPreInit;
                    pScrn->ScreenInit    = FBDevScreenInit;
-                   pScrn->SwitchMode    = fbdevHWSwitchModeWeak();
-                   pScrn->AdjustFrame   = fbdevHWAdjustFrameWeak();
-                   pScrn->EnterVT       = fbdevHWEnterVTWeak();
-                   pScrn->LeaveVT       = fbdevHWLeaveVTWeak();
-                   pScrn->ValidMode     = fbdevHWValidModeWeak();
+                   pScrn->SwitchMode    = fbdevSwitchMode;
+                   pScrn->AdjustFrame   = fbdevAdjustFrame;
+                   pScrn->EnterVT       = fbdevEnterVT;
+                   pScrn->LeaveVT       = fbdevLeaveVT;
+                   pScrn->ValidMode     = fbdevValidMode;
                    
                    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
                               "using %s\n", dev ? dev : "default device");
@@ -632,6 +661,17 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
        return TRUE;
 }
 
+static void
+fbdevUpdateRotatePacked(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+    shadowUpdateRotatePacked(pScreen, pBuf);
+}
+
+static void
+fbdevUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+    shadowUpdatePacked(pScreen, pBuf);
+}
 
 static Bool
 FBDevCreateScreenResources(ScreenPtr pScreen)
@@ -651,7 +691,7 @@ FBDevCreateScreenResources(ScreenPtr pScreen)
     pPixmap = pScreen->GetScreenPixmap(pScreen);
 
     if (!shadowAdd(pScreen, pPixmap, fPtr->rotate ?
-                  shadowUpdateRotatePackedWeak() : shadowUpdatePackedWeak(),
+                  fbdevUpdateRotatePacked : fbdevUpdatePacked,
                   FBDevWindowLinear, fPtr->rotate, NULL)) {
        return FALSE;
     }
@@ -675,6 +715,23 @@ FBDevShadowInit(ScreenPtr pScreen)
     return TRUE;
 }
 
+static void
+fbdevLoadPalette(ScrnInfoPtr pScrn, int num, int *i, LOCO *col, VisualPtr pVis)
+{
+    fbdevHWLoadPalette(pScrn, num, i, col, pVis);
+}
+
+static void
+fbdevDPMSSet(ScrnInfoPtr pScrn, int mode, int flags)
+{
+    fbdevHWDPMSSet(pScrn, mode, flags);
+}
+
+static Bool
+fbdevSaveScreen(ScreenPtr pScreen, int mode)
+{
+    return fbdevHWSaveScreen(pScreen, mode);
+}
 
 static Bool
 FBDevScreenInit(SCREEN_INIT_ARGS_DECL)
@@ -909,13 +966,12 @@ FBDevScreenInit(SCREEN_INIT_ARGS_DECL)
                return FALSE;
        }
        flags = CMAP_PALETTED_TRUECOLOR;
-       if(!xf86HandleColormaps(pScreen, 256, 8, fbdevHWLoadPaletteWeak(), 
-                               NULL, flags))
+       if(!xf86HandleColormaps(pScreen, 256, 8, fbdevLoadPalette, NULL, flags))
                return FALSE;
 
-       xf86DPMSInit(pScreen, fbdevHWDPMSSetWeak(), 0);
+       xf86DPMSInit(pScreen, fbdevDPMSSet, 0);
 
-       pScreen->SaveScreen = fbdevHWSaveScreenWeak();
+       pScreen->SaveScreen = fbdevSaveScreen;
 
        /* Wrap the current CloseScreen function */
        fPtr->CloseScreen = pScreen->CloseScreen;
++++++ 
U_03-Pass-the-pci-device-if-any-through-to-fbdevhw-in-probe-and-preinit.patch 
++++++
From: Adam Jackson <a...@redhat.com>
Date: Mon Aug 11 12:07:54 2014 -0400
Subject: [PATCH 3/13]Pass the pci device (if any) through to fbdevhw in probe 
and preinit
Patch-mainline: Upstream
Git-repo: git://anongit.freedesktop.org/xorg/driver/xf86-video-fbdev
Git-commit: ae0aeffae6657464f610da13e7b3349d0d97e81b
References: 
Signed-off-by: Max Staudt <msta...@suse.de>

Signed-off-by: Adam Jackson <a...@redhat.com>
---
 src/fbdev.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/fbdev.c b/src/fbdev.c
index 5e38da4..dcfed28 100644
--- a/src/fbdev.c
+++ b/src/fbdev.c
@@ -280,7 +280,7 @@ static Bool FBDevPciProbe(DriverPtr drv, int entity_num,
                                                  pScrn->entityInstanceList[0]);
 
        device = xf86FindOptionValue(devSection->options, "fbdev");
-       if (fbdevHWProbe(NULL, device, NULL)) {
+       if (fbdevHWProbe(dev, device, NULL)) {
            pScrn->driverVersion = FBDEV_VERSION;
            pScrn->driverName    = FBDEV_DRIVER_NAME;
            pScrn->name          = FBDEV_NAME;
@@ -427,6 +427,7 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
        int default_depth, fbbpp;
        const char *s;
        int type;
+       void *pci_dev;
 
        if (flags & PROBE_DETECT) return FALSE;
 
@@ -454,9 +455,14 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
                   "xf86RegisterResources() found resource conflicts\n");
                return FALSE;
        }
+#else
+       if (fPtr->pEnt->location.type == BUS_PCI)
+           pci_dev = fPtr->pEnt->location.id.pci;
 #endif
        /* open device */
-       if 
(!fbdevHWInit(pScrn,NULL,xf86FindOptionValue(fPtr->pEnt->device->options,"fbdev")))
+       if (!fbdevHWInit(pScrn, pci_dev,
+                        xf86FindOptionValue(fPtr->pEnt->device->options,
+                                            "fbdev")))
                return FALSE;
        default_depth = fbdevHWGetDepth(pScrn,&fbbpp);
 
++++++ U_04-Initialize-pci_dev.patch ++++++
From: Pascal Terjan <pter...@google.com>
Date: Fri Jan 22 00:26:22 2016 +0000
Subject: [PATCH 4/13]Initialize pci_dev
Patch-mainline: Upstream
Git-repo: git://anongit.freedesktop.org/xorg/driver/xf86-video-fbdev
Git-commit: 66e7909bfefd93c05aa37d0cadccc5348f0382be
References: 
Signed-off-by: Max Staudt <msta...@suse.de>

Else it is read before initialization if XSERVER_LIBPCIACCESS is not
defined or location.type is not BUS_PCI.

Noticed when I got a segfault where it was 0x1 while doing some tests on
arm.

Signed-off-by: Pascal Terjan <pter...@google.com>
Reviewed-by: Emil Velikov <emil.l.veli...@gmail.com>
---
 src/fbdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/fbdev.c b/src/fbdev.c
index dcfed28..2c658fe 100644
--- a/src/fbdev.c
+++ b/src/fbdev.c
@@ -427,7 +427,7 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
        int default_depth, fbbpp;
        const char *s;
        int type;
-       void *pci_dev;
+       void *pci_dev = NULL;
 
        if (flags & PROBE_DETECT) return FALSE;
 
++++++ U_05-Fix-shadow-fb-allocation-size-v2.patch ++++++
From: Adam Jackson <a...@redhat.com>
Date: Wed Jan 4 10:30:08 2017 -0500
Subject: [PATCH 5/13]Fix shadow fb allocation size (v2)
Patch-mainline: Upstream
Git-repo: git://anongit.freedesktop.org/xorg/driver/xf86-video-fbdev
Git-commit: 2c5eba85740e6a7ced8ada0ee45fdd74e4bca364
References: 
Signed-off-by: Max Staudt <msta...@suse.de>

->bitsPerPixel is rather obviously eight times too large.

v2: Use ->displayWidth - the pitch - not ->virtualX (Keith Packard)

Signed-off-by: Adam Jackson <a...@redhat.com>
Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>
---
 src/fbdev.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/fbdev.c b/src/fbdev.c
index 2c658fe..4309d76 100644
--- a/src/fbdev.c
+++ b/src/fbdev.c
@@ -827,8 +827,8 @@ FBDevScreenInit(SCREEN_INIT_ARGS_DECL)
        fPtr->fbstart = fPtr->fbmem + fPtr->fboff;
 
        if (fPtr->shadowFB) {
-           fPtr->shadow = calloc(1, pScrn->virtualX * pScrn->virtualY *
-                                 pScrn->bitsPerPixel);
+           fPtr->shadow = calloc(1, pScrn->displayWidth * pScrn->virtualY *
+                                 ((pScrn->bitsPerPixel + 7) / 8));
 
            if (!fPtr->shadow) {
                xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++++++ U_11-Remove-dead-pix24bpp-variable.patch ++++++
From: Adam Jackson <a...@redhat.com>
Date: Thu Jan 5 14:14:48 2017 -0500
Subject: [PATCH 11/13]Remove dead pix24bpp variable
Patch-mainline: Upstream
Git-repo: git://anongit.freedesktop.org/xorg/driver/xf86-video-fbdev
Git-commit: 3cf99231199bd5bd9e681e85d9da1f9eb736e3e7
References: 
Signed-off-by: Max Staudt <msta...@suse.de>

Signed-off-by: Adam Jackson <a...@redhat.com>
---
 src/fbdev.c | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/src/fbdev.c b/src/fbdev.c
index 4309d76..eaf3aa8 100644
--- a/src/fbdev.c
+++ b/src/fbdev.c
@@ -76,12 +76,6 @@ enum { FBDEV_ROTATE_NONE=0, FBDEV_ROTATE_CW=270, 
FBDEV_ROTATE_UD=180, FBDEV_ROTA
 
 /* -------------------------------------------------------------------- */
 
-/*
- * This is intentionally screen-independent.  It indicates the binding
- * choice made in the first PreInit.
- */
-static int pix24bpp = 0;
-
 #define FBDEV_VERSION          4000
 #define FBDEV_NAME             "FBDEV"
 #define FBDEV_DRIVER_NAME      "fbdev"
@@ -493,10 +487,6 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
                return FALSE;
        xf86PrintDepthBpp(pScrn);
 
-       /* Get the depth24 pixmap format */
-       if (pScrn->depth == 24 && pix24bpp == 0)
-               pix24bpp = xf86GetBppFromDepth(pScrn, 24);
-
        /* color weight */
        if (pScrn->depth > 8) {
                rgb zeros = { 0, 0, 0 };
++++++ U_12-Use-shadowUpdate32to24-at-24bpp.patch ++++++
From: Adam Jackson <a...@redhat.com>
Date: Thu Jan 5 14:36:51 2017 -0500
Subject: [PATCH 12/13]Use shadowUpdate32to24 at 24bpp
Patch-mainline: Upstream
Git-repo: git://anongit.freedesktop.org/xorg/driver/xf86-video-fbdev
Git-commit: e0bce0d017c5e1597aa8269551355e1ddeb3c8fb
References: 
Signed-off-by: Max Staudt <msta...@suse.de>

Signed-off-by: Adam Jackson <a...@redhat.com>
---
 man/fbdev.man |  6 ++++--
 src/fbdev.c   | 43 +++++++++++++++++++++++++++++++++++++++----
 2 files changed, 43 insertions(+), 6 deletions(-)

diff --git a/man/fbdev.man b/man/fbdev.man
index bda0ed6..ed73d00 100644
--- a/man/fbdev.man
+++ b/man/fbdev.man
@@ -47,12 +47,14 @@ are supported:
 The framebuffer device to use. Default: /dev/fb0.
 .TP
 .BI "Option \*qShadowFB\*q \*q" boolean \*q
-Enable or disable use of the shadow framebuffer layer.  Default: on.
+Enable or disable use of the shadow framebuffer layer. Mandatory for 24bpp
+framebuffers on newer servers. Default: on.
 .TP
 .BI "Option \*qRotate\*q \*q" string \*q
 Enable rotation of the display. The supported values are "CW" (clockwise,
 90 degrees), "UD" (upside down, 180 degrees) and "CCW" (counter clockwise,
-270 degrees). Implies use of the shadow framebuffer layer.   Default: off.
+270 degrees). Implies use of the shadow framebuffer layer. Disabled for 24bpp
+framebuffers. Default: off.
 .SH "SEE ALSO"
 __xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), 
Xserver(__appmansuffix__),
 X(__miscmansuffix__), fbdevhw(__drivermansuffix__)
diff --git a/src/fbdev.c b/src/fbdev.c
index eaf3aa8..af1587f 100644
--- a/src/fbdev.c
+++ b/src/fbdev.c
@@ -41,6 +41,10 @@
 /* for xf86{Depth,FbBpp}. i am a terrible person, and i am sorry. */
 #include "xf86Priv.h"
 
+#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) > 23
+#define HAVE_SHADOW_3224
+#endif
+
 static Bool debug = 0;
 
 #define TRACE_ENTER(str) \
@@ -181,6 +185,7 @@ typedef struct {
        int                             lineLength;
        int                             rotate;
        Bool                            shadowFB;
+        Bool                            shadow24;
        void                            *shadow;
        CloseScreenProcPtr              CloseScreen;
        CreateScreenResourcesProcPtr    CreateScreenResources;
@@ -482,6 +487,15 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
            fbbpp = 32;
        } while (0);
 
+        fPtr->shadow24 = FALSE;
+#if HAVE_SHADOW_3224
+        /* okay but 24bpp is awful */
+        if (fbbpp == 24) {
+            fPtr->shadow24 = TRUE;
+            fbbpp = 32;
+        }
+#endif
+
        if (!xf86SetDepthBpp(pScrn, default_depth, default_depth, fbbpp,
                             Support24bppFb | Support32bppFb | 
SupportConvert32to24 | SupportConvert24to32))
                return FALSE;
@@ -531,12 +545,18 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
 
        /* use shadow framebuffer by default */
        fPtr->shadowFB = xf86ReturnOptValBool(fPtr->Options, OPTION_SHADOW_FB, 
TRUE);
+        if (!fPtr->shadowFB && fPtr->shadow24) {
+            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                       "24bpp requires shadow framebuffer, forcing\n");
+            fPtr->shadowFB = TRUE;
+        }
 
        debug = xf86ReturnOptValBool(fPtr->Options, OPTION_DEBUG, FALSE);
 
        /* rotation */
        fPtr->rotate = FBDEV_ROTATE_NONE;
-       if ((s = xf86GetOptValString(fPtr->Options, OPTION_ROTATE)))
+       s = xf86GetOptValString(fPtr->Options, OPTION_ROTATE);
+       if (s && !fPtr->shadow24)
        {
          if(!xf86NameCmp(s, "CW"))
          {
@@ -658,6 +678,14 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
 }
 
 static void
+fbdevUpdate32to24(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+#ifdef HAVE_SHADOW_3224
+    shadowUpdate32to24(pScreen, pBuf);
+#endif
+}
+
+static void
 fbdevUpdateRotatePacked(ScreenPtr pScreen, shadowBufPtr pBuf)
 {
     shadowUpdateRotatePacked(pScreen, pBuf);
@@ -676,6 +704,7 @@ FBDevCreateScreenResources(ScreenPtr pScreen)
     ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     FBDevPtr fPtr = FBDEVPTR(pScrn);
     Bool ret;
+    void (*update)(ScreenPtr, shadowBufPtr);
 
     pScreen->CreateScreenResources = fPtr->CreateScreenResources;
     ret = pScreen->CreateScreenResources(pScreen);
@@ -686,9 +715,15 @@ FBDevCreateScreenResources(ScreenPtr pScreen)
 
     pPixmap = pScreen->GetScreenPixmap(pScreen);
 
-    if (!shadowAdd(pScreen, pPixmap, fPtr->rotate ?
-                  fbdevUpdateRotatePacked : fbdevUpdatePacked,
-                  FBDevWindowLinear, fPtr->rotate, NULL)) {
+    if (fPtr->shadow24)
+        update = fbdevUpdate32to24;
+    else if (fPtr->rotate)
+        update = fbdevUpdateRotatePacked;
+    else
+        update = fbdevUpdatePacked;
+
+    if (!shadowAdd(pScreen, pPixmap, update, FBDevWindowLinear, fPtr->rotate,
+                   NULL)) {
        return FALSE;
     }
 
++++++ U_13-Use-ifdef-instead-of-if-to-avoid-build-error.patch ++++++
From: Alan Coopersmith <alan.coopersm...@oracle.com>
Date: Sun Mar 4 17:34:06 2018 -0800
Subject: [PATCH 13/13]Use #ifdef instead of #if to avoid build error
Patch-mainline: Upstream
Git-repo: git://anongit.freedesktop.org/xorg/driver/xf86-video-fbdev
Git-commit: 9af7f81534aa03fe01d88786805b00729ac321e9
References: 
Signed-off-by: Max Staudt <msta...@suse.de>

fbdev.c:491:21: error: #if with no expression
 #if HAVE_SHADOW_3224
                     ^

Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com>
Reviewed-by: Adam Jackson <a...@redhat.com>
---
 src/fbdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/fbdev.c b/src/fbdev.c
index af1587f..421b26a 100644
--- a/src/fbdev.c
+++ b/src/fbdev.c
@@ -488,7 +488,7 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
        } while (0);
 
         fPtr->shadow24 = FALSE;
-#if HAVE_SHADOW_3224
+#ifdef HAVE_SHADOW_3224
         /* okay but 24bpp is awful */
         if (fbbpp == 24) {
             fPtr->shadow24 = TRUE;

Reply via email to