Blame SOURCES/0006-modesetting-Indirect-the-shadow-API-through-LoaderSy.patch

55d6a0
From 13d3bc7a05eb7500c8987358c68c20a4bfe18079 Mon Sep 17 00:00:00 2001
55d6a0
From: Adam Jackson <ajax@redhat.com>
55d6a0
Date: Tue, 8 Oct 2019 12:52:28 -0400
55d6a0
Subject: [PATCH xserver 06/11] modesetting: Indirect the shadow API through
55d6a0
 LoaderSymbol
55d6a0
55d6a0
Prerequisite for building all of xserver with -z now.
55d6a0
55d6a0
Gitlab: https://gitlab.freedesktop.org/xorg/xserver/issues/692
55d6a0
(cherry picked from commit 45f35a0c6666c5f35df482948e0c8e91167429ef)
55d6a0
---
55d6a0
 hw/xfree86/drivers/modesetting/driver.c | 34 +++++++++++--------------
55d6a0
 hw/xfree86/drivers/modesetting/driver.h | 12 ++++++++-
55d6a0
 2 files changed, 26 insertions(+), 20 deletions(-)
55d6a0
55d6a0
diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c
55d6a0
index ec4189a2c..a385e7ee2 100644
55d6a0
--- a/hw/xfree86/drivers/modesetting/driver.c
55d6a0
+++ b/hw/xfree86/drivers/modesetting/driver.c
55d6a0
@@ -50,7 +50,6 @@
55d6a0
 #include "xf86Crtc.h"
55d6a0
 #include "miscstruct.h"
55d6a0
 #include "dixstruct.h"
55d6a0
-#include "shadow.h"
55d6a0
 #include "xf86xv.h"
55d6a0
 #include <X11/extensions/Xv.h>
55d6a0
 #include <xorg-config.h>
55d6a0
@@ -60,7 +59,6 @@
55d6a0
 #ifdef XSERVER_LIBPCIACCESS
55d6a0
 #include <pciaccess.h>
55d6a0
 #endif
55d6a0
-
55d6a0
 #include "driver.h"
55d6a0
 
55d6a0
 static void AdjustFrame(ScrnInfoPtr pScrn, int x, int y);
55d6a0
@@ -1084,9 +1082,16 @@ PreInit(ScrnInfoPtr pScrn, int flags)
55d6a0
     }
55d6a0
 
55d6a0
     if (ms->drmmode.shadow_enable) {
55d6a0
-        if (!xf86LoadSubModule(pScrn, "shadow")) {
55d6a0
+        void *mod = xf86LoadSubModule(pScrn, "shadow");
55d6a0
+
55d6a0
+        if (!mod)
55d6a0
             return FALSE;
55d6a0
-        }
55d6a0
+
55d6a0
+        ms->shadow.Setup        = LoaderSymbolFromModule(mod, "shadowSetup");
55d6a0
+        ms->shadow.Add          = LoaderSymbolFromModule(mod, "shadowAdd");
55d6a0
+        ms->shadow.Remove       = LoaderSymbolFromModule(mod, "shadowRemove");
55d6a0
+        ms->shadow.Update32to24 = LoaderSymbolFromModule(mod, "shadowUpdate32to24");
55d6a0
+        ms->shadow.UpdatePacked = LoaderSymbolFromModule(mod, "shadowUpdatePacked");
55d6a0
     }
55d6a0
 
55d6a0
     return TRUE;
55d6a0
@@ -1191,9 +1196,9 @@ msUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf)
55d6a0
     } while (0);
55d6a0
 
55d6a0
     if (use_3224)
55d6a0
-        shadowUpdate32to24(pScreen, pBuf);
55d6a0
+        ms->shadow.Update32to24(pScreen, pBuf);
55d6a0
     else
55d6a0
-        shadowUpdatePacked(pScreen, pBuf);
55d6a0
+        ms->shadow.UpdatePacked(pScreen, pBuf);
55d6a0
 }
55d6a0
 
55d6a0
 static Bool
55d6a0
@@ -1380,8 +1385,8 @@ CreateScreenResources(ScreenPtr pScreen)
55d6a0
         FatalError("Couldn't adjust screen pixmap\n");
55d6a0
 
