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

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