sna/video: Ensure the video pixmap is on the GPU

The presumption that the pixmap is the scanout and so will always be
pinned is false if there is a shadow or under a compositor. In those
cases, the pixmap may be idle and so the GPU bo reaped. This was
compounded by that the video path did not mark the pixmap as busy. So
whilst watching a video under xfce4 with compositing enabled (has to be
a non-GL compositor) the video would suddenly stall.

Reported-by: Paul Neumann <paul104x@yahoo.de>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=45279
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2012-01-27 20:28:44 +00:00
parent d02bd80b2f
commit 8f4bae01e3
2 changed files with 1 additions and 8 deletions

View File

@ -476,13 +476,6 @@ sna_drawable_move_to_gpu(DrawablePtr drawable, unsigned flags)
return sna_pixmap_move_to_gpu(get_drawable_pixmap(drawable), flags) != NULL;
}
static inline Bool
sna_pixmap_is_gpu(PixmapPtr pixmap)
{
struct sna_pixmap *priv = pixmap ? sna_pixmap(pixmap) : NULL;
return priv && priv->gpu_bo;
}
static inline struct kgem_bo *sna_pixmap_get_bo(PixmapPtr pixmap)
{
return sna_pixmap(pixmap)->gpu_bo;

View File

@ -240,7 +240,7 @@ sna_video_textured_put_image(ScrnInfoPtr scrn,
return BadAlloc;
}
if (!sna_pixmap_is_gpu(pixmap)) {
if (!sna_pixmap_force_to_gpu(pixmap, MOVE_READ | MOVE_WRITE)) {
DBG(("%s: attempting to render to a non-GPU pixmap\n",
__FUNCTION__));
return BadAlloc;