rpms/xorg-x11-server/F-12 xserver-1.7.4-randr-output-unify-compat-hack.patch, NONE, 1.1 xorg-x11-server.spec, 1.525, 1.526

Adam Jackson ajax at fedoraproject.org
Wed Feb 10 18:14:11 UTC 2010


Author: ajax

Update of /cvs/pkgs/rpms/xorg-x11-server/F-12
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv22764

Modified Files:
	xorg-x11-server.spec 
Added Files:
	xserver-1.7.4-randr-output-unify-compat-hack.patch 
Log Message:
* Wed Feb 10 2010 Adam Jackson <ajax at redhat.com> 1.7.4.902-2
- xserver-1.7.4-randr-output-unify-compat-hack.patch: Restore the compat_output
  field for API (and ABI) compat with drivers.


xserver-1.7.4-randr-output-unify-compat-hack.patch:
 loader/sdksyms.c    |    3 +++
 modes/xf86Crtc.c    |   19 +++++++++++++++----
 modes/xf86Crtc.h    |    3 ++-
 modes/xf86RandR12.c |   23 ++++++++++++++++++++++-
 4 files changed, 42 insertions(+), 6 deletions(-)

--- NEW FILE xserver-1.7.4-randr-output-unify-compat-hack.patch ---
>From 1240532ba6033494d02f41f631965eaad1b49c47 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax at redhat.com>
Date: Wed, 10 Feb 2010 13:12:47 -0500
Subject: [PATCH] randr unify abi compat hack

---
 hw/xfree86/loader/sdksyms.c    |    3 +++
 hw/xfree86/modes/xf86Crtc.c    |   19 +++++++++++++++----
 hw/xfree86/modes/xf86Crtc.h    |    3 ++-
 hw/xfree86/modes/xf86RandR12.c |   22 ++++++++++++++++++++++
 4 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/hw/xfree86/loader/sdksyms.c b/hw/xfree86/loader/sdksyms.c
