summaryrefslogtreecommitdiff
path: root/src/vmware.c
diff options
context:
space:
mode:
authorBankim Bhavsar <bbhavsar@vmware.com>2008-08-19 11:23:02 -0700
committerPhilip Langdale <philipl@fido2.homeip.net>2008-08-19 11:23:02 -0700
commit6ea8e5000519865dd936cfe82d67efc7d107a28c (patch)
treea4ea47df3d3ef39d462a2b5baf71d4c7f47915a6 /src/vmware.c
parent0576b87c27d3d885cc698a3cc013bcfa4021942c (diff)
Add RegionEqual function for older XFree86 versions.
Fixes bug : http://bugzilla.eng.vmware.com/show_bug.cgi?id=312853 When we added AUTOPAINT_COLORKEY capability to our VMware video driver, region functions were used to keep track of colorkey painting. REGION_EQUAL was one of them. Unfortunately REGION_EQUAL was not present in regionstr.h shipped with XFree86 version 4.3.0. This version is used by TurboLinux 10; causing X server to crash while playing videos. REGION_EQUAL was added in revision 1.8 of regionstr.h and available for xfree86 version 4.3.99 onwards. Reference: http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/include/regionstr.h.diff?r1=1.7&r2=1.8 When I compiled the existing code(without my change), I see a warning was generated indicating REGION_EQUAL is not present. Too bad we missed it. This patch includes 1) Slightly modified version of miRegionEqual from miRegion.c 2) Some formating cleanup.
Diffstat (limited to 'src/vmware.c')
-rw-r--r--src/vmware.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/vmware.c b/src/vmware.c
index c2b72e8..cff4715 100644
--- a/src/vmware.c
+++ b/src/vmware.c
@@ -1447,6 +1447,59 @@ VMWAREAddDisplayMode(ScrnInfoPtr pScrn,
}
+/*
+ *-----------------------------------------------------------------------------
+ *
+ * vmwareIsRegionEqual --
+ *
+ * This function implements REGION_EQUAL because older versions of
+ * regionstr.h don't define it.
+ * It is a slightly modified version of miRegionEqual from $Xorg: miregion.c
+ *
+ * Results:
+ * TRUE if regions are equal; FALSE otherwise
+ *
+ * Side effects:
+ * None.
+ *
+ *-----------------------------------------------------------------------------
+ */
+
+Bool
+vmwareIsRegionEqual(const RegionPtr reg1,
+ const RegionPtr reg2)
+{
+ int i, num;
+ BoxPtr rects1, rects2;
+
+ if ((reg1->extents.x1 != reg2->extents.x1) ||
+ (reg1->extents.x2 != reg2->extents.x2) ||
+ (reg1->extents.y1 != reg2->extents.y1) ||
+ (reg1->extents.y2 != reg2->extents.y2)) {
+ return FALSE;
+ }
+
+ num = REGION_NUM_RECTS(reg1);
+ if (num != REGION_NUM_RECTS(reg2)) {
+ return FALSE;
+ }
+
+ rects1 = REGION_RECTS(reg1);
+ rects2 = REGION_RECTS(reg2);
+
+ for (i = 0; i < num; i++) {
+ if ((rects1[i].x1 != rects2[i].x1) ||
+ (rects1[i].x2 != rects2[i].x2) ||
+ (rects1[i].y1 != rects2[i].y1) ||
+ (rects1[i].y2 != rects2[i].y2)) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+
#if VMWARE_DRIVER_FUNC
static Bool
VMWareDriverFunc(ScrnInfoPtr pScrn,