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) {