[PATCH] Compute matrix inversion instead of using wire version in RRCrtcTransformSet

Keith Packard keithp at keithp.com
Fri Nov 14 14:12:43 PST 2008


It doesn't make sense to have the client invert this matrix when the server
can do so reasonably efficiently. This avoids weird fixed point rounding
errors when testing the transform against its inverse. Now to fix the
protocol.
---
 randr/rrcrtc.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index b715884..b8b9ec0 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -608,8 +608,6 @@ RRCrtcTransformSet (RRCrtcPtr		crtc,
     PictFilterPtr   filter = NULL;
     int		    width = 0, height = 0;
 
-    if (!PictureTransformIsInverse (transform, inverse))
-	return BadMatch;
     if (filter_len)
     {
 	filter = PictureFindFilter (crtc->pScreen,
@@ -1229,7 +1227,8 @@ ProcRRSetCrtcTransform (ClientPtr client)
 	return RRErrorBase + BadRRCrtc;
 
     PictTransform_from_xRenderTransform (&transform, &stuff->transform);
-    PictTransform_from_xRenderTransform (&inverse, &stuff->inverse);
+    if (!PictureTransformInvert (&inverse, &transform))
+	return BadMatch;
 
     filter = (char *) (stuff + 1);
     nbytes = stuff->nbytesFilter;
-- 
1.5.6.5




More information about the xorg mailing list