summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-01-29 14:20:33 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-01-29 14:47:12 +0000
commitd3fb1e1e89ccf5cefe6add66de4f960ef07cac60 (patch)
tree2503badf4dc1753baa4f7fac83c9171dd71b3900
parent518a99ea34b26aa094f29a4cc1ea5419f63a0e56 (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.c21
-rw-r--r--src/sna/sna_trapezoids.c2
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) {