summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2009-04-01 21:42:33 (GMT)
committerKristian Høgsberg <krh@redhat.com>2009-04-02 17:39:52 (GMT)
commit91b697efdefba125348dbcaf584ee51a7f8c9bf6 (patch)
treeaca648390117a330ea4234df612a18a64bdbdb83
parent1c101d75d4855b2698e3fc8d2dd662f20585812f (diff)
Support setTexBuffer2 in AIGLX.
Fixes broken GLX_tfp, specifically, lets compositors ignore un-defined alpha channel for pixmaps.
-rw-r--r--glx/glxcmds.c5
-rw-r--r--glx/glxdrawable.h1
-rw-r--r--glx/glxdri2.c13
3 files changed, 16 insertions, 3 deletions
diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 8b6dfbc..80f3a69 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 259b11e..2d787ae 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 b12293a..4df406b 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;
}