summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-03-08 10:50:32 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-03-08 11:18:01 +0000
commit8b21659ef2f9cec799b8215a2e5481667bc744bf (patch)
tree870d89d39b97ca4881b6233d4aa7ff8ee9ae5dfd
parent7d74300647dd815ae5b4399f84ea339045d12563 (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.c21
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)