Bugzilla – Attachment 81340 Details for
Bug 152730
Massive XRender corruption ...
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
IDP Log In
|
Forgot Password
[patch]
2nd version of the patch with dx,dy tmp variables to avoid double dereferencing all the time (suggested by Michael)
fbcompose.patch (text/plain), 10.00 KB, created by
Radek Doulik
on 2006-05-02 16:27:39 UTC
(
hide
)
Description:
2nd version of the patch with dx,dy tmp variables to avoid double dereferencing all the time (suggested by Michael)
Filename:
MIME Type:
Creator:
Radek Doulik
Created:
2006-05-02 16:27:39 UTC
Size:
10.00 KB
patch
obsolete
>Index: fbcompose.c >=================================================================== >RCS file: /cvs/xorg/xc/programs/Xserver/fb/fbcompose.c,v >retrieving revision 1.26 >diff -u -p -r1.26 fbcompose.c >--- fbcompose.c 9 Dec 2005 18:35:20 -0000 1.26 >+++ fbcompose.c 2 May 2006 16:25:55 -0000 >@@ -2860,7 +2860,7 @@ static void fbFetchTransformed(PicturePt > FbBits *bits; > FbStride stride; > int bpp; >- int xoff, yoff; >+ int xoff, yoff, dx, dy; > fetchPixelProc fetch; > PictVector v; > PictVector unit; >@@ -2875,8 +2875,11 @@ static void fbFetchTransformed(PicturePt > x += xoff; > y += yoff; > >- v.vector[0] = IntToxFixed(x); >- v.vector[1] = IntToxFixed(y); >+ dx = pict->pDrawable->x; >+ dy = pict->pDrawable->y; >+ >+ v.vector[0] = IntToxFixed(x - dx); >+ v.vector[1] = IntToxFixed(y - dy); > v.vector[2] = xFixed1; > > /* when using convolution filters one might get here without a transform */ >@@ -2909,7 +2912,7 @@ static void fbFetchTransformed(PicturePt > y = MOD(v.vector[1]>>16, pict->pDrawable->height); > x = MOD(v.vector[0]>>16, pict->pDrawable->width); > } >- buffer[i] = fetch(bits + (y + pict->pDrawable->y)*stride, x + pict->pDrawable->x, indexed); >+ buffer[i] = fetch(bits + (y + dy)*stride, x + dx, indexed); > } > v.vector[0] += unit.vector[0]; > v.vector[1] += unit.vector[1]; >@@ -2927,8 +2930,8 @@ static void fbFetchTransformed(PicturePt > y = MOD(v.vector[1]>>16, pict->pDrawable->height); > x = MOD(v.vector[0]>>16, pict->pDrawable->width); > } >- if (POINT_IN_REGION (0, pict->pCompositeClip, x, y, &box)) >- buffer[i] = fetch(bits + (y + pict->pDrawable->y)*stride, x + pict->pDrawable->x, indexed); >+ if (POINT_IN_REGION (0, pict->pCompositeClip, x + dx, y + dy, &box)) >+ buffer[i] = fetch(bits + (y + dy)*stride, x + dx, indexed); > else > buffer[i] = 0; > } >@@ -2940,6 +2943,10 @@ static void fbFetchTransformed(PicturePt > } else { > if (REGION_NUM_RECTS(pict->pCompositeClip) == 1) { > box = pict->pCompositeClip->extents; >+ box.x1 -= dx; >+ box.x2 -= dx; >+ box.y1 -= dy; >+ box.y2 -= dy; > for (i = 0; i < width; ++i) { > if (!v.vector[2]) { > buffer[i] = 0; >@@ -2952,7 +2959,7 @@ static void fbFetchTransformed(PicturePt > x = v.vector[0]>>16; > } > buffer[i] = ((x < box.x1) | (x >= box.x2) | (y < box.y1) | (y >= box.y2)) ? >- 0 : fetch(bits + (y + pict->pDrawable->y)*stride, x + pict->pDrawable->x, indexed); >+ 0 : fetch(bits + (y + dy)*stride, x + dx, indexed); > } > v.vector[0] += unit.vector[0]; > v.vector[1] += unit.vector[1]; >@@ -2970,8 +2977,8 @@ static void fbFetchTransformed(PicturePt > y = v.vector[1]>>16; > x = v.vector[0]>>16; > } >- if (POINT_IN_REGION (0, pict->pCompositeClip, x, y, &box)) >- buffer[i] = fetch(bits + (y + pict->pDrawable->y)*stride, x + pict->pDrawable->x, indexed); >+ if (POINT_IN_REGION (0, pict->pCompositeClip, x + dx, y + dy, &box)) >+ buffer[i] = fetch(bits + (y + dy)*stride, x + dx, indexed); > else > buffer[i] = 0; > } >@@ -3019,13 +3026,13 @@ static void fbFetchTransformed(PicturePt > y1 = MOD (y1, pict->pDrawable->height); > y2 = MOD (y2, pict->pDrawable->height); > >- b = bits + (y1 + pict->pDrawable->y)*stride; >+ b = bits + (y1 + dy)*stride; > >- tl = fetch(b, x1 + pict->pDrawable->x, indexed); >- tr = fetch(b, x2 + pict->pDrawable->x, indexed); >- b = bits + (y2 + pict->pDrawable->y)*stride; >- bl = fetch(b, x1 + pict->pDrawable->x, indexed); >- br = fetch(b, x2 + pict->pDrawable->x, indexed); >+ tl = fetch(b, x1 + dx, indexed); >+ tr = fetch(b, x2 + dx, indexed); >+ b = bits + (y2 + dy)*stride; >+ bl = fetch(b, x1 + dx, indexed); >+ br = fetch(b, x2 + dx, indexed); > > ft = FbGet8(tl,0) * idistx + FbGet8(tr,0) * distx; > fb = FbGet8(bl,0) * idistx + FbGet8(br,0) * distx; >@@ -3080,17 +3087,17 @@ static void fbFetchTransformed(PicturePt > y1 = MOD (y1, pict->pDrawable->height); > y2 = MOD (y2, pict->pDrawable->height); > >- b = bits + (y1 + pict->pDrawable->y)*stride; >+ b = bits + (y1 + dy)*stride; > >- tl = POINT_IN_REGION(0, pict->pCompositeClip, x1, y1, &box) >- ? fetch(b, x1 + pict->pDrawable->x, indexed) : 0; >- tr = POINT_IN_REGION(0, pict->pCompositeClip, x2, y1, &box) >- ? fetch(b, x2 + pict->pDrawable->x, indexed) : 0; >- b = bits + (y2 + pict->pDrawable->y)*stride; >- bl = POINT_IN_REGION(0, pict->pCompositeClip, x1, y2, &box) >- ? fetch(b, x1 + pict->pDrawable->x, indexed) : 0; >- br = POINT_IN_REGION(0, pict->pCompositeClip, x2, y2, &box) >- ? fetch(b, x2 + pict->pDrawable->x, indexed) : 0; >+ tl = POINT_IN_REGION(0, pict->pCompositeClip, x1 + dx, y1 + dy, &box) >+ ? fetch(b, x1 + dx, indexed) : 0; >+ tr = POINT_IN_REGION(0, pict->pCompositeClip, x2 + dx, y1 + dy, &box) >+ ? fetch(b, x2 + dx, indexed) : 0; >+ b = bits + (y2 + dy)*stride; >+ bl = POINT_IN_REGION(0, pict->pCompositeClip, x1 + dx, y2 + dy, &box) >+ ? fetch(b, x1 + dx, indexed) : 0; >+ br = POINT_IN_REGION(0, pict->pCompositeClip, x2 + dx, y2 + dy, &box) >+ ? fetch(b, x2 + dx, indexed) : 0; > > ft = FbGet8(tl,0) * idistx + FbGet8(tr,0) * distx; > fb = FbGet8(bl,0) * idistx + FbGet8(br,0) * distx; >@@ -3114,6 +3121,10 @@ static void fbFetchTransformed(PicturePt > } else { > if (REGION_NUM_RECTS(pict->pCompositeClip) == 1) { > box = pict->pCompositeClip->extents; >+ box.x1 -= dx; >+ box.x2 -= dx; >+ box.y1 -= dy; >+ box.y2 -= dy; > for (i = 0; i < width; ++i) { > if (!v.vector[2]) { > buffer[i] = 0; >@@ -3144,8 +3155,8 @@ static void fbFetchTransformed(PicturePt > idistx = 256 - distx; > idisty = 256 - disty; > >- b = bits + (y1 + pict->pDrawable->y)*stride; >- x_off = x1 + pict->pDrawable->x; >+ b = bits + (y1 + dy)*stride; >+ x_off = x1 + dx; > > x1_out = (x1 < box.x1) | (x1 >= box.x2); > x2_out = (x2 < box.x1) | (x2 >= box.x2); >@@ -3206,17 +3217,17 @@ static void fbFetchTransformed(PicturePt > idistx = 256 - distx; > idisty = 256 - disty; > >- b = bits + (y1 + pict->pDrawable->y)*stride; >- x_off = x1 + pict->pDrawable->x; >+ b = bits + (y1 + dy)*stride; >+ x_off = x1 + dx; > >- tl = POINT_IN_REGION(0, pict->pCompositeClip, x1, y1, &box) >+ tl = POINT_IN_REGION(0, pict->pCompositeClip, x1 + dx, y1 + dy, &box) > ? fetch(b, x_off, indexed) : 0; >- tr = POINT_IN_REGION(0, pict->pCompositeClip, x2, y1, &box) >+ tr = POINT_IN_REGION(0, pict->pCompositeClip, x2 + dx, y1 + dy, &box) > ? fetch(b, x_off + 1, indexed) : 0; > b += stride; >- bl = POINT_IN_REGION(0, pict->pCompositeClip, x1, y2, &box) >+ bl = POINT_IN_REGION(0, pict->pCompositeClip, x1 + dx, y2 + dy, &box) > ? fetch(b, x_off, indexed) : 0; >- br = POINT_IN_REGION(0, pict->pCompositeClip, x2, y2, &box) >+ br = POINT_IN_REGION(0, pict->pCompositeClip, x2 + dx, y2 + dy, &box) > ? fetch(b, x_off + 1, indexed) : 0; > > ft = FbGet8(tl,0) * idistx + FbGet8(tr,0) * distx; >@@ -3274,9 +3285,9 @@ static void fbFetchTransformed(PicturePt > for (x = x1; x < x2; x++) { > if (*p) { > int tx = (pict->repeatType == RepeatNormal) ? MOD (x, pict->pDrawable->width) : x; >- if (POINT_IN_REGION (0, pict->pCompositeClip, tx, ty, &box)) { >- FbBits *b = bits + (ty + pict->pDrawable->y)*stride; >- CARD32 c = fetch(b, tx + pict->pDrawable->x, indexed); >+ if (POINT_IN_REGION (0, pict->pCompositeClip, tx + dx, ty + dy, &box)) { >+ FbBits *b = bits + (ty + dy)*stride; >+ CARD32 c = fetch(b, tx + dx, indexed); > > srtot += Red(c) * *p; > sgtot += Green(c) * *p;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 152730
:
69731
|
69732
|
69734
|
69735
|
69742
|
70149
|
75710
|
75712
|
79183
|
79184
|
80327
|
80328
|
80454
|
80492
|
80595
|
81265
|
81340
|
82989