diff --git a/glamor/glamor_core.c b/glamor/glamor_core.c index f9c1db22f..009a0899b 100644 --- a/glamor/glamor_core.c +++ b/glamor/glamor_core.c @@ -344,6 +344,9 @@ glamor_finish_access(DrawablePtr drawable, glamor_access_t access_mode) free(pixmap->devPrivate.ptr); } + if (pixmap_priv->type == GLAMOR_TEXTURE_DRM) + pixmap->devKind = pixmap_priv->drm_stride; + if (pixmap_priv->gl_fbo == GLAMOR_FBO_DOWNLOADED) pixmap_priv->gl_fbo = GLAMOR_FBO_NORMAL; diff --git a/glamor/glamor_pixmap.c b/glamor/glamor_pixmap.c index fbf159f85..db1b163d5 100644 --- a/glamor/glamor_pixmap.c +++ b/glamor/glamor_pixmap.c @@ -688,6 +688,7 @@ glamor_upload_pixmap_to_texture(PixmapPtr pixmap) glamor_pixmap_private *pixmap_priv; void *data; int pbo; + int ret; pixmap_priv = glamor_get_pixmap_private(pixmap); @@ -706,11 +707,11 @@ glamor_upload_pixmap_to_texture(PixmapPtr pixmap) pixmap->drawable.height, pixmap->devKind, data, pbo)) - return GLAMOR_UPLOAD_DONE; + ret = GLAMOR_UPLOAD_DONE; else - return GLAMOR_UPLOAD_FAILED; + ret = GLAMOR_UPLOAD_FAILED; - return GLAMOR_UPLOAD_DONE; + return ret; } void @@ -1023,6 +1024,12 @@ glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access) pbo = pixmap_priv->fbo->pbo; } + if (pixmap_priv->type == GLAMOR_TEXTURE_DRM) { + stride = PixmapBytePad(pixmap->drawable.width, pixmap->drawable.depth); + pixmap_priv->drm_stride = pixmap->devKind; + pixmap->devKind = stride; + } + dst = glamor_download_sub_pixmap_to_cpu(pixmap, 0, 0, pixmap->drawable.width, pixmap->drawable.height, diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h index 9a153099d..46e4dc54c 100644 --- a/glamor/glamor_priv.h +++ b/glamor/glamor_priv.h @@ -327,6 +327,7 @@ typedef struct glamor_pixmap_private { PictFormatShort pict_format; glamor_pending_op pending_op; PixmapPtr container; + int drm_stride; glamor_screen_private *glamor_priv; } glamor_pixmap_private;