diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-03-08 10:50:32 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-03-08 11:18:01 +0000 |
commit | 8b21659ef2f9cec799b8215a2e5481667bc744bf (patch) | |
tree | 870d89d39b97ca4881b6233d4aa7ff8ee9ae5dfd | |
parent | 7d74300647dd815ae5b4399f84ea339045d12563 (diff) |
sna: Add some assertions around pixmap creation for render operations
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/sna_accel.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index e961c2cb..419d1c69 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -2023,6 +2023,7 @@ sna_pixmap_create_upload(ScreenPtr screen, static inline struct sna_pixmap * sna_pixmap_mark_active(struct sna *sna, struct sna_pixmap *priv) { + assert(priv->gpu_bo); if (!priv->pinned && (priv->create & KGEM_CAN_CREATE_LARGE) == 0) list_move(&priv->inactive, &sna->active_pixmaps); priv->clear = false; @@ -2051,7 +2052,7 @@ sna_pixmap_force_to_gpu(PixmapPtr pixmap, unsigned flags) unsigned mode; mode = 0; - if (priv->cpu_damage) + if (priv->cpu_damage && !priv->cpu_bo) mode |= CREATE_INACTIVE; if (pixmap->usage_hint == SNA_CREATE_FB) mode |= CREATE_EXACT | CREATE_SCANOUT; @@ -2132,14 +2133,25 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags) sna_damage_reduce(&priv->cpu_damage); DBG(("%s: CPU damage? %d\n", __FUNCTION__, priv->cpu_damage != NULL)); if (priv->gpu_bo == NULL) { - if (!wedged(sna) && priv->create & KGEM_CAN_CREATE_GPU) + DBG(("%s: creating GPU bo (%dx%d@%d), create=%x\n", + __FUNCTION__, + pixmap->drawable.width, + pixmap->drawable.height, + pixmap->drawable.bitsPerPixel, + priv->create)); + assert(!priv->mapped); + if (!wedged(sna) && priv->create & KGEM_CAN_CREATE_GPU) { + assert(pixmap->drawable.width > 0); + assert(pixmap->drawable.height > 0); + assert(pixmap->drawable.bitsPerPixel >= 8); priv->gpu_bo = kgem_create_2d(&sna->kgem, pixmap->drawable.width, pixmap->drawable.height, pixmap->drawable.bitsPerPixel, sna_pixmap_choose_tiling(pixmap), - priv->cpu_damage ? CREATE_GTT_MAP | CREATE_INACTIVE : 0); + (priv->cpu_damage && priv->cpu_bo == NULL) ? CREATE_GTT_MAP | CREATE_INACTIVE : 0); + } if (priv->gpu_bo == NULL) { DBG(("%s: not creating GPU bo\n", __FUNCTION__)); assert(list_is_empty(&priv->list)); @@ -2179,6 +2191,7 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags) Bool ok; assert(pixmap_contains_damage(pixmap, priv->cpu_damage)); + DBG(("%s: uploading %d damage boxes\n", __FUNCTION__, n)); ok = FALSE; if (priv->cpu_bo) @@ -2225,7 +2238,7 @@ done: } } active: - return sna_pixmap_mark_active(to_sna_from_pixmap(pixmap), priv); + return sna_pixmap_mark_active(sna, priv); } static bool must_check sna_validate_pixmap(DrawablePtr draw, PixmapPtr pixmap) |