summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Xext/shm.c86
-rw-r--r--Xext/shmint.h3
-rw-r--r--exa/exa.c7
-rw-r--r--exa/exa_accel.c88
-rw-r--r--exa/exa_priv.h9
5 files changed, 23 insertions, 170 deletions
diff --git a/Xext/shm.c b/Xext/shm.c
index 6465edb95..ba75263cc 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -101,7 +101,6 @@ typedef struct _ShmDesc {
unsigned long size;
} ShmDescRec, *ShmDescPtr;
-static void miShmPutImage(XSHM_PUT_IMAGE_ARGS);
static PixmapPtr fbShmCreatePixmap(XSHM_CREATE_PIXMAP_ARGS);
static int ShmDetachSegment(
pointer /* value */,
@@ -143,8 +142,8 @@ static int shmPixFormat[MAXSCREENS];
static ShmFuncsPtr shmFuncs[MAXSCREENS];
static DestroyPixmapProcPtr destroyPixmap[MAXSCREENS];
static DevPrivateKey shmPixmapPrivate = &shmPixmapPrivate;
-static ShmFuncs miFuncs = {NULL, miShmPutImage};
-static ShmFuncs fbFuncs = {fbShmCreatePixmap, fbShmPutImage};
+static ShmFuncs miFuncs = {NULL, NULL};
+static ShmFuncs fbFuncs = {fbShmCreatePixmap, NULL};
#define VERIFY_SHMSEG(shmseg,shmdesc,client) \
{ \
@@ -506,66 +505,28 @@ ProcShmDetach(ClientPtr client)
return(client->noClientException);
}
-static void
-miShmPutImage(DrawablePtr dst, GCPtr pGC,
+/*
+ * If the given request doesn't exactly match PutImage's constraints,
+ * wrap the image in a scratch pixmap header and let CopyArea sort it out.
+ */
+static oid
+doShmPutImage(DrawablePtr dst, GCPtr pGC,
int depth, unsigned int format,
int w, int h, int sx, int sy, int sw, int sh, int dx, int dy,
char *data)
{
- PixmapPtr pmap;
- GCPtr putGC;
-
- putGC = GetScratchGC(depth, dst->pScreen);
- if (!putGC)
- return;
- pmap = (*dst->pScreen->CreatePixmap)(dst->pScreen, sw, sh, depth,
- CREATE_PIXMAP_USAGE_SCRATCH);
- if (!pmap)
- {
- FreeScratchGC(putGC);
+ PixmapPtr pPixmap;
+
+ pPixmap = GetScratchPixmapHeader(dst->pScreen, w, h, depth,
+ BitsPerPixel(depth),
+ PixmapBytePad(w, depth),
+ data);
+ if (!pPixmap)
return;
- }
- ValidateGC((DrawablePtr)pmap, putGC);
- (*putGC->ops->PutImage)((DrawablePtr)pmap, putGC, depth, -sx, -sy, w, h, 0,
- (format == XYPixmap) ? XYPixmap : ZPixmap, data);
- FreeScratchGC(putGC);
- if (format == XYBitmap)
- (void)(*pGC->ops->CopyPlane)((DrawablePtr)pmap, dst, pGC, 0, 0, sw, sh,
- dx, dy, 1L);
- else
- (void)(*pGC->ops->CopyArea)((DrawablePtr)pmap, dst, pGC, 0, 0, sw, sh,
- dx, dy);
- (*pmap->drawable.pScreen->DestroyPixmap)(pmap);
-}
-
-_X_EXPORT void
-fbShmPutImage(DrawablePtr dst, GCPtr pGC,
- int depth, unsigned int format,
- int w, int h, int sx, int sy, int sw, int sh, int dx, int dy,
- char *data)
-{
- if ((format == ZPixmap) || (depth == 1))
- {
- PixmapPtr pPixmap;
-
- pPixmap = GetScratchPixmapHeader(dst->pScreen, w, h, depth,
- BitsPerPixel(depth), PixmapBytePad(w, depth), (pointer)data);
- if (!pPixmap)
- return;
- if (format == XYBitmap)
- (void)(*pGC->ops->CopyPlane)((DrawablePtr)pPixmap, dst, pGC,
- sx, sy, sw, sh, dx, dy, 1L);
- else
- (void)(*pGC->ops->CopyArea)((DrawablePtr)pPixmap, dst, pGC,
- sx, sy, sw, sh, dx, dy);
- FreeScratchPixmapHeader(pPixmap);
- }
- else
- miShmPutImage(dst, pGC, depth, format, w, h, sx, sy, sw, sh, dx, dy,
- data);
+ pGC->ops->CopyArea((DrawablePtr)pPixmap, dst, pGC, sx, sy, sw, sh, dx, dy);
+ FreeScratchPixmapHeader(pPixmap);
}
-
#ifdef PANORAMIX
static int
ProcPanoramiXShmPutImage(ClientPtr client)
@@ -918,13 +879,12 @@ ProcShmPutImage(ClientPtr client)
shmdesc->addr + stuff->offset +
(stuff->srcY * length));
else
- (*shmFuncs[pDraw->pScreen->myNum]->PutImage)(
- pDraw, pGC, stuff->depth, stuff->format,
- stuff->totalWidth, stuff->totalHeight,
- stuff->srcX, stuff->srcY,
- stuff->srcWidth, stuff->srcHeight,
- stuff->dstX, stuff->dstY,
- shmdesc->addr + stuff->offset);
+ doShmPutImage(pDraw, pGC, stuff->depth, stuff->format,
+ stuff->totalWidth, stuff->totalHeight,
+ stuff->srcX, stuff->srcY,
+ stuff->srcWidth, stuff->srcHeight,
+ stuff->dstX, stuff->dstY,
+ shmdesc->addr + stuff->offset);
if (stuff->sendEvent)
{
diff --git a/Xext/shmint.h b/Xext/shmint.h
index 33ab6a428..fc056bc72 100644
--- a/Xext/shmint.h
+++ b/Xext/shmint.h
@@ -37,9 +37,6 @@ void
ShmSetPixmapFormat(ScreenPtr pScreen, int format);
void
-fbShmPutImage(XSHM_PUT_IMAGE_ARGS);
-
-void
ShmRegisterFbFuncs(ScreenPtr pScreen);
#endif /* _SHMINT_H_ */
diff --git a/exa/exa.c b/exa/exa.c
index ab7aab330..12c154960 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -936,13 +936,6 @@ exaDriverInit (ScreenPtr pScreen,
}
#endif
-#ifdef MITSHM
- /* Re-register with the MI funcs, which don't allow shared pixmaps.
- * Shared pixmaps are almost always a performance loss for us, but this
- * still allows for SHM PutImage.
- */
- ShmRegisterFuncs(pScreen, &exaShmFuncs);
-#endif
/*
* Hookup offscreen pixmaps
*/
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index c3cf36541..1c07a0b36 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -249,100 +249,12 @@ exaDoPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
return TRUE;
}
-#ifdef MITSHM
-
-static Bool
-exaDoShmPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth,
- unsigned int format, int w, int h, int sx, int sy, int sw,
- int sh, int dx, int dy, char *data)
-{
- int src_stride = PixmapBytePad(w, depth);
-
- if (exaDoPutImage(pDrawable, pGC, depth, dx, dy, sw, sh, format, data +
- sy * src_stride + sx * BitsPerPixel(depth) / 8,
- src_stride))
- return TRUE;
-
- if (format == ZPixmap)
- {
- PixmapPtr pPixmap =
- GetScratchPixmapHeader(pDrawable->pScreen, w, h, depth,
- BitsPerPixel(depth), PixmapBytePad(w, depth),
- (pointer)data);
-
- if (!pPixmap)
- return FALSE;
-
- pGC->ops->CopyArea(&pPixmap->drawable, pDrawable, pGC, sx, sy, sw, sh,
- dx, dy);
-
- FreeScratchPixmapHeader(pPixmap);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-/* The actual ShmPutImage isn't wrapped by the damage layer, so we need to
- * inform any interested parties of the damage incurred to the drawable.
- *
- * We also need to set the pending damage to ensure correct migration in all
- * cases.
- */
-void
-exaShmPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth, unsigned int format,
- int w, int h, int sx, int sy, int sw, int sh, int dx, int dy,
- char *data)
-{
- PixmapPtr pPixmap = exaGetDrawablePixmap(pDrawable);
- ExaPixmapPriv(pPixmap);
- BoxRec box = { .x1 = pDrawable->x + dx, .y1 = pDrawable->y + dy,
- .x2 = pDrawable->x + dx + sw, .y2 = pDrawable->y + dy + sh };
- RegionRec region;
- RegionPtr pending_damage = NULL;
-
- if (pExaPixmap->pDamage)
- pending_damage = DamagePendingRegion(pExaPixmap->pDamage);
-
- if (pending_damage) {
- REGION_INIT(pScreen, &region, &box, 1);
- exaDamageDestForMigration(pDrawable, pPixmap, &region);
- }
-
- if (!exaDoShmPutImage(pDrawable, pGC, depth, format, w, h, sx, sy, sw, sh,
- dx, dy, data)) {
- if (exaGCReadsDestination(pDrawable, pGC->planemask, pGC->fillStyle,
- pGC->alu))
- exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
- else
- exaPrepareAccessReg (pDrawable, EXA_PREPARE_DEST, &region);
- fbShmPutImage(pDrawable, pGC, depth, format, w, h, sx, sy, sw, sh, dx, dy,
- data);
- exaFinishAccess(pDrawable, EXA_PREPARE_DEST);
- }
-
- if (pending_damage) {
- DamageDamageRegion(pDrawable, &region);
- REGION_UNINIT(pScreen, &region);
- }
-}
-
-ShmFuncs exaShmFuncs = { NULL, exaShmPutImage };
-
-#endif
-
static void
exaPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
int w, int h, int leftPad, int format, char *bits)
{
-#ifdef MITSHM
- if (!exaDoShmPutImage(pDrawable, pGC, depth, format, w, h, 0, 0, w, h, x, y,
- bits))
-#else
if (!exaDoPutImage(pDrawable, pGC, depth, x, y, w, h, format, bits,
PixmapBytePad(w, pDrawable->depth)))
-#endif
ExaCheckPutImage(pDrawable, pGC, depth, x, y, w, h, leftPad, format,
bits);
}
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index ca7122be9..0ebe07bd5 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -351,20 +351,11 @@ exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu);
void
-exaShmPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth, unsigned int format,
- int w, int h, int sx, int sy, int sw, int sh, int dx, int dy,
- char *data);
-
-void
exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
unsigned int format, unsigned long planeMask, char *d);
extern const GCOps exaOps;
-#ifdef MITSHM
-extern ShmFuncs exaShmFuncs;
-#endif
-
#ifdef RENDER
void
ExaCheckComposite (CARD8 op,