xserver-xorg-video-intel: Changes to 'ubuntu'
debian/changelog | 9
debian/patches/121_fdo-28798-fix.patch | 307 +++++++++++++++++++++++++++++++++
debian/patches/series | 1
3 files changed, 317 insertions(+)
New commits:
commit 32ba68482c3094ddd27fc1b7de6ccf5f5bf878c7
Author: Timo Aaltonen <tjaalton@ubuntu.com>
Date: Wed Jun 29 14:54:31 2011 +0300
Add 121_fdo-28798-fix.patch: Remove the use of the 3D pipeline for UXA core rendering.
This fixes incorrect rendering in some UI elements (LP: #803012).
diff --git a/debian/changelog b/debian/changelog
index bbfe940..b5f4775 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+xserver-xorg-video-intel (2:2.15.0-3ubuntu2) oneiric; urgency=low
+
+ [ Sameer Morar ]
+ * Add 121_fdo-28798-fix.patch: Remove the use of the 3D pipeline for
+ UXA core rendering. This fixes incorrect rendering in some UI
+ elements (LP: #803012).
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com> Wed, 29 Jun 2011 14:53:37 +0300
+
xserver-xorg-video-intel (2:2.15.0-3ubuntu1) oneiric; urgency=low
[ Timo Aaltonen ]
diff --git a/debian/patches/121_fdo-28798-fix.patch b/debian/patches/121_fdo-28798-fix.patch
new file mode 100644
index 0000000..769cca8
--- /dev/null
+++ b/debian/patches/121_fdo-28798-fix.patch
@@ -0,0 +1,307 @@
+Description: Remove the use of the 3D pipeline for core rendering
+Origin/Author: http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/commit/?id=855ced5a4eb67e287001ae22cb6489639c548cfa
+Bug: http://bugs.freedesktop.org/show_bug.cgi?id=28798
+Index: xserver-xorg-video-intel-2.14.0/uxa/uxa-accel.c
+===================================================================
+--- xserver-xorg-video-intel-2.14.0.orig/uxa/uxa-accel.c 2011-06-28 13:01:38.351466833 +0200
++++ xserver-xorg-video-intel-2.14.0/uxa/uxa-accel.c 2011-06-28 13:01:35.463452510 +0200
+@@ -36,24 +36,6 @@
+ #include "uxa.h"
+ #include "mipict.h"
+
+-static CARD32
+-format_for_depth(int depth)
+-{
+- switch (depth) {
+- case 1: return PICT_a1;
+- case 4: return PICT_a4;
+- case 8: return PICT_a8;
+- case 15: return PICT_x1r5g5b5;
+- case 16: return PICT_r5g6b5;
+- default:
+- case 24: return PICT_x8r8g8b8;
+-#if XORG_VERSION_CURRENT >= 10699900
+- case 30: return PICT_x2r10g10b10;
+-#endif
+- case 32: return PICT_a8r8g8b8;
+- }
+-}
+-
+ static void
+ uxa_fill_spans(DrawablePtr pDrawable, GCPtr pGC, int n,
+ DDXPointPtr ppt, int *pwidth, int fSorted)
+@@ -61,17 +43,13 @@
+ ScreenPtr screen = pDrawable->pScreen;
+ uxa_screen_t *uxa_screen = uxa_get_screen(screen);
+ RegionPtr pClip = fbGetCompositeClip(pGC);
+- PixmapPtr dst_pixmap, src_pixmap = NULL;
++ PixmapPtr dst_pixmap;
+ BoxPtr pextent, pbox;
+ int nbox;
+ int extentX1, extentX2, extentY1, extentY2;
+ int fullX1, fullX2, fullY1;
+ int partX1, partX2;
+ int off_x, off_y;
+- xRenderColor color;
+- PictFormatPtr format;
+- PicturePtr dst, src;
+- int error;
+
+ if (uxa_screen->swappedOut || uxa_screen->force_fallback)
+ goto fallback;
+@@ -83,129 +61,6 @@
+ if (!dst_pixmap)
+ goto fallback;
+
+- if (pGC->alu != GXcopy || !UXA_PM_IS_SOLID(pDrawable, pGC->planemask))
+- goto solid;
+-
+- format = PictureMatchFormat(screen,
+- dst_pixmap->drawable.depth,
+- format_for_depth(dst_pixmap->drawable.depth));
+- dst = CreatePicture(0, &dst_pixmap->drawable, format, 0, 0, serverClient, &error);
+- if (!dst)
+- goto solid;
+-
+- ValidatePicture(dst);
+-
+- uxa_get_rgba_from_pixel(pGC->fgPixel,
+- &color.red,
+- &color.green,
+- &color.blue,
+- &color.alpha,
+- format_for_depth(dst_pixmap->drawable.depth));
+- src = CreateSolidPicture(0, &color, &error);
+- if (!src) {
+- FreePicture(dst, 0);
+- goto solid;
+- }
+-
+- if (!uxa_screen->info->check_composite(PictOpSrc, src, NULL, dst, 0, 0)) {
+- FreePicture(src, 0);
+- FreePicture(dst, 0);
+- goto solid;
+- }
+-
+- if (!uxa_screen->info->check_composite_texture ||
+- !uxa_screen->info->check_composite_texture(screen, src)) {
+- PicturePtr solid;
+- int src_off_x, src_off_y;
+-
+- solid = uxa_acquire_solid(screen, src->pSourcePict);
+- FreePicture(src, 0);
+- if (!solid) {
+- FreePicture(dst, 0);
+- goto solid;
+- }
+-
+- src = solid;
+- src_pixmap = uxa_get_offscreen_pixmap(src->pDrawable,
+- &src_off_x, &src_off_y);
+- if (!src_pixmap) {
+- FreePicture(src, 0);
+- FreePicture(dst, 0);
+- goto solid;
+- }
+- }
+-
+- if (!uxa_screen->info->prepare_composite(PictOpSrc, src, NULL, dst, src_pixmap, NULL, dst_pixmap)) {
+- FreePicture(src, 0);
+- FreePicture(dst, 0);
+- goto solid;
+- }
+-
+- pextent = REGION_EXTENTS(pGC->screen, pClip);
+- extentX1 = pextent->x1;
+- extentY1 = pextent->y1;
+- extentX2 = pextent->x2;
+- extentY2 = pextent->y2;
+- while (n--) {
+- fullX1 = ppt->x;
+- fullY1 = ppt->y;
+- fullX2 = fullX1 + (int)*pwidth;
+- ppt++;
+- pwidth++;
+-
+- if (fullY1 < extentY1 || extentY2 <= fullY1)
+- continue;
+-
+- if (fullX1 < extentX1)
+- fullX1 = extentX1;
+-
+- if (fullX2 > extentX2)
+- fullX2 = extentX2;
+-
+- if (fullX1 >= fullX2)
+- continue;
+-
+- nbox = REGION_NUM_RECTS(pClip);
+- if (nbox == 1) {
+- uxa_screen->info->composite(dst_pixmap,
+- 0, 0, 0, 0,
+- fullX1 + off_x,
+- fullY1 + off_y,
+- fullX2 - fullX1, 1);
+- } else {
+- pbox = REGION_RECTS(pClip);
+- while (nbox--) {
+- if (pbox->y1 > fullY1)
+- break;
+-
+- if (pbox->y1 <= fullY1) {
+- partX1 = pbox->x1;
+- if (partX1 < fullX1)
+- partX1 = fullX1;
+-
+- partX2 = pbox->x2;
+- if (partX2 > fullX2)
+- partX2 = fullX2;
+-
+- if (partX2 > partX1) {
+- uxa_screen->info->composite(dst_pixmap,
+- 0, 0, 0, 0,
+- partX1 + off_x,
+- fullY1 + off_y,
+- partX2 - partX1, 1);
+- }
+- }
+- pbox++;
+- }
+- }
+- }
+-
+- uxa_screen->info->done_composite(dst_pixmap);
+- FreePicture(src, 0);
+- FreePicture(dst, 0);
+- return;
+-
+-solid:
+ if (uxa_screen->info->check_solid &&
+ !uxa_screen->info->check_solid(pDrawable, pGC->alu, pGC->planemask))
+ goto fallback;
+@@ -1040,7 +895,7 @@
+ PixmapPtr pixmap;
+ int xoff, yoff;
+ int nbox;
+- BoxPtr pBox, extents;
++ BoxPtr pBox;
+ Bool ret = FALSE;
+
+ pixmap = uxa_get_offscreen_pixmap(pDrawable, &xoff, &yoff);
+@@ -1051,105 +906,22 @@
+
+ nbox = REGION_NUM_RECTS(pRegion);
+ pBox = REGION_RECTS(pRegion);
+- extents = REGION_EXTENTS(screen, pRegion);
+-
+- /* Using GEM, the relocation costs outweigh the advantages of the blitter */
+- if (nbox == 1 || (alu != GXcopy && alu != GXclear) || !UXA_PM_IS_SOLID(&pixmap->drawable, planemask)) {
+-try_solid:
+- if (uxa_screen->info->check_solid &&
+- !uxa_screen->info->check_solid(&pixmap->drawable, alu, planemask))
+- goto err;
+-
+- if (!uxa_screen->info->prepare_solid(pixmap, alu, planemask, pixel))
+- goto err;
+-
+- while (nbox--) {
+- uxa_screen->info->solid(pixmap,
+- pBox->x1, pBox->y1,
+- pBox->x2, pBox->y2);
+- pBox++;
+- }
+-
+- uxa_screen->info->done_solid(pixmap);
+- } else {
+- PicturePtr dst, src;
+- PixmapPtr src_pixmap = NULL;
+- xRenderColor color;
+- int error;
+-
+- dst = CreatePicture(0, &pixmap->drawable,
+- PictureMatchFormat(screen,
+- pixmap->drawable.depth,
+- format_for_depth(pixmap->drawable.depth)),
+- 0, 0, serverClient, &error);
+- if (!dst)
+- goto err;
+-
+- ValidatePicture(dst);
+-
+- uxa_get_rgba_from_pixel(pixel,
+- &color.red,
+- &color.green,
+- &color.blue,
+- &color.alpha,
+- format_for_depth(pixmap->drawable.depth));
+- src = CreateSolidPicture(0, &color, &error);
+- if (!src) {
+- FreePicture(dst, 0);
+- goto err;
+- }
+
+- if (!uxa_screen->info->check_composite(PictOpSrc, src, NULL, dst,
+- extents->x2 - extents->x1,
+- extents->y2 - extents->y1)) {
+- FreePicture(src, 0);
+- FreePicture(dst, 0);
+- goto try_solid;
+- }
+-
+- if (!uxa_screen->info->check_composite_texture ||
+- !uxa_screen->info->check_composite_texture(screen, src)) {
+- PicturePtr solid;
+- int src_off_x, src_off_y;
+-
+- solid = uxa_acquire_solid(screen, src->pSourcePict);
+- FreePicture(src, 0);
+- if (!solid) {
+- FreePicture(dst, 0);
+- goto err;
+- }
+-
+- src = solid;
+- src_pixmap = uxa_get_offscreen_pixmap(src->pDrawable,
+- &src_off_x, &src_off_y);
+- if (!src_pixmap) {
+- FreePicture(src, 0);
+- FreePicture(dst, 0);
+- goto err;
+- }
+- }
+-
+- if (!uxa_screen->info->prepare_composite(PictOpSrc, src, NULL, dst, src_pixmap, NULL, pixmap)) {
+- FreePicture(src, 0);
+- FreePicture(dst, 0);
+- goto err;
+- }
++ if (uxa_screen->info->check_solid &&
++ !uxa_screen->info->check_solid(&pixmap->drawable, alu, planemask))
++ goto err;
+
+- while (nbox--) {
+- uxa_screen->info->composite(pixmap,
+- 0, 0, 0, 0,
+- pBox->x1,
+- pBox->y1,
+- pBox->x2 - pBox->x1,
+- pBox->y2 - pBox->y1);
+- pBox++;
+- }
++ if (!uxa_screen->info->prepare_solid(pixmap, alu, planemask, pixel))
++ goto err;
+
+- uxa_screen->info->done_composite(pixmap);
+- FreePicture(src, 0);
+- FreePicture(dst, 0);
++ while (nbox--) {
++ uxa_screen->info->solid(pixmap,
++ pBox->x1, pBox->y1,
++ pBox->x2, pBox->y2);
++ pBox++;
+ }
+
++ uxa_screen->info->done_solid(pixmap);
+ ret = TRUE;
+
+ err:
diff --git a/debian/patches/series b/debian/patches/series
index d890ef3..acb63c7 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -3,3 +3,4 @@
# Ubuntu patches
101_copy-fb.patch
120_check_privates.patch
+121_fdo-28798-fix.patch
Reply to: