diff options
author | Bankim Bhavsar <bbhavsar@vmware.com> | 2008-08-19 11:23:02 -0700 |
---|---|---|
committer | Philip Langdale <philipl@fido2.homeip.net> | 2008-08-19 11:23:02 -0700 |
commit | 6ea8e5000519865dd936cfe82d67efc7d107a28c (patch) | |
tree | a4ea47df3d3ef39d462a2b5baf71d4c7f47915a6 /src/vmware.c | |
parent | 0576b87c27d3d885cc698a3cc013bcfa4021942c (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.c | 53 |
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, |