Support setTexBuffer2 in AIGLX.

Fixes broken GLX_tfp, specifically, lets compositors ignore un-defined
alpha channel for pixmaps.
(cherry picked from commit 91b697efde)

Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Kristian Høgsberg 2009-04-01 17:42:33 -04:00 committed by Keith Packard
parent 7cae08d219
commit 6056d429e7
3 changed files with 16 additions and 3 deletions

View File

@ -1132,6 +1132,7 @@ static void
determineTextureTarget(XID glxDrawableID, CARD32 *attribs, CARD32 numAttribs)
{
GLenum target = 0;
GLenum format = 0;
int i;
__GLXdrawable *pGlxDraw;
@ -1148,6 +1149,9 @@ determineTextureTarget(XID glxDrawableID, CARD32 *attribs, CARD32 numAttribs)
break;
}
}
if (attribs[2 * i] == GLX_TEXTURE_FORMAT_EXT)
format = attribs[2 * i + 1];
}
if (!target) {
@ -1160,6 +1164,7 @@ determineTextureTarget(XID glxDrawableID, CARD32 *attribs, CARD32 numAttribs)
}
pGlxDraw->target = target;
pGlxDraw->format = format;
}
int __glXDisp_CreateGLXPixmap(__GLXclientState *cl, GLbyte *pc)

View File

@ -65,6 +65,7 @@ struct __GLXdrawable {
__GLXconfig *config;
GLenum target;
GLenum format;
/*
** Event mask

View File

@ -222,9 +222,16 @@ __glXDRIbindTexImage(__GLXcontext *baseContext,
if (texBuffer == NULL)
return Success;
texBuffer->setTexBuffer(context->driContext,
glxPixmap->target,
drawable->driDrawable);
if (texBuffer->base.version >= 2 && texBuffer->setTexBuffer2 != NULL) {
(*texBuffer->setTexBuffer2)(context->driContext,
glxPixmap->target,
glxPixmap->format,
drawable->driDrawable);
} else {
texBuffer->setTexBuffer(context->driContext,
glxPixmap->target,
drawable->driDrawable);
}
return Success;
}