diff options
author | Kristian Høgsberg <krh@redhat.com> | 2009-04-01 17:42:33 -0400 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2009-06-29 14:10:40 -0700 |
commit | 6056d429e7dcc37fe706dd7bc8d3429fdb635e14 (patch) | |
tree | c60dd9e624965be66b44a98c180200ce14c62c11 | |
parent | 7cae08d21952b02ef664641af6588ef6bd727bf8 (diff) |
Support setTexBuffer2 in AIGLX.
Fixes broken GLX_tfp, specifically, lets compositors ignore un-defined
alpha channel for pixmaps.
(cherry picked from commit 91b697efdefba125348dbcaf584ee51a7f8c9bf6)
Signed-off-by: Keith Packard <keithp@keithp.com>
-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 24ef893b5..71f15442a 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -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) diff --git a/glx/glxdrawable.h b/glx/glxdrawable.h index 60aacd792..4f61f8b97 100644 --- a/glx/glxdrawable.h +++ b/glx/glxdrawable.h @@ -65,6 +65,7 @@ struct __GLXdrawable { __GLXconfig *config; GLenum target; + GLenum format; /* ** Event mask diff --git a/glx/glxdri2.c b/glx/glxdri2.c index f2682d4d9..0b64298ca 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -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; } |