diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-01-29 14:20:33 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-01-29 14:47:12 +0000 |
commit | d3fb1e1e89ccf5cefe6add66de4f960ef07cac60 (patch) | |
tree | 2503badf4dc1753baa4f7fac83c9171dd71b3900 | |
parent | 518a99ea34b26aa094f29a4cc1ea5419f63a0e56 (diff) |
sna: Handle GPU creation failure when uploading subtexture
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/sna_render.c | 21 | ||||
-rw-r--r-- | src/sna/sna_trapezoids.c | 2 |
2 files changed, 14 insertions, 9 deletions
diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c index abc6325b..cbaaafd5 100644 --- a/src/sna/sna_render.c +++ b/src/sna/sna_render.c @@ -1043,20 +1043,23 @@ sna_render_picture_extract(struct sna *sna, if (!sna_pixmap_move_to_cpu(pixmap, MOVE_READ)) return 0; } else { - if (texture_is_cpu(pixmap, &box) && - !move_to_gpu(pixmap, &box)) { - bo = kgem_upload_source_image(&sna->kgem, - pixmap->devPrivate.ptr, - &box, - pixmap->devKind, - pixmap->drawable.bitsPerPixel); - } else { + bool upload = true; + if (!texture_is_cpu(pixmap, &box) && + move_to_gpu(pixmap, &box)) { struct sna_pixmap *priv; priv = sna_pixmap_move_to_gpu(pixmap, MOVE_READ); - if (priv) + if (priv) { src_bo = priv->gpu_bo; + upload = false; + } } + if (upload) + bo = kgem_upload_source_image(&sna->kgem, + pixmap->devPrivate.ptr, + &box, + pixmap->devKind, + pixmap->drawable.bitsPerPixel); } if (src_bo) { bo = kgem_create_2d(&sna->kgem, w, h, diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c index 2fd1eaf5..eb6c9685 100644 --- a/src/sna/sna_trapezoids.c +++ b/src/sna/sna_trapezoids.c @@ -3973,6 +3973,8 @@ trap_mask_converter(PicturePtr picture, pixmap = get_drawable_pixmap(picture->pDrawable); priv = sna_pixmap_move_to_gpu(pixmap, MOVE_READ | MOVE_WRITE); + if (priv == NULL) + return false; /* XXX strict adherence to the Render specification */ if (picture->polyMode == PolyModePrecise) { |