sna: Avoid operating inplace if we have pending CPU damage
If the operation does not replace existing CPU damage, we are likely to want to reuse the pixmap again on the CPU, so avoid mixing CPU/GPU operations. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
f5d02d90f3
commit
ce93c00a33
|
|
@ -870,9 +870,29 @@ static inline bool region_inplace(struct sna *sna,
|
|||
if (wedged(sna))
|
||||
return false;
|
||||
|
||||
if (priv->mapped)
|
||||
if (priv->mapped) {
|
||||
DBG(("%s: already mapped\n", __FUNCTION__));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (priv->cpu_damage) {
|
||||
const BoxRec *extents = ®ion->extents;
|
||||
const BoxRec *damage = &priv->cpu_damage->extents;
|
||||
if (extents->x2 < damage->x2 || extents->x1 > damage->x1 ||
|
||||
extents->y2 < damage->y2 || extents->y1 > damage->y1) {
|
||||
DBG(("%s: uncovered CPU damage pending\n", __FUNCTION__));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
DBG(("%s: (%dx%d), inplace? %d\n",
|
||||
__FUNCTION__,
|
||||
region->extents.x2 - region->extents.x1,
|
||||
region->extents.y2 - region->extents.y1,
|
||||
((region->extents.x2 - region->extents.x1) *
|
||||
(region->extents.y2 - region->extents.y1) *
|
||||
pixmap->drawable.bitsPerPixel >> 12)
|
||||
>= sna->kgem.half_cpu_cache_pages));
|
||||
return ((region->extents.x2 - region->extents.x1) *
|
||||
(region->extents.y2 - region->extents.y1) *
|
||||
pixmap->drawable.bitsPerPixel >> 12)
|
||||
|
|
|
|||
Loading…
Reference in New Issue