Skip to content

Commit

Permalink
glx/drisw: Use scratch GCs for swrastPutImage
Browse files Browse the repository at this point in the history
The scratch GC defaults to the same state as our persistent GCs. Except
for the "draw" GC, which would generate graphics exposures for... well,
no reason really, PutImage doesn't generate graphics exposures.

Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
  • Loading branch information
nwnk committed Jun 20, 2017
1 parent ecc5e36 commit 525db17
Showing 1 changed file with 5 additions and 28 deletions.
33 changes: 5 additions & 28 deletions glx/glxdriswrast.c
Expand Up @@ -82,9 +82,6 @@ struct __GLXDRIdrawable {
__GLXdrawable base;
__DRIdrawable *driDrawable;
__GLXDRIscreen *screen;

GCPtr gc; /* scratch GC for span drawing */
GCPtr swapgc; /* GC for swapping the color buffers */
};

/* white lie */
Expand All @@ -98,9 +95,6 @@ __glXDRIdrawableDestroy(__GLXdrawable * drawable)

(*core->destroyDrawable) (private->driDrawable);

FreeGC(private->gc, (GContext) 0);
FreeGC(private->swapgc, (GContext) 0);

__glXDrawableRelease(drawable);

free(private);
Expand Down Expand Up @@ -258,8 +252,6 @@ __glXDRIscreenCreateDrawable(ClientPtr client,
XID drawId,
int type, XID glxDrawId, __GLXconfig * glxConfig)
{
XID gcvals[2];
int status;
__GLXDRIscreen *driScreen = (__GLXDRIscreen *) screen;
__GLXDRIconfig *config = (__GLXDRIconfig *) glxConfig;
__GLXDRIdrawable *private;
Expand All @@ -279,14 +271,6 @@ __glXDRIscreenCreateDrawable(ClientPtr client,
private->base.swapBuffers = __glXDRIdrawableSwapBuffers;
private->base.copySubBuffer = __glXDRIdrawableCopySubBuffer;

gcvals[0] = GXcopy;
private->gc =
CreateGC(pDraw, GCFunction, gcvals, &status, (XID) 0, serverClient);
gcvals[1] = FALSE;
private->swapgc =
CreateGC(pDraw, GCFunction | GCGraphicsExposures, gcvals, &status,
(XID) 0, serverClient);

private->driDrawable =
(*driScreen->swrast->createNewDrawable) (driScreen->driScreen,
config->driConfig, private);
Expand Down Expand Up @@ -316,20 +300,13 @@ swrastPutImage(__DRIdrawable * draw, int op,
GCPtr gc;
__GLXcontext *cx = lastGLContext;

switch (op) {
case __DRI_SWRAST_IMAGE_OP_DRAW:
gc = drawable->gc;
break;
case __DRI_SWRAST_IMAGE_OP_SWAP:
gc = drawable->swapgc;
break;
default:
return;
if ((gc = GetScratchGC(pDraw->depth, pDraw->pScreen))) {
ValidateGC(pDraw, gc);
gc->ops->PutImage(pDraw, gc, pDraw->depth, x, y, w, h, 0, ZPixmap,
data);
FreeScratchGC(gc);
}

ValidateGC(pDraw, gc);

gc->ops->PutImage(pDraw, gc, pDraw->depth, x, y, w, h, 0, ZPixmap, data);
if (cx != lastGLContext) {
lastGLContext = cx;
cx->makeCurrent(cx);
Expand Down

0 comments on commit 525db17

Please sign in to comment.