index 61ed4b9..54307c6 100644
--- a/hw/xfree86/loader/sdksyms.c
+++ b/hw/xfree86/loader/sdksyms.c
@@ -454,6 +454,7 @@ _X_HIDDEN void *xorg_symbols[] = {
     (void *) &Ones,
     (void *) &globalSerialNumber,
     (void *) &serverGeneration,
+    (void *) &omg_wtf_aborting,
     (void *) &AddScreen,
     (void *) &GetScratchPixmapHeader,
     (void *) &FreeScratchPixmapHeader,
@@ -1506,6 +1507,8 @@ _X_HIDDEN void *xorg_symbols[] = {
     (void *) &xf86DestroyCursorInfoRec,
     (void *) &xf86ForceHWCursor,
     (void *) &xf86CrtcConfigPrivateIndex,
+    (void *) &xf86GetPrimaryOutput,
+    (void *) &xf86GetPrimaryCrtc,
     (void *) &xf86CrtcConfigInit,
     (void *) &xf86CrtcSetSizeRange,
     (void *) &xf86CrtcCreate,
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 906981b..544d62a 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1809,6 +1809,8 @@ biggestMode(DisplayModePtr a, DisplayModePtr b)
  *
  * hilariously, this can get called before ->pScreen is filled in.  that's
  * way early in screen init, so we'll assume it just doesn't matter yet.
+ *
+ * for ABI compat with older drivers we also fill in ->compat_output.  weep.
  */
 xf86OutputPtr
 xf86GetPrimaryOutput(ScrnInfoPtr scrn)
@@ -1820,21 +1822,30 @@ xf86GetPrimaryOutput(ScrnInfoPtr scrn)
         rrScrPrivPtr rrScrPriv = rrGetScrPriv(scrn->pScreen);
 
         /* defaults to NULL */
-        if (rrScrPriv->primaryOutput)
-            return rrScrPriv->primaryOutput->devPrivate;
+        if (rrScrPriv->primaryOutput) {
+            xf86OutputPtr ret = rrScrPriv->primaryOutput->devPrivate;
+            for (i = 0; i < config->num_output; i++)
+                if (config->output[i] == ret)
+                    config->compat_output = i;
+            return ret;
+        }
     }
 
     for (i = 0; i < config->num_output; i++) {
         xf86OutputPtr output = config->output[i];
-        if (output->status == XF86OutputStatusConnected)
+        if (output->status == XF86OutputStatusConnected) {
+            config->compat_output = i;
             return output;
+        }
     }
 
     /* desperation */
     for (i = 0; i < config->num_output; i++) {
         xf86OutputPtr output = config->output[i];
-        if (output->status == XF86OutputStatusUnknown)
+        if (output->status == XF86OutputStatusUnknown) {
+            config->compat_output = i;
             return output;
+        }
     }
 
     return NULL;
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
index 39ba81d..b497df7 100644
--- a/hw/xfree86/modes/xf86Crtc.h
+++ b/hw/xfree86/modes/xf86Crtc.h
@@ -631,7 +631,8 @@ typedef void (*xf86_crtc_notify_proc_ptr) (ScreenPtr pScreen);
 typedef struct _xf86CrtcConfig {
     int			num_output;
     xf86OutputPtr	*output;
-    int			unused;
+    /* ABI hack, sigh */
+    int			compat_output;
 
     int			num_crtc;
     xf86CrtcPtr		*crtc;
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index 1510735..a470429 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -62,6 +62,7 @@ typedef struct _xf86RandR12Info {
      * See https://bugs.freedesktop.org/show_bug.cgi?id=21554
      */
     xf86EnterVTProc *orig_EnterVT;
+    xf86AdjustFrameProc *orig_AdjustFrame;
 } XF86RandRInfoRec, *XF86RandRInfoPtr;
 
 #ifdef RANDR_12_INTERFACE
@@ -1766,6 +1767,24 @@ xf86RandR12EnterVT (int screen_index, int flags)
     return RRGetInfo (pScreen, TRUE); /* force a re-probe of outputs and notify clients about changes */
 }
 
+/*
+ * gross ABI hack.  need to ensure compat_output is current before calling
+ * down to driver AdjustFrame, which xf86GetPrimaryOutput does as a side effect
+ */
+static void
+xf86RandR12AdjustFrame(int scrnIndex, int x, int y, int flags)
+{
+    ScrnInfoPtr scrn = xf86Screens[scrnIndex];
+    XF86RandRInfoPtr randrp = XF86RANDRINFO(scrn->pScreen);
+    
+    (void) xf86GetPrimaryOutput(scrn);
+
+    scrn->AdjustFrame = randrp->orig_AdjustFrame;
+    scrn->AdjustFrame(scrnIndex, x, y, flags);
+    randrp->orig_AdjustFrame = scrn->AdjustFrame;
+    scrn->AdjustFrame = xf86RandR12AdjustFrame;
+}
+
 static Bool
 xf86RandR12Init12 (ScreenPtr pScreen)
 {
@@ -1794,6 +1813,9 @@ xf86RandR12Init12 (ScreenPtr pScreen)
     randrp->orig_EnterVT = pScrn->EnterVT;
     pScrn->EnterVT = xf86RandR12EnterVT;
 
+    randrp->orig_AdjustFrame = pScrn->AdjustFrame;
+    pScrn->AdjustFrame = xf86RandR12AdjustFrame;
+
     if (!xf86RandR12CreateObjects12 (pScreen))
 	return FALSE;
 
-- 
1.6.5.2



Index: xorg-x11-server.spec
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-server/F-12/xorg-x11-server.spec,v
retrieving revision 1.525
retrieving revision 1.526
diff -u -p -r1.525 -r1.526
--- xorg-x11-server.spec	8 Feb 2010 00:34:45 -0000	1.525
+++ xorg-x11-server.spec	10 Feb 2010 18:14:11 -0000	1.526
@@ -19,7 +19,7 @@
 Summary:   X.Org X11 X server
 Name:      xorg-x11-server
 Version:   1.7.4.902
-Release:   1%{dist}
+Release:   2%{dist}
 URL:       http://www.x.org
 License:   MIT
 Group:     User Interface/X
@@ -90,8 +90,9 @@ Patch6070: xserver-1.7.3-no-free-on-abor
 # 540584
 Patch6071: xserver-1.7.4-reset-sli-pointers.patch
 Patch6072: xserver-1.7.4-randr-unify-primary-compat.patch
+Patch6073: xserver-1.7.4-randr-output-unify-compat-hack.patch
 # 543647
-Patch6073: xserver-1.7.4-owner-events.patch
+Patch6074: xserver-1.7.4-owner-events.patch
 
 %define moduledir	%{_libdir}/xorg/modules
 %define drimoduledir	%{_libdir}/dri
@@ -109,7 +110,7 @@ Patch6073: xserver-1.7.4-owner-events.pa
 %define enable_xorg --disable-xorg
 %endif
 
-%define kdrive --enable-kdrive --enable-xephyr --disable-xsdl --disable-xfake --disable-xfbdev
+%define kdrive --enable-kdrive --enable-xephyr --disable-xsdl --disable-xfake --enable-xfbdev
 %define xservers --enable-xvfb --enable-xnest %{kdrive} %{enable_xorg}
 
 BuildRequires: git-core
@@ -504,6 +505,7 @@ rm -rf $RPM_BUILD_ROOT
 %files Xephyr
 %defattr(-,root,root,-)
 %{_bindir}/Xephyr
+%{_bindir}/Xfbdev
 %{_mandir}/man1/Xephyr.1*
 
 
@@ -523,6 +525,10 @@ rm -rf $RPM_BUILD_ROOT
 %{xserver_source_dir}
 
 %changelog
+* Wed Feb 10 2010 Adam Jackson <ajax at redhat.com> 1.7.4.902-2
+- xserver-1.7.4-randr-output-unify-compat-hack.patch: Restore the compat_output
+  field for API (and ABI) compat with drivers.
+
 * Mon Feb 08 2010 Peter Hutterer <peter.hutterer at redhat.com> 1.7.4.902-1
 - xserver 1.7.4.902 (1.7.5 RC2)
 



More information about the scm-commits mailing list