[xorg-x11-server/f18] fixes for reverse optimus support
Dave Airlie
airlied at fedoraproject.org
Tue Jan 8 00:55:00 UTC 2013
commit c1e706dae839be9f715a3f96024d37be4f933620
Author: Dave Airlie <airlied at redhat.com>
Date: Tue Jan 8 10:51:45 2013 +1000
fixes for reverse optimus support
...ixmap-dirty-helper-to-be-used-for-non-sha.patch | 40 +++++++++++++++++
...n-t-use-display-for-vx-vy-for-gpu-screens.patch | 47 +++++++++++++++++---
0001-xserver-call-CSR-for-gpus.patch | 26 +++++++++++
xorg-x11-server.spec | 9 +++-
4 files changed, 115 insertions(+), 7 deletions(-)
---
diff --git a/0001-dix-allow-pixmap-dirty-helper-to-be-used-for-non-sha.patch b/0001-dix-allow-pixmap-dirty-helper-to-be-used-for-non-sha.patch
new file mode 100644
index 0000000..e524142
--- /dev/null
+++ b/0001-dix-allow-pixmap-dirty-helper-to-be-used-for-non-sha.patch
@@ -0,0 +1,40 @@
+From 73fc15d94136a87807c1ce69d56fb8a34c09fe4f Mon Sep 17 00:00:00 2001
+From: Fedora X Ninjas <x at fedoraproject.org>
+Date: Tue, 8 Jan 2013 09:41:36 +1000
+Subject: [PATCH] dix: allow pixmap dirty helper to be used for non-shared
+ pixmaps
+
+this allows the pixmap dirty helper to be used for reverse optimus
+---
+ dix/pixmap.c | 2 ++
+ fb/fbpixmap.c | 1 +
+ 2 files changed, 3 insertions(+)
+
+diff --git a/dix/pixmap.c b/dix/pixmap.c
+index 2418812..fe92147 100644
+--- a/dix/pixmap.c
++++ b/dix/pixmap.c
+@@ -243,6 +243,8 @@ Bool PixmapSyncDirtyHelper(PixmapDirtyUpdatePtr dirty, RegionPtr dirty_region)
+ }
+
+ dst = dirty->slave_dst->master_pixmap;
++ if (!dst)
++ dst = dirty->slave_dst;
+
+ RegionTranslate(dirty_region, -dirty->x, -dirty->y);
+ n = RegionNumRects(dirty_region);
+diff --git a/fb/fbpixmap.c b/fb/fbpixmap.c
+index fbcdca9..0824b64 100644
+--- a/fb/fbpixmap.c
++++ b/fb/fbpixmap.c
+@@ -67,6 +67,7 @@ fbCreatePixmapBpp(ScreenPtr pScreen, int width, int height, int depth, int bpp,
+ pPixmap->devKind = paddedWidth;
+ pPixmap->refcnt = 1;
+ pPixmap->devPrivate.ptr = (pointer) ((char *) pPixmap + base + adjust);
++ pPixmap->master_pixmap = NULL;
+
+ #ifdef FB_DEBUG
+ pPixmap->devPrivate.ptr =
+--
+1.8.1
+
diff --git a/0001-xf86crtc-don-t-use-display-for-vx-vy-for-gpu-screens.patch b/0001-xf86crtc-don-t-use-display-for-vx-vy-for-gpu-screens.patch
index 1d88c5b..36b6a4c 100644
--- a/0001-xf86crtc-don-t-use-display-for-vx-vy-for-gpu-screens.patch
+++ b/0001-xf86crtc-don-t-use-display-for-vx-vy-for-gpu-screens.patch
@@ -1,17 +1,17 @@
-From 0c05db308881b3b462dae4101312c0034e6288ba Mon Sep 17 00:00:00 2001
+From 2bd6a8491ad3dbd42db66be7ae48f4b6e9c698f2 Mon Sep 17 00:00:00 2001
From: Fedora X Ninjas <x at fedoraproject.org>
Date: Wed, 12 Dec 2012 14:02:54 +1000
Subject: [PATCH] xf86crtc: don't use display for vx/vy for gpu screens
---
- hw/xfree86/modes/xf86Crtc.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
+ hw/xfree86/modes/xf86Crtc.c | 18 +++++++++++-------
+ 1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
-index ba84e6b..61119b3 100644
+index 6975d2f..2828ee0 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
-@@ -2420,11 +2420,11 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
+@@ -2425,11 +2425,11 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
config->debug_modes = xf86ReturnOptValBool(config->options,
OPTION_MODEDEBUG, FALSE);
@@ -25,6 +25,41 @@ index ba84e6b..61119b3 100644
height = scrn->display->virtualY;
else
height = config->maxHeight;
+@@ -2497,8 +2497,10 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
+
+ /* XXX override xf86 common frame computation code */
+
+- scrn->display->frameX0 = 0;
+- scrn->display->frameY0 = 0;
++ if (!scrn->is_gpu) {
++ scrn->display->frameX0 = 0;
++ scrn->display->frameY0 = 0;
++ }
+
+ for (c = 0; c < config->num_crtc; c++) {
+ xf86CrtcPtr crtc = config->crtc[c];
+@@ -2546,7 +2548,7 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
+ }
+ }
+
+- if (scrn->display->virtualX == 0) {
++ if (scrn->display->virtualX == 0 || scrn->is_gpu) {
+ /*
+ * Expand virtual size to cover the current config and potential mode
+ * switches, if the driver can't enlarge the screen later.
+@@ -2561,8 +2563,10 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
+ }
+ }
+
+- scrn->display->virtualX = width;
+- scrn->display->virtualY = height;
++ if (!scrn->is_gpu) {
++ scrn->display->virtualX = width;
++ scrn->display->virtualY = height;
++ }
+ }
+
+ if (width > scrn->virtualX)
--
-1.8.0.1
+1.8.1
diff --git a/0001-xserver-call-CSR-for-gpus.patch b/0001-xserver-call-CSR-for-gpus.patch
new file mode 100644
index 0000000..297d056
--- /dev/null
+++ b/0001-xserver-call-CSR-for-gpus.patch
@@ -0,0 +1,26 @@
+From de313f7537071d72626ffbf64ab0cb5fff5dd5a0 Mon Sep 17 00:00:00 2001
+From: Fedora X Ninjas <x at fedoraproject.org>
+Date: Tue, 8 Jan 2013 09:42:44 +1000
+Subject: [PATCH] xserver: call CSR for gpus
+
+---
+ dix/main.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/dix/main.c b/dix/main.c
+index fb935c9..e558d70 100644
+--- a/dix/main.c
++++ b/dix/main.c
+@@ -211,6 +211,9 @@ main(int argc, char *argv[], char *envp[])
+ ScreenPtr pScreen = screenInfo.gpuscreens[i];
+ if (!CreateScratchPixmapsForScreen(pScreen))
+ FatalError("failed to create scratch pixmaps");
++ if (pScreen->CreateScreenResources &&
++ !(*pScreen->CreateScreenResources) (pScreen))
++ FatalError("failed to create screen resources");
+ }
+
+ for (i = 0; i < screenInfo.numScreens; i++) {
+--
+1.8.1
+
diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec
index 9ed57a0..8cb5592 100644
--- a/xorg-x11-server.spec
+++ b/xorg-x11-server.spec
@@ -43,7 +43,7 @@
Summary: X.Org X11 X server
Name: xorg-x11-server
Version: 1.13.1
-Release: 2%{?gitdate:.%{gitdate}}%{dist}
+Release: 3%{?gitdate:.%{gitdate}}%{dist}
URL: http://www.x.org
License: MIT
Group: User Interface/X
@@ -120,6 +120,10 @@ Patch7066: 0001-xf86crtc-don-t-use-display-for-vx-vy-for-gpu-screens.patch
# autoconfig: send events
Patch7067: 0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch
+# on way upstream: fixes for reverse optimus
+Patch8000: 0001-dix-allow-pixmap-dirty-helper-to-be-used-for-non-sha.patch
+Patch8001: 0001-xserver-call-CSR-for-gpus.patch
+
%global moduledir %{_libdir}/xorg/modules
%global drimoduledir %{_libdir}/dri
%global sdkdir %{_includedir}/xorg
@@ -592,6 +596,9 @@ rm -rf $RPM_BUILD_ROOT
%{xserver_source_dir}
%changelog
+* Tue Jan 08 2013 Dave Airlie <airlied at redhat.com> 1.13.1-3
+- fixes for reverse optimus support
+
* Mon Jan 07 2013 Dave Airlie <airlied at redhat.com> 1.13.1-2
- fix bugs with autobinding output/offload slave from same driver
More information about the scm-commits
mailing list