diff options
author | Kristian Høgsberg <krh@redhat.com> | 2009-04-01 17:42:33 -0400 |
---|---|---|
committer | Kristian Høgsberg <krh@redhat.com> | 2009-04-02 13:39:52 -0400 |
commit | 91b697efdefba125348dbcaf584ee51a7f8c9bf6 (patch) | |
tree | aca648390117a330ea4234df612a18a64bdbdb83 /glx | |
parent | 1c101d75d4855b2698e3fc8d2dd662f20585812f (diff) |
Support setTexBuffer2 in AIGLX.
Fixes broken GLX_tfp, specifically, lets compositors ignore un-defined
alpha channel for pixmaps.
Diffstat (limited to 'glx')
-rw-r--r-- | glx/glxcmds.c | 5 | ||||
-rw-r--r-- | glx/glxdrawable.h | 1 | ||||
-rw-r--r-- | glx/glxdri2.c | 13 |
3 files changed, 16 insertions, 3 deletions
diff --git a/glx/glxcmds.c b/glx/glxcmds.c index 8b6dfbc84..80f3a6936 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -1134,6 +1134,7 @@ static void determineTextureTarget(XID glxDrawableID, CARD32 *attribs, CARD32 numAttribs) { GLenum target = 0; + GLenum format = 0; int i; __GLXdrawable *pGlxDraw; @@ -1150,6 +1151,9 @@ determineTextureTarget(XID glxDrawableID, CARD32 *attribs, CARD32 numAttribs) break; } } + + if (attribs[2 * i] == GLX_TEXTURE_FORMAT_EXT) + format = attribs[2 * i + 1]; } if (!target) { @@ -1162,6 +1166,7 @@ determineTextureTarget(XID glxDrawableID, CARD32 *attribs, CARD32 numAttribs) } pGlxDraw->target = target; + pGlxDraw->format = format; } int __glXDisp_CreateGLXPixmap(__GLXclientState *cl, GLbyte *pc) diff --git a/glx/glxdrawable.h b/glx/glxdrawable.h index 259b11e17..2d787ae78 100644 --- a/glx/glxdrawable.h +++ b/glx/glxdrawable.h @@ -72,6 +72,7 @@ struct __GLXdrawable { int refCount; GLenum target; + GLenum format; /* ** Event mask diff --git a/glx/glxdri2.c b/glx/glxdri2.c index b12293acb..4df406b5a 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -251,9 +251,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; } |