xserver/hw/xgl xgl.h, 1.2, 1.3 xglgc.c, 1.2, 1.3 xglpixel.c, 1.1,
1.2 xglpixmap.c, 1.2, 1.3
David Reveman
xserver-commit at pdx.freedesktop.org
Fri Nov 5 04:46:31 PST 2004
Committed by: davidr
Update of /cvs/xserver/xserver/hw/xgl
In directory gabe:/tmp/cvs-serv8048/hw/xgl
Modified Files:
xgl.h xglgc.c xglpixel.c xglpixmap.c
Log Message:
Use negative strides in Xgl if pixel data have bottom-top scanline order
Index: xgl.h
===================================================================
RCS file: /cvs/xserver/xserver/hw/xgl/xgl.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- xgl.h 4 Nov 2004 23:19:13 -0000 1.2
+++ xgl.h 5 Nov 2004 12:46:29 -0000 1.3
@@ -698,7 +698,6 @@
xglSetPixels (DrawablePtr pDrawable,
char *src,
int stride,
- Bool upsideDown,
int x,
int y,
int width,
Index: xglgc.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/xgl/xglgc.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- xglgc.c 4 Nov 2004 23:19:13 -0000 1.2
+++ xglgc.c 5 Nov 2004 12:46:29 -0000 1.3
@@ -159,7 +159,6 @@
if (xglSetPixels (pDrawable,
bits,
PixmapBytePad (w, pDrawable->depth),
- FALSE,
x + pDrawable->x, y + pDrawable->y,
w, h,
REGION_RECTS (pGC->pCompositeClip),
Index: xglpixel.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/xgl/xglpixel.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- xglpixel.c 4 Nov 2004 23:19:13 -0000 1.1
+++ xglpixel.c 5 Nov 2004 12:46:29 -0000 1.2
@@ -30,7 +30,6 @@
xglSetPixels (DrawablePtr pDrawable,
char *src,
int stride,
- Bool upsideDown,
int x,
int y,
int width,
@@ -45,7 +44,6 @@
BoxPtr pDstBox;
int nDstBox;
int dstXoff, dstYoff, dstBpp;
- int dstY, srcY;
int x1, y1, x2, y2;
XGL_DRAWABLE_PIXMAP (pDrawable);
@@ -94,21 +92,11 @@
if (x1 < x2 && y1 < y2)
{
- if (XGL_INTERNAL_SCANLINE_ORDER_UPSIDE_DOWN)
- dstY = pDrawable->height - (y2 + dstYoff);
- else
- dstY = y1 + dstYoff;
-
- if (upsideDown)
- srcY = height - (y2 - y);
- else
- srcY = y1 - y;
-
- fbBlt (srcBits + srcY * srcStride,
+ fbBlt (srcBits + (y1 - y) * srcStride,
srcStride,
(x1 - x) * dstBpp,
- dstBits + dstY * dstStride,
+ dstBits + (y1 + dstYoff) * dstStride,
dstStride,
(x1 + dstXoff) * dstBpp,
@@ -119,7 +107,7 @@
FB_ALLONES,
dstBpp,
FALSE,
- upsideDown != XGL_INTERNAL_SCANLINE_ORDER_UPSIDE_DOWN);
+ FALSE);
pDstBox[nDstBox].x1 = x1;
pDstBox[nDstBox].y1 = y1;
Index: xglpixmap.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/xgl/xglpixmap.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- xglpixmap.c 4 Nov 2004 23:19:13 -0000 1.2
+++ xglpixmap.c 5 Nov 2004 12:46:29 -0000 1.3
@@ -423,18 +423,30 @@
{
if (!pPixmap->devPrivate.ptr)
{
+ CARD8 *bits;
+
XGL_PIXMAP_PRIV (pPixmap);
if (!pPixmapPriv->buffer)
if (!xglAllocatePixmapBits (pPixmap))
return FALSE;
- pPixmap->devKind = pPixmapPriv->stride;
- pPixmap->devPrivate.ptr =
- glitz_buffer_map (pPixmapPriv->buffer,
- GLITZ_BUFFER_ACCESS_READ_WRITE);
- if (!pPixmap->devPrivate.ptr)
+ bits = glitz_buffer_map (pPixmapPriv->buffer,
+ GLITZ_BUFFER_ACCESS_READ_WRITE);
+ if (!bits)
return FALSE;
+
+ if (XGL_INTERNAL_SCANLINE_ORDER_UPSIDE_DOWN && pPixmapPriv->format)
+ {
+ pPixmap->devKind = -pPixmapPriv->stride;
+ pPixmap->devPrivate.ptr =
+ bits + (pPixmap->drawable.height - 1) * pPixmapPriv->stride;
+ }
+ else
+ {
+ pPixmap->devKind = pPixmapPriv->stride;
+ pPixmap->devPrivate.ptr = bits;
+ }
}
return TRUE;
More information about the xserver-commit
mailing list