From d3fb1e1e89ccf5cefe6add66de4f960ef07cac60 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 29 Jan 2012 14:20:33 +0000 Subject: [PATCH] sna: Handle GPU creation failure when uploading subtexture Signed-off-by: Chris Wilson --- src/sna/sna_render.c | 21 ++++++++++++--------- 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)) { + 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) { + 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); - } else { - struct sna_pixmap *priv; - - priv = sna_pixmap_move_to_gpu(pixmap, MOVE_READ); - if (priv) - src_bo = priv->gpu_bo; - } } 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) {