xf86-video-intel: 3 commits - src/sna/gen6_render.c src/sna/gen7_render.c src/sna/gen8_render.c src/sna/kgem.c src/sna/sna_display.c src/sna/sna_dri2.c
Chris Wilson
ickle at kemper.freedesktop.org
Mon Jun 23 03:32:24 PDT 2014
src/sna/gen6_render.c | 16 ++++++++--------
src/sna/gen7_render.c | 16 ++++++++--------
src/sna/gen8_render.c | 16 ++++++++--------
src/sna/kgem.c | 2 +-
src/sna/sna_display.c | 2 +-
src/sna/sna_dri2.c | 10 +++++++---
6 files changed, 33 insertions(+), 29 deletions(-)
New commits:
commit 6848fb235b1bac84e91d1efde4094540180c4d48
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Jun 23 11:27:20 2014 +0100
sna: Fix flushing empty batches
A logic inversion in
commit 1909910fdf89216d18703e50728f4604f75d5d66
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Jun 22 20:19:22 2014 +0100
sna: Inject a batch flush before adding a fresh bo
also applied the injection to when the batch was empty.
Reported-by: Jiri Slaby <jirislaby at gmail.com>
References: https://bugs.freedesktop.org/show_bug.cgi?id=70461#c48
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index b54084c..dfaf878 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -5217,7 +5217,7 @@ inline static bool needs_reservation(struct kgem *kgem, struct kgem_bo *bo)
inline static bool needs_batch_flush(struct kgem *kgem, struct kgem_bo *bo)
{
- if (kgem->nreloc)
+ if (kgem->nreloc == 0)
return false;
if (needs_semaphore(kgem, bo)) {
commit 60fd6764eba05f51bb83efba5593975cf8d1285b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Jun 23 11:25:47 2014 +0100
sna: Handle old busy_ioctl not reporting the active ring
If we have an old kernel, just presume that the bo was last active on the
render ring.
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 3e4a4b5..ecec052 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -6439,7 +6439,7 @@ fixup_flip:
if (drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GEM_BUSY, &busy) == 0) {
if (busy.busy) {
int mode = KGEM_RENDER;
- if ((busy.busy & (1 << 16)) == 0)
+ if (busy.busy & (0xfffe << 16))
mode = KGEM_BLT;
DBG(("%s: marking flip bo as busy [%x -> mode=%d]\n", __FUNCTION__, busy.busy, mode));
kgem_bo_mark_busy(&sna->kgem, flip_bo, mode);
diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 2b8cd03..686fd60 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -778,13 +778,17 @@ static void sna_dri2_select_mode(struct sna *sna, struct kgem_bo *dst, struct kg
if (drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GEM_BUSY, &busy))
return;
- DBG(("%s: src busy?=%x\n", __FUNCTION__, busy.busy));
+ DBG(("%s: src handle=%d busy?=%x\n", __FUNCTION__, busy.handle, busy.busy));
if (busy.busy == 0) {
+ __kgem_bo_clear_busy(src);
+
busy.handle = dst->handle;
if (drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GEM_BUSY, &busy))
return;
- DBG(("%s: dst busy?=%x\n", __FUNCTION__, busy.busy));
+
+ DBG(("%s: dst handle=%d busy?=%x\n", __FUNCTION__, busy.handle, busy.busy));
if (busy.busy == 0) {
+ __kgem_bo_clear_busy(dst);
DBG(("%s: src/dst is idle, using defaults\n", __FUNCTION__));
return;
}
@@ -806,7 +810,7 @@ static void sna_dri2_select_mode(struct sna *sna, struct kgem_bo *dst, struct kg
* the cost of the query.
*/
mode = KGEM_RENDER;
- if ((busy.busy & (1 << 16)) == 0)
+ if (busy.busy & (0xfffe << 16))
mode = KGEM_BLT;
kgem_bo_mark_busy(&sna->kgem, busy.handle == src->handle ? src : dst, mode);
_kgem_set_mode(&sna->kgem, mode);
commit 30348efd57135edee41fccb87133c572b6473aa8
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Jun 23 11:14:25 2014 +0100
sna/gen6+: Avoid adjusting copy coordinates until commited to using them
If we need to fallback to the BLT unit, we need to pass it the original
source/dest coordinates and not our transformed render coordinates. So
keep the original values intact until we start emitting the render
operation.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 49a783a..2b4fd03 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2790,11 +2790,6 @@ fallback_blt:
extents.y2 - extents.y1,
n > 1))
goto fallback_tiled;
-
- dst_dx += tmp.dst.x;
- dst_dy += tmp.dst.y;
-
- tmp.dst.x = tmp.dst.y = 0;
}
tmp.src.card_format = gen6_get_card_format(tmp.src.pict_format);
@@ -2822,9 +2817,6 @@ fallback_blt:
DBG(("%s: unable to extract partial pixmap\n", __FUNCTION__));
goto fallback_tiled_dst;
}
-
- src_dx += tmp.src.offset[0];
- src_dy += tmp.src.offset[1];
} else {
tmp.src.bo = src_bo;
tmp.src.width = src->drawable.width;
@@ -2857,6 +2849,14 @@ fallback_blt:
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
+ src_dx += tmp.src.offset[0];
+ src_dy += tmp.src.offset[1];
+
+ dst_dx += tmp.dst.x;
+ dst_dy += tmp.dst.y;
+
+ tmp.dst.x = tmp.dst.y = 0;
+
gen6_align_vertex(sna, &tmp);
gen6_emit_copy_state(sna, &tmp);
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 0d03c3b..1999aed 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -3027,11 +3027,6 @@ fallback_blt:
extents.y2 - extents.y1,
n > 1))
goto fallback_tiled;
-
- dst_dx += tmp.dst.x;
- dst_dy += tmp.dst.y;
-
- tmp.dst.x = tmp.dst.y = 0;
}
tmp.src.card_format = gen7_get_card_format(tmp.src.pict_format);
@@ -3057,9 +3052,6 @@ fallback_blt:
extents.x2 - extents.x1,
extents.y2 - extents.y1))
goto fallback_tiled_dst;
-
- src_dx += tmp.src.offset[0];
- src_dy += tmp.src.offset[1];
} else {
tmp.src.bo = src_bo;
tmp.src.width = src->drawable.width;
@@ -3087,6 +3079,14 @@ fallback_blt:
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
+ src_dx += tmp.src.offset[0];
+ src_dy += tmp.src.offset[1];
+
+ dst_dx += tmp.dst.x;
+ dst_dy += tmp.dst.y;
+
+ tmp.dst.x = tmp.dst.y = 0;
+
gen7_align_vertex(sna, &tmp);
gen7_emit_copy_state(sna, &tmp);
diff --git a/src/sna/gen8_render.c b/src/sna/gen8_render.c
index 6497630..f3ccb9b 100644
--- a/src/sna/gen8_render.c
+++ b/src/sna/gen8_render.c
@@ -2851,11 +2851,6 @@ fallback_blt:
extents.y2 - extents.y1,
n > 1))
goto fallback_tiled;
-
- dst_dx += tmp.dst.x;
- dst_dy += tmp.dst.y;
-
- tmp.dst.x = tmp.dst.y = 0;
}
tmp.src.card_format = gen8_get_card_format(tmp.src.pict_format);
@@ -2881,9 +2876,6 @@ fallback_blt:
extents.x2 - extents.x1,
extents.y2 - extents.y1))
goto fallback_tiled_dst;
-
- src_dx += tmp.src.offset[0];
- src_dy += tmp.src.offset[1];
} else {
tmp.src.bo = src_bo;
tmp.src.width = src->drawable.width;
@@ -2911,6 +2903,14 @@ fallback_blt:
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
+ src_dx += tmp.src.offset[0];
+ src_dy += tmp.src.offset[1];
+
+ dst_dx += tmp.dst.x;
+ dst_dy += tmp.dst.y;
+
+ tmp.dst.x = tmp.dst.y = 0;
+
gen8_align_vertex(sna, &tmp);
gen8_emit_copy_state(sna, &tmp);
More information about the xorg-commit
mailing list