DRI2: Add fake front-buffer to request list for windows
If a front-buffer is requested for a window, add the fake front-buffer to the list of requested buffers. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
808fd2c67f
commit
aa2928325f
|
@ -139,6 +139,42 @@ DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height,
|
||||||
DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
|
DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
|
||||||
DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
|
DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
|
||||||
DRI2BufferPtr buffers;
|
DRI2BufferPtr buffers;
|
||||||
|
unsigned int temp_buf[32];
|
||||||
|
unsigned int *temp = temp_buf;
|
||||||
|
|
||||||
|
|
||||||
|
/* If the drawable is a window and the front-buffer is requested, silently
|
||||||
|
* add the fake front-buffer to the list of requested attachments. The
|
||||||
|
* counting logic in the loop accounts for the case where the client
|
||||||
|
* requests both the fake and real front-buffer.
|
||||||
|
*/
|
||||||
|
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||||
|
int need_fake_front = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if ((count + 1) > 32) {
|
||||||
|
temp = xalloc((count + 1) * sizeof(temp[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
if (attachments[i] == DRI2BufferFrontLeft) {
|
||||||
|
need_fake_front++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attachments[i] == DRI2BufferFakeFrontLeft) {
|
||||||
|
need_fake_front--;
|
||||||
|
}
|
||||||
|
|
||||||
|
temp[i] = attachments[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (need_fake_front > 0) {
|
||||||
|
temp[i] = DRI2BufferFakeFrontLeft;
|
||||||
|
count++;
|
||||||
|
attachments = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (pPriv->buffers == NULL ||
|
if (pPriv->buffers == NULL ||
|
||||||
pDraw->width != pPriv->width || pDraw->height != pPriv->height)
|
pDraw->width != pPriv->width || pDraw->height != pPriv->height)
|
||||||
|
@ -151,6 +187,10 @@ DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height,
|
||||||
pPriv->height = pDraw->height;
|
pPriv->height = pDraw->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (temp != temp_buf) {
|
||||||
|
xfree(temp);
|
||||||
|
}
|
||||||
|
|
||||||
*width = pPriv->width;
|
*width = pPriv->width;
|
||||||
*height = pPriv->height;
|
*height = pPriv->height;
|
||||||
*out_count = pPriv->bufferCount;
|
*out_count = pPriv->bufferCount;
|
||||||
|
|
Loading…
Reference in New Issue