summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-02-21 10:21:56 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-02-21 11:29:41 +0000
commitc72a67390ea243bf43e2ee4efe237ab88a4615b7 (patch)
tree8ca645a857e7c54bfdee3d77f3e0b1fc51467179
parent27bc2acf0e6a0e5e071e0d187bdf71577e821af8 (diff)
sna/dri: Update for AsyncSwap interface changes
We now need to return TRUE/FALSE depending on whether we need to invalidate the drawable. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/sna_dri.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c
index 2a25cbdc..96324e65 100644
--- a/src/sna/sna_dri.c
+++ b/src/sna/sna_dri.c
@@ -1537,7 +1537,7 @@ blit_fallback:
}
#if DRI2INFOREC_VERSION >= 7
-static void
+static Bool
sna_dri_async_swap(ClientPtr client, DrawablePtr draw,
DRI2BufferPtr front, DRI2BufferPtr back,
DRI2SwapEventPtr func, void *data)
@@ -1553,6 +1553,8 @@ sna_dri_async_swap(ClientPtr client, DrawablePtr draw,
if (pipe == -1) {
PixmapPtr pixmap = get_drawable_pixmap(draw);
+ DBG(("%s: unattached, exchange pixmaps\n", __FUNCTION__));
+
set_bo(pixmap, get_private(back)->bo);
sna_dri_exchange_attachment(front, back);
get_private(back)->pixmap = pixmap;
@@ -1560,18 +1562,20 @@ sna_dri_async_swap(ClientPtr client, DrawablePtr draw,
DRI2SwapComplete(client, draw, 0, 0, 0,
DRI2_EXCHANGE_COMPLETE, func, data);
- return;
+ return TRUE;
}
if (!can_flip(sna, draw, front, back)) {
blit:
+ DBG(("%s: unable to flip, so blit\n", __FUNCTION__));
+
sna_dri_copy(sna, draw, NULL,
get_private(front)->bo,
get_private(back)->bo,
false);
DRI2SwapComplete(client, draw, 0, 0, 0,
DRI2_BLIT_COMPLETE, func, data);
- return;
+ return FALSE;
}
bo = NULL;
@@ -1611,13 +1615,13 @@ blit:
sna_dri_reference_buffer(front);
sna_dri_reference_buffer(back);
-
} else if (info->type != DRI2_ASYNC_FLIP) {
/* A normal vsync'ed client is finishing, wait for it
* to unpin the old framebuffer before taking over.
*/
goto blit;
} else {
+ DBG(("%s: pending flip, chaining next\n", __FUNCTION__));
if (info->next_front.name == info->front->name) {
name = info->cache.name;
bo = info->cache.bo;
@@ -1629,16 +1633,16 @@ blit:
get_private(info->front)->bo = get_private(info->back)->bo;
}
- if (bo == NULL)
+ if (bo == NULL) {
+ DBG(("%s: creating new back buffer\n", __FUNCTION__));
bo = kgem_create_2d(&sna->kgem,
draw->width,
draw->height,
draw->bitsPerPixel,
I915_TILING_X, CREATE_EXACT);
- get_private(info->back)->bo = bo;
-
- if (name == 0)
name = kgem_bo_flink(&sna->kgem, bo);
+ }
+ get_private(info->back)->bo = bo;
info->back->name = name;
set_bo(sna->front, get_private(info->front)->bo);
@@ -1646,6 +1650,7 @@ blit:
DRI2SwapComplete(client, draw, 0, 0, 0,
DRI2_EXCHANGE_COMPLETE, func, data);
+ return TRUE;
}
#endif