glx/drisw: Use scratch GCs for swrastPutImage
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>
This commit is contained in:
parent
ecc5e36298
commit
525db17e04
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue