summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2009-09-21 13:50:09 -0700
committerCarl Worth <cworth@cworth.org>2009-09-21 15:46:51 -0700
commit505025053d66d415e1c23ac858b9238fa8541d37 (patch)
tree490d9f3c1446f72a0cc73b8dde658cf60dc2c3ff
parentb4d29452b929a3ef224d3625e4bc66b787c5edb7 (diff)
8xx: Fallback for any non-affine transformation.
There are definitely bugs in the 8xx code dealing with non-affine transformations. Disable that code for now to get things working. Fixes bug #22947 ([855GM, xf86-video-intel-2.8.0] "Freeze" when RENDER extension is being used)
-rw-r--r--src/i830_render.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/i830_render.c b/src/i830_render.c
index b9bbbdbe..8213e296 100644
--- a/src/i830_render.c
+++ b/src/i830_render.c
@@ -390,6 +390,17 @@ i830_check_composite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
if (!i830_get_dest_format(pDstPicture, &tmp1))
I830FALLBACK("Get Color buffer format\n");
+ /* There exists some code to handle non-affine transformations for
+ * 8xx, but from what we can tell, it just isn't correct. (An easy
+ * testcase is to run enlightenemt (e17), click the "e", then
+ * "settings", "settings panel", "advanced", "engine", and finally
+ * "XRender" and "Apply". After doing that, moving any window causes
+ * a GPU hang. */
+ if (!i830_transform_is_affine(pSrcPicture->transform) ||
+ !i830_transform_is_affine(pDstPicture->transform) ||
+ (pMaskPicture && !i830_transform_is_affine (pMaskPicture->transform)))
+ I830FALLBACK("Non-affine transformation\n");
+
return TRUE;
}