- Added n_xserver-optimus-autoconfig-hack.patch for FATE#316410. This
is a little hack to make the X server autoconfigure the output sinks for Optimus laptops. This lets them automatically use outputs that are only wired to a certain GPU. To be removed once our desktop tools can configure this easily. OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=517
This commit is contained in:
parent
f4d8ffce9b
commit
7b5feca9a2
113
n_xserver-optimus-autoconfig-hack.patch
Normal file
113
n_xserver-optimus-autoconfig-hack.patch
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
From 3216e0c618cc330f053ed36a749c8d8cfeb87a2f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dave Airlie <airlied@redhat.com>
|
||||||
|
Date: Fri, 17 Aug 2012 09:49:24 +1000
|
||||||
|
Subject: [PATCH] autobind GPUs to the screen, (v3)
|
||||||
|
|
||||||
|
this is racy and really not what we want for hotplug going forward,
|
||||||
|
but until DE support is in GNOME its probably for the best.
|
||||||
|
|
||||||
|
v2: fix if config or slave config is NULL
|
||||||
|
v3: fix multi useful slaves
|
||||||
|
DO NOT UPSTREAM.
|
||||||
|
|
||||||
|
Signed-off-by: Dave Airlie <airlied@gmail.com>
|
||||||
|
---
|
||||||
|
hw/xfree86/common/xf86Init.c | 12 ++++++++++++
|
||||||
|
hw/xfree86/common/xf86platformBus.c | 3 +++
|
||||||
|
hw/xfree86/modes/xf86Crtc.c | 32 ++++++++++++++++++++++++++++++++
|
||||||
|
3 files changed, 47 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
|
||||||
|
index 1e95061..c58fd2b 100644
|
||||||
|
--- a/hw/xfree86/common/xf86Init.c
|
||||||
|
+++ b/hw/xfree86/common/xf86Init.c
|
||||||
|
@@ -361,6 +361,16 @@ xf86CreateRootWindow(WindowPtr pWin)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+extern void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master);
|
||||||
|
+static void
|
||||||
|
+xf86AutoConfigOutputDevices(void)
|
||||||
|
+{
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < xf86NumGPUScreens; i++)
|
||||||
|
+ xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
InstallSignalHandlers(void)
|
||||||
|
{
|
||||||
|
@@ -931,6 +941,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
|
||||||
|
for (i = 0; i < xf86NumGPUScreens; i++)
|
||||||
|
AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
|
||||||
|
|
||||||
|
+ xf86AutoConfigOutputDevices();
|
||||||
|
+
|
||||||
|
xf86VGAarbiterWrapFunctions();
|
||||||
|
if (sigio_blocked)
|
||||||
|
OsReleaseSIGIO();
|
||||||
|
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
||||||
|
index 33b2b7d..be3bdd9 100644
|
||||||
|
--- a/hw/xfree86/common/xf86platformBus.c
|
||||||
|
+++ b/hw/xfree86/common/xf86platformBus.c
|
||||||
|
@@ -393,6 +393,8 @@ xf86platformProbeDev(DriverPtr drvp)
|
||||||
|
return foundScreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
+extern void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master);
|
||||||
|
+
|
||||||
|
int
|
||||||
|
xf86platformAddDevice(int index)
|
||||||
|
{
|
||||||
|
@@ -465,6 +467,7 @@ xf86platformAddDevice(int index)
|
||||||
|
}
|
||||||
|
/* attach unbound to 0 protocol screen */
|
||||||
|
AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
|
||||||
|
+ xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
|
||||||
|
|
||||||
|
RRResourcesChanged(xf86Screens[0]->pScreen);
|
||||||
|
RRTellChanged(xf86Screens[0]->pScreen);
|
||||||
|
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
||||||
|
index a441fd1..c1a56a5 100644
|
||||||
|
--- a/hw/xfree86/modes/xf86Crtc.c
|
||||||
|
+++ b/hw/xfree86/modes/xf86Crtc.c
|
||||||
|
@@ -3383,3 +3383,35 @@ xf86DetachAllCrtc(ScrnInfoPtr scrn)
|
||||||
|
crtc->x = crtc->y = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master)
|
||||||
|
+{
|
||||||
|
+ RRProviderPtr master_provider;
|
||||||
|
+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(master);
|
||||||
|
+ xf86CrtcConfigPtr slave_config = XF86_CRTC_CONFIG_PTR(pScrn);
|
||||||
|
+ Bool unbound = FALSE;
|
||||||
|
+
|
||||||
|
+ if (!config || !slave_config)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ master_provider = config->randr_provider;
|
||||||
|
+
|
||||||
|
+ if ((master->capabilities & RR_Capability_SinkOffload) &&
|
||||||
|
+ pScrn->capabilities & RR_Capability_SourceOffload) {
|
||||||
|
+ /* source offload */
|
||||||
|
+
|
||||||
|
+ DetachUnboundGPU(pScrn->pScreen);
|
||||||
|
+ unbound = TRUE;
|
||||||
|
+ AttachOffloadGPU(master->pScreen, pScrn->pScreen);
|
||||||
|
+ slave_config->randr_provider->offload_sink = master_provider;
|
||||||
|
+ }
|
||||||
|
+ if ((master->capabilities & RR_Capability_SourceOutput) &&
|
||||||
|
+ pScrn->capabilities & RR_Capability_SinkOutput) {
|
||||||
|
+ /* sink offload */
|
||||||
|
+ if (!unbound)
|
||||||
|
+ DetachUnboundGPU(pScrn->pScreen);
|
||||||
|
+ AttachOutputGPU(master->pScreen, pScrn->pScreen);
|
||||||
|
+ slave_config->randr_provider->output_source = master_provider;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
--
|
||||||
|
1.8.4.5
|
||||||
|
|
@ -1,3 +1,12 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon May 19 10:52:32 UTC 2014 - sndirsch@suse.com
|
||||||
|
|
||||||
|
- Added n_xserver-optimus-autoconfig-hack.patch for FATE#316410. This
|
||||||
|
is a little hack to make the X server autoconfigure the output sinks
|
||||||
|
for Optimus laptops. This lets them automatically use outputs that
|
||||||
|
are only wired to a certain GPU. To be removed once our desktop
|
||||||
|
tools can configure this easily.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue May 13 13:19:30 UTC 2014 - tobias.johannes.klausmann@mni.thm.de
|
Tue May 13 13:19:30 UTC 2014 - tobias.johannes.klausmann@mni.thm.de
|
||||||
|
|
||||||
|
@ -154,6 +154,7 @@ Patch107: u_arch-Fix-image-and-bitmap-byte-order-for-ppc64le.patch
|
|||||||
Patch162: b_cache-xkbcomp-output-for-fast-start-up.patch
|
Patch162: b_cache-xkbcomp-output-for-fast-start-up.patch
|
||||||
Patch211: b_0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch
|
Patch211: b_0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch
|
||||||
Patch222: b_sync-fix.patch
|
Patch222: b_sync-fix.patch
|
||||||
|
Patch223: n_xserver-optimus-autoconfig-hack.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This package contains the X.Org Server.
|
This package contains the X.Org Server.
|
||||||
@ -232,6 +233,8 @@ cp %{SOURCE90} .
|
|||||||
### patch222 might not be applicable anymore
|
### patch222 might not be applicable anymore
|
||||||
#%patch222 -p1
|
#%patch222 -p1
|
||||||
|
|
||||||
|
%patch223 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf -fi
|
autoreconf -fi
|
||||||
%configure CFLAGS="%{optflags} -fno-strict-aliasing" \
|
%configure CFLAGS="%{optflags} -fno-strict-aliasing" \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user