xf86-video-intel: 3 commits - src/sna/kgem.h src/sna/sna_accel.c src/sna/sna_display.c
Chris Wilson
ickle at kemper.freedesktop.org
Mon Dec 9 02:51:59 PST 2013
src/sna/kgem.h | 5 +----
src/sna/sna_accel.c | 2 +-
src/sna/sna_display.c | 16 ++++++++--------
3 files changed, 10 insertions(+), 13 deletions(-)
New commits:
commit ade25f4f95994b565a8ed8eb3811ff7453a8b0e5
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Dec 9 10:49:56 2013 +0000
sna: Only discard READ hint for TearFree copy iff it subsumes the pixmap
Remembering that the target window may be smaller than its backing
pixmap.
Reported-by: Andreas Klauer <Andreas.Klauer at metamorpher.de>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=72430
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index c11e2cc..f7da098 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -3518,7 +3518,7 @@ use_gpu_bo:
if (flags & IGNORE_CPU) {
region.extents = *box;
region.data = NULL;
- if (region_subsumes_drawable(®ion, drawable))
+ if (region_subsumes_drawable(®ion, &pixmap->drawable))
hint = MOVE_WRITE;
}
commit a66db75bf370549f438796433f3e3fb5f7f0b2a3
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Dec 9 10:32:05 2013 +0000
sna: Fallback gracefully when redisplaying after a GPU hang
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 77d34ae..e4dca71 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -4098,7 +4098,7 @@ static void transformed_box(BoxRec *box, xf86CrtcPtr crtc)
}
static void
-sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region)
+sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo *bo)
{
struct sna *sna = to_sna(crtc->scrn);
struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
@@ -4111,7 +4111,7 @@ sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region)
DBG(("%s: compositing transformed damage boxes\n", __FUNCTION__));
- ptr = kgem_bo_map__gtt(&sna->kgem, sna_crtc->bo);
+ ptr = kgem_bo_map__gtt(&sna->kgem, bo);
if (ptr == NULL)
return;
@@ -4125,7 +4125,7 @@ sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region)
crtc->mode.VDisplay,
sna->front->drawable.depth,
sna->front->drawable.bitsPerPixel,
- sna_crtc->bo->pitch, ptr))
+ bo->pitch, ptr))
goto free_pixmap;
error = sna_render_format_for_depth(sna->front->drawable.depth);
@@ -4156,7 +4156,7 @@ sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region)
if (!dst)
goto free_src;
- kgem_bo_sync__gtt(&sna->kgem, sna_crtc->bo);
+ kgem_bo_sync__gtt(&sna->kgem, bo);
if (sigtrap_get() == 0) { /* paranoia */
const BoxRec *b = REGION_RECTS(region);
@@ -4251,7 +4251,7 @@ sna_crtc_redisplay__composite(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
crtc->mode.HDisplay, crtc->mode.VDisplay,
memset(&tmp, 0, sizeof(tmp)))) {
DBG(("%s: unsupported operation!\n", __FUNCTION__));
- sna_crtc_redisplay__fallback(crtc, region);
+ sna_crtc_redisplay__fallback(crtc, region, bo);
goto free_dst;
}
@@ -4329,7 +4329,7 @@ sna_crtc_redisplay(xf86CrtcPtr crtc, RegionPtr region)
if (can_render(sna))
sna_crtc_redisplay__composite(crtc, region, sna_crtc->bo);
else
- sna_crtc_redisplay__fallback(crtc, region);
+ sna_crtc_redisplay__fallback(crtc, region, sna_crtc->bo);
}
struct wait_for_shadow {
@@ -4504,13 +4504,13 @@ void sna_mode_redisplay(struct sna *sna)
continue;
assert(crtc->enabled);
- assert(crtc->transform_in_use);
+ assert(crtc->transform_in_use || sna->flags & SNA_TEAR_FREE);
damage.extents = crtc->bounds;
damage.data = NULL;
RegionIntersect(&damage, &damage, region);
if (RegionNotEmpty(&damage))
- sna_crtc_redisplay__fallback(crtc, &damage);
+ sna_crtc_redisplay__fallback(crtc, &damage, sna_crtc->bo);
RegionUninit(&damage);
}
commit cf89fb8b731dd541bde16277c52264ba1e150424
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Dec 8 16:35:27 2013 +0000
sna: Simplify kgem_bo_can_map()
Remove the attempt to trick us into mapping large bo.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.h b/src/sna/kgem.h
index 14d7d68..d67f73f 100644
--- a/src/sna/kgem.h
+++ b/src/sna/kgem.h
@@ -668,10 +668,7 @@ static inline bool kgem_bo_can_map(struct kgem *kgem, struct kgem_bo *bo)
if (kgem->gen == 021 && bo->tiling == I915_TILING_Y)
return false;
- if (!bo->presumed_offset)
- return __kgem_bo_num_pages(bo) <= kgem->aperture_mappable / 4;
-
- return bo->presumed_offset / PAGE_SIZE + __kgem_bo_num_pages(bo) <= kgem->aperture_mappable;
+ return __kgem_bo_num_pages(bo) <= kgem->aperture_mappable / 4;
}
static inline bool kgem_bo_can_map__cpu(struct kgem *kgem,
More information about the xorg-commit
mailing list