Hello community,
here is the log from the commit of package xorg-x11-driver-video for openSUSE:Factory
checked in at Wed Jun 9 17:10:14 CEST 2010.
--------
--- xorg-x11-driver-video/xorg-x11-driver-video.changes 2010-04-30 03:05:58.000000000 +0200
+++ /mounts/work_src_done/STABLE/xorg-x11-driver-video/xorg-x11-driver-video.changes 2010-06-07 19:26:44.000000000 +0200
@@ -1,0 +2,8 @@
+Mon Jun 7 19:25:13 CEST 2010 - sndirsch@suse.de
+
+- xf86-video-intel-commit-e2615cd.diff
+ * dri: Only flip if the front and back pixmaps match (bnc #610323)
+- xf86-video-intel-commit-f227240.diff
+ * DRI2: fix new buffer exchange check (bnc #610323)
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
New:
----
xf86-video-intel-commit-e2615cd.diff
xf86-video-intel-commit-f227240.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xorg-x11-driver-video.spec ++++++
--- /var/tmp/diff_new_pack.kBf8to/_old 2010-06-09 17:10:03.000000000 +0200
+++ /var/tmp/diff_new_pack.kBf8to/_new 2010-06-09 17:10:03.000000000 +0200
@@ -23,7 +23,7 @@
BuildRequires: Mesa-devel libdrm-devel pkgconfig xorg-x11-proto-devel xorg-x11-server-sdk
Url: http://xorg.freedesktop.org/
Version: 7.5
-Release: 9
+Release: 10
License: MIT License (or similar)
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Group: System/X11/Servers/XF86_4
@@ -102,6 +102,8 @@
Patch138: xf86-video-intel-mbp_backlight.diff
Patch139: intel_check_kms_on_probe.diff
Patch140: xf86-video-neomagic-commit-4e2afb8.diff
+Patch141: xf86-video-intel-commit-e2615cd.diff
+Patch142: xf86-video-intel-commit-f227240.diff
%description
This package contains X.Org video drivers.
@@ -160,6 +162,8 @@
%patch130 -p0
%patch138 -p1
%patch139 -p1
+%patch141 -p1
+%patch142 -p1
popd
pushd xf86-video-nv-*
%patch132 -p1
++++++ xf86-video-intel-commit-e2615cd.diff ++++++
commit e2615cdeef078dbd2e834b68c437f098a92b941d
Author: Chris Wilson
Date: Sat May 29 16:37:12 2010 +0100
dri: Only flip if the front and back pixmaps match.
An unredirected window (thanks Michel for the reminder) is backed by the
Screen pixmap, and so uses a reference of that as its front buffer. The
back buffer is a pixmap appropriately sized for the drawable. When the
application requests to swap its buffers, obviously we cannot simply
exchange the front and back buffer as they do not match, but need to copy
the appropriate region from the back to the front.
Signed-off-by: Chris Wilson
diff --git a/src/i830_dri.c b/src/i830_dri.c
index 61abd36..bd75b9e 100644
--- a/src/i830_dri.c
+++ b/src/i830_dri.c
@@ -608,6 +608,32 @@ void I830DRI2FlipEventHandler(unsigned int frame, unsigned int tv_sec,
xfree(flip);
}
+static Bool
+can_swap(DRI2BufferPtr front, DRI2BufferPtr back)
+{
+ I830DRI2BufferPrivatePtr front_priv = front->driverPrivate;
+ I830DRI2BufferPrivatePtr back_priv = back->driverPrivate;
+ PixmapPtr front_pixmap = front_priv->pixmap;
+ PixmapPtr back_pixmap = back_priv->pixmap;
+
+ if (front_pixmap->drawable.width != back_pixmap->drawable.width)
+ return FALSE;
+
+ if (front_pixmap->drawable.height != back_pixmap->drawable.height)
+ return FALSE;
+
+ /* XXX should we be checking depth instead of bpp? */
+#if 0
+ if (front_pixmap->drawable.depth != back_pixmap->drawable.depth)
+ return FALSE;
+#else
+ if (front_pixmap->drawable.bitsPerPixel != back_pixmap->drawable.bitsPerPixel)
+ return FALSE;
+#endif
+
+ return TRUE;
+}
+
/*
* ScheduleSwap is responsible for requesting a DRM vblank event for the
* appropriate frame.
@@ -638,12 +664,19 @@ I830DRI2ScheduleSwap(ClientPtr client, DrawablePtr draw, DRI2BufferPtr front,
intel_screen_private *intel = intel_get_screen_private(scrn);
drmVBlank vbl;
int ret, pipe = I830DRI2DrawablePipe(draw), flip = 0;
- DRI2FrameEventPtr swap_info;
+ DRI2FrameEventPtr swap_info = NULL;
enum DRI2FrameEventType swap_type = DRI2_SWAP;
CARD64 current_msc;
BoxRec box;
RegionRec region;
+ /* Drawable not displayed... just complete the swap */
+ if (pipe == -1)
+ goto blit_fallback;
+
+ if (!can_swap(front, back))
+ goto blit_fallback;
+
/* Truncate to match kernel interfaces; means occasional overflow
* misses, but that's generally not a big deal */
*target_msc &= 0xffffffff;
@@ -651,9 +684,7 @@ I830DRI2ScheduleSwap(ClientPtr client, DrawablePtr draw, DRI2BufferPtr front,
remainder &= 0xffffffff;
swap_info = xcalloc(1, sizeof(DRI2FrameEventRec));
-
- /* Drawable not displayed... just complete the swap */
- if (pipe == -1 || !swap_info)
+ if (!swap_info)
goto blit_fallback;
swap_info->drawable_id = draw->id;
@@ -681,8 +712,9 @@ I830DRI2ScheduleSwap(ClientPtr client, DrawablePtr draw, DRI2BufferPtr front,
current_msc = vbl.reply.sequence;
/* Flips need to be submitted one frame before */
- if (DRI2CanFlip(draw) && !intel->shadow_present &&
- intel->use_pageflipping) {
+ if (intel->use_pageflipping &&
+ !intel->shadow_present &&
+ DRI2CanFlip(draw)) {
swap_type = DRI2_FLIP;
flip = 1;
}
++++++ xf86-video-intel-commit-f227240.diff ++++++
commit f2272402035574c206a0e3383c55373c440fd928
Author: Jesse Barnes
Date: Tue Jun 1 13:46:15 2010 -0700
DRI2: fix new buffer exchange check
Chris's new buffer exchange check is a good one, but we don't want to
hit the immediate blit fallback path if it fails. We still want to
schedule a blit for sometime in the future, and we need to use it
wherever an exchange might occur (like the secondary flip check or the
currently disabled CanExchange check).
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=28252.
Signed-off-by: Jesse Barnes
--- xf86-video-intel-2.11.0/src/i830_dri.c.orig 2010-06-07 18:57:59.000000000 +0200
+++ xf86-video-intel-2.11.0/src/i830_dri.c 2010-06-07 19:04:04.000000000 +0200
@@ -506,6 +506,32 @@ I830DRI2ScheduleFlip(ClientPtr client, D
return ret;
}
+static Bool
+can_exchange(DRI2BufferPtr front, DRI2BufferPtr back)
+{
+ I830DRI2BufferPrivatePtr front_priv = front->driverPrivate;
+ I830DRI2BufferPrivatePtr back_priv = back->driverPrivate;
+ PixmapPtr front_pixmap = front_priv->pixmap;
+ PixmapPtr back_pixmap = back_priv->pixmap;
+
+ if (front_pixmap->drawable.width != back_pixmap->drawable.width)
+ return FALSE;
+
+ if (front_pixmap->drawable.height != back_pixmap->drawable.height)
+ return FALSE;
+
+ /* XXX should we be checking depth instead of bpp? */
+#if 0
+ if (front_pixmap->drawable.depth != back_pixmap->drawable.depth)
+ return FALSE;
+#else
+ if (front_pixmap->drawable.bitsPerPixel != back_pixmap->drawable.bitsPerPixel)
+ return FALSE;
+#endif
+
+ return TRUE;
+}
+
void I830DRI2FrameEventHandler(unsigned int frame, unsigned int tv_sec,
unsigned int tv_usec, void *event_data)
{
@@ -532,6 +558,7 @@ void I830DRI2FrameEventHandler(unsigned
/* If we can still flip... */
if (DRI2CanFlip(drawable) && !intel->shadow_present &&
intel->use_pageflipping &&
+ can_exchange(event->front, event->back) &&
I830DRI2ScheduleFlip(event->client, drawable, event->front,
event->back, event->event_complete,
event->event_data)) {
@@ -541,7 +568,8 @@ void I830DRI2FrameEventHandler(unsigned
case DRI2_SWAP: {
int swap_type;
- if (DRI2CanExchange(drawable)) {
+ if (DRI2CanExchange(drawable) && can_exchange(event->front,
+ event->back)) {
I830DRI2ExchangeBuffers(drawable,
event->front, event->back);
swap_type = DRI2_EXCHANGE_COMPLETE;
@@ -614,32 +642,6 @@ void I830DRI2FlipEventHandler(unsigned i
xfree(flip);
}
-static Bool
-can_swap(DRI2BufferPtr front, DRI2BufferPtr back)
-{
- I830DRI2BufferPrivatePtr front_priv = front->driverPrivate;
- I830DRI2BufferPrivatePtr back_priv = back->driverPrivate;
- PixmapPtr front_pixmap = front_priv->pixmap;
- PixmapPtr back_pixmap = back_priv->pixmap;
-
- if (front_pixmap->drawable.width != back_pixmap->drawable.width)
- return FALSE;
-
- if (front_pixmap->drawable.height != back_pixmap->drawable.height)
- return FALSE;
-
- /* XXX should we be checking depth instead of bpp? */
-#if 0
- if (front_pixmap->drawable.depth != back_pixmap->drawable.depth)
- return FALSE;
-#else
- if (front_pixmap->drawable.bitsPerPixel != back_pixmap->drawable.bitsPerPixel)
- return FALSE;
-#endif
-
- return TRUE;
-}
-
/*
* ScheduleSwap is responsible for requesting a DRM vblank event for the
* appropriate frame.
@@ -680,9 +682,6 @@ I830DRI2ScheduleSwap(ClientPtr client, D
if (pipe == -1)
goto blit_fallback;
- if (!can_swap(front, back))
- goto blit_fallback;
-
/* Truncate to match kernel interfaces; means occasional overflow
* misses, but that's generally not a big deal */
*target_msc &= 0xffffffff;
@@ -718,7 +717,8 @@ I830DRI2ScheduleSwap(ClientPtr client, D
/* Flips need to be submitted one frame before */
if (intel->use_pageflipping &&
!intel->shadow_present &&
- DRI2CanFlip(draw)) {
+ DRI2CanFlip(draw) &&
+ can_exchange(front, back)) {
swap_type = DRI2_FLIP;
flip = 1;
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org