55d6a0
     if (ms->drmmode.shadow_enable) {
55d6a0
-        if (!shadowAdd(pScreen, rootPixmap, msUpdatePacked, msShadowWindow,
55d6a0
-                       0, 0))
55d6a0
+        if (!ms->shadow.Add(pScreen, rootPixmap, msUpdatePacked, msShadowWindow,
55d6a0
+                            0, 0))
55d6a0
             return FALSE;
55d6a0
     }
55d6a0
 
55d6a0
@@ -1415,15 +1420,6 @@ CreateScreenResources(ScreenPtr pScreen)
55d6a0
     return ret;
55d6a0
 }
55d6a0
 
55d6a0
-static Bool
55d6a0
-msShadowInit(ScreenPtr pScreen)
55d6a0
-{
55d6a0
-    if (!shadowSetup(pScreen)) {
55d6a0
-        return FALSE;
55d6a0
-    }
55d6a0
-    return TRUE;
55d6a0
-}
55d6a0
-
55d6a0
 static Bool
55d6a0
 msSharePixmapBacking(PixmapPtr ppix, ScreenPtr screen, void **handle)
55d6a0
 {
55d6a0
@@ -1643,7 +1639,7 @@ ScreenInit(ScreenPtr pScreen, int argc, char **argv)
55d6a0
         return FALSE;
55d6a0
     }
55d6a0
 
55d6a0
-    if (ms->drmmode.shadow_enable && !msShadowInit(pScreen)) {
55d6a0
+    if (ms->drmmode.shadow_enable && !ms->shadow.Setup(pScreen)) {
55d6a0
         xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "shadow fb init failed\n");
55d6a0
         return FALSE;
55d6a0
     }
55d6a0
@@ -1887,7 +1883,7 @@ CloseScreen(ScreenPtr pScreen)
55d6a0
     }
55d6a0
 
55d6a0
     if (ms->drmmode.shadow_enable) {
55d6a0
-        shadowRemove(pScreen, pScreen->GetScreenPixmap(pScreen));
55d6a0
+        ms->shadow.Remove(pScreen, pScreen->GetScreenPixmap(pScreen));
55d6a0
         free(ms->drmmode.shadow_fb);
55d6a0
         ms->drmmode.shadow_fb = NULL;
55d6a0
         free(ms->drmmode.shadow_fb2);
55d6a0
diff --git a/hw/xfree86/drivers/modesetting/driver.h b/hw/xfree86/drivers/modesetting/driver.h
55d6a0
index a99f37871..394a20fc1 100644
55d6a0
--- a/hw/xfree86/drivers/modesetting/driver.h
55d6a0
+++ b/hw/xfree86/drivers/modesetting/driver.h
55d6a0
@@ -33,7 +33,7 @@
55d6a0
 #include <xf86Crtc.h>
55d6a0
 #include <damage.h>
55d6a0
 #include <X11/extensions/dpmsconst.h>
55d6a0
-
55d6a0
+#include <shadow.h>
55d6a0
 #ifdef GLAMOR_HAS_GBM
55d6a0
 #define GLAMOR_FOR_XORG 1
55d6a0
 #include "glamor.h"
55d6a0
@@ -122,6 +122,16 @@ typedef struct _modesettingRec {
55d6a0
 
55d6a0
     Bool kms_has_modifiers;
55d6a0
 
55d6a0
+    /* shadow API */
55d6a0
+    struct {
55d6a0
+        Bool (*Setup)(ScreenPtr);
55d6a0
+        Bool (*Add)(ScreenPtr, PixmapPtr, ShadowUpdateProc, ShadowWindowProc,
55d6a0
+                    int, void *);
55d6a0
+        void (*Remove)(ScreenPtr, PixmapPtr);
55d6a0
+        void (*Update32to24)(ScreenPtr, shadowBufPtr);
55d6a0
+        void (*UpdatePacked)(ScreenPtr, shadowBufPtr);
55d6a0
+    } shadow;
55d6a0
+
55d6a0
 } modesettingRec, *modesettingPtr;
55d6a0
 
55d6a0
 #define modesettingPTR(p) ((modesettingPtr)((p)->driverPrivate))
55d6a0
-- 
55d6a0
2.33.1
55d6a0