Merge remote-tracking branch 'ajax/xserver-next'

This commit is contained in:
Keith Packard 2015-01-04 17:02:25 -08:00
commit 1c01633877
1 changed files with 40 additions and 29 deletions

View File

@ -1916,44 +1916,55 @@ DoGetDrawableAttributes(__GLXclientState * cl, XID drawId)
{ {
ClientPtr client = cl->client; ClientPtr client = cl->client;
xGLXGetDrawableAttributesReply reply; xGLXGetDrawableAttributesReply reply;
__GLXdrawable *pGlxDraw; __GLXdrawable *pGlxDraw = NULL;
DrawablePtr pDraw;
CARD32 attributes[14]; CARD32 attributes[14];
int numAttribs = 0, error; int num = 0, error;
if (!validGlxDrawable(client, drawId, GLX_DRAWABLE_ANY, if (!validGlxDrawable(client, drawId, GLX_DRAWABLE_ANY,
DixGetAttrAccess, &pGlxDraw, &error)) DixGetAttrAccess, &pGlxDraw, &error)) {
return error; /* hack for GLX 1.2 naked windows */
int err = dixLookupWindow((WindowPtr *)&pDraw, drawId, client,
DixGetAttrAccess);
if (err != Success)
return error;
}
if (pGlxDraw)
pDraw = pGlxDraw->pDraw;
attributes[0] = GLX_TEXTURE_TARGET_EXT; attributes[2*num] = GLX_Y_INVERTED_EXT;
attributes[1] = pGlxDraw->target == GL_TEXTURE_2D ? GLX_TEXTURE_2D_EXT : attributes[2*num+1] = GL_FALSE;
GLX_TEXTURE_RECTANGLE_EXT; num++;
numAttribs++; attributes[2*num] = GLX_WIDTH;
attributes[2] = GLX_Y_INVERTED_EXT; attributes[2*num+1] = pDraw->width;
attributes[3] = GL_FALSE; num++;
numAttribs++; attributes[2*num] = GLX_HEIGHT;
attributes[4] = GLX_EVENT_MASK; attributes[2*num+1] = pDraw->height;
attributes[5] = pGlxDraw->eventMask; num++;
numAttribs++; if (pGlxDraw) {
attributes[6] = GLX_WIDTH; attributes[2*num] = GLX_TEXTURE_TARGET_EXT;
attributes[7] = pGlxDraw->pDraw->width; attributes[2*num+1] = pGlxDraw->target == GL_TEXTURE_2D ?
numAttribs++; GLX_TEXTURE_2D_EXT :
attributes[8] = GLX_HEIGHT; GLX_TEXTURE_RECTANGLE_EXT;
attributes[9] = pGlxDraw->pDraw->height; num++;
numAttribs++; attributes[2*num] = GLX_EVENT_MASK;
attributes[10] = GLX_FBCONFIG_ID; attributes[2*num+1] = pGlxDraw->eventMask;
attributes[11] = pGlxDraw->config->fbconfigID; num++;
numAttribs++; attributes[2*num] = GLX_FBCONFIG_ID;
if (pGlxDraw->type == GLX_DRAWABLE_PBUFFER) { attributes[2*num+1] = pGlxDraw->config->fbconfigID;
attributes[12] = GLX_PRESERVED_CONTENTS; num++;
attributes[13] = GL_TRUE; if (pGlxDraw->type == GLX_DRAWABLE_PBUFFER) {
numAttribs++; attributes[2*num] = GLX_PRESERVED_CONTENTS;
attributes[2*num+1] = GL_TRUE;
num++;
}
} }
reply = (xGLXGetDrawableAttributesReply) { reply = (xGLXGetDrawableAttributesReply) {
.type = X_Reply, .type = X_Reply,
.sequenceNumber = client->sequence, .sequenceNumber = client->sequence,
.length = numAttribs << 1, .length = num << 1,
.numAttribs = numAttribs .numAttribs = num
}; };
if (client->swapped) { if (client->swapped) {