xf86-video-intel: 4 commits - src/sna/gen3_render.c src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c src/sna/kgem.c src/sna/sna_accel.c src/sna/sna_video_hwmc.c
Chris Wilson
ickle at kemper.freedesktop.org
Thu Dec 20 02:14:32 PST 2012
src/sna/gen3_render.c | 3 ++-
src/sna/gen4_render.c | 19 ++++++++++---------
src/sna/gen5_render.c | 19 ++++++++++---------
src/sna/gen6_render.c | 19 ++++++++++---------
src/sna/gen7_render.c | 3 ++-
src/sna/kgem.c | 2 +-
src/sna/sna_accel.c | 2 +-
src/sna/sna_video_hwmc.c | 4 ++--
8 files changed, 38 insertions(+), 33 deletions(-)
New commits:
commit 1f4ede0ef8f8a8d07e11781ad05617ecdfcd3faf
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Dec 19 20:39:10 2012 +0000
sna: Do not throttle before move-to-cpu
The idea being that when creating a surface to perform inplace
rasterisation, we won't be using the GPU for a while and so give it time
to naturally throttle.
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 01bc8ab..408c98c 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -431,7 +431,7 @@ sna_pixmap_alloc_cpu(struct sna *sna,
pixmap->drawable.width,
pixmap->drawable.height,
pixmap->drawable.bitsPerPixel,
- from_gpu ? 0 : CREATE_CPU_MAP | CREATE_INACTIVE);
+ from_gpu ? 0 : CREATE_CPU_MAP | CREATE_INACTIVE | CREATE_NO_THROTTLE);
if (priv->cpu_bo) {
priv->ptr = kgem_bo_map__cpu(&sna->kgem, priv->cpu_bo);
priv->stride = priv->cpu_bo->pitch;
commit 5deba2832dc42072d9abaeaa7934bc0e1b28b3ed
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Dec 19 20:03:33 2012 +0000
sna: Ignore throttling during vertex close
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 34dcd04..a75efba 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1707,7 +1707,8 @@ static void gen3_vertex_close(struct sna *sna)
DBG(("%s: new vbo: %d\n", __FUNCTION__,
sna->render.vertex_used));
bo = kgem_create_linear(&sna->kgem,
- 4*sna->render.vertex_used, 0);
+ 4*sna->render.vertex_used,
+ CREATE_NO_THROTTLE);
if (bo) {
assert(bo->snoop == false);
kgem_bo_write(&sna->kgem, bo,
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index d6ba346..3f12062 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -347,7 +347,8 @@ static void gen4_vertex_close(struct sna *sna)
sna->kgem.nbatch += sna->render.vertex_used;
} else {
bo = kgem_create_linear(&sna->kgem,
- 4*sna->render.vertex_used, 0);
+ 4*sna->render.vertex_used,
+ CREATE_NO_THROTTLE);
if (bo && !kgem_bo_write(&sna->kgem, bo,
sna->render.vertex_data,
4*sna->render.vertex_used)) {
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 054829e..8f5ea2f 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -339,7 +339,8 @@ static void gen5_vertex_close(struct sna *sna)
sna->kgem.nbatch += sna->render.vertex_used;
} else {
bo = kgem_create_linear(&sna->kgem,
- 4*sna->render.vertex_used, 0);
+ 4*sna->render.vertex_used,
+ CREATE_NO_THROTTLE);
if (bo && !kgem_bo_write(&sna->kgem, bo,
sna->render.vertex_data,
4*sna->render.vertex_used)) {
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index a274f9b..5a60787 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -1058,7 +1058,8 @@ static void gen6_vertex_close(struct sna *sna)
sna->kgem.nbatch += sna->render.vertex_used;
} else {
bo = kgem_create_linear(&sna->kgem,
- 4*sna->render.vertex_used, 0);
+ 4*sna->render.vertex_used,
+ CREATE_NO_THROTTLE);
if (bo && !kgem_bo_write(&sna->kgem, bo,
sna->render.vertex_data,
4*sna->render.vertex_used)) {
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 4c67340..cc3199d 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -1195,7 +1195,8 @@ static void gen7_vertex_close(struct sna *sna)
sna->kgem.nbatch += sna->render.vertex_used;
} else {
bo = kgem_create_linear(&sna->kgem,
- 4*sna->render.vertex_used, 0);
+ 4*sna->render.vertex_used,
+ CREATE_NO_THROTTLE);
if (bo && !kgem_bo_write(&sna->kgem, bo,
sna->render.vertex_data,
4*sna->render.vertex_used)) {
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 2933ec4..974201e 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -2877,7 +2877,7 @@ search_linear_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags)
return NULL;
}
- if (!__kgem_throttle_retire(kgem, 0)) {
+ if (!__kgem_throttle_retire(kgem, flags)) {
DBG(("%s: nothing retired\n", __FUNCTION__));
return NULL;
}
commit f91a24fdba517c8e9df5a074db2c789fbf066bb3
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Dec 20 09:46:32 2012 +0000
sna/video: Remove XvMCScreenInitProc
The symbols disappears without warning in xorg-1.14
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=58552
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_video_hwmc.c b/src/sna/sna_video_hwmc.c
index def85fd..b3e065d 100644
--- a/src/sna/sna_video_hwmc.c
+++ b/src/sna/sna_video_hwmc.c
@@ -206,7 +206,7 @@ Bool sna_video_xvmc_setup(struct sna *sna,
char bus[64];
int i;
- if (!XvMCScreenInitProc)
+ if (!xf86LoaderCheckSymbol("XvMCScreenInit"))
return FALSE;
/* Needs KMS support. */
@@ -253,7 +253,7 @@ Bool sna_video_xvmc_setup(struct sna *sna,
adaptors->surfaces = surface_info_i915;
}
- if (XvMCScreenInitProc(screen, 1, adaptors) != Success) {
+ if (XvMCScreenInit(screen, 1, adaptors) != Success) {
xf86DrvMsg(sna->scrn->scrnIndex, X_INFO,
"[XvMC] Failed to initialize XvMC.\n");
free(adaptors);
commit ee99511846a0f10abeeba8d25d8fb5bf59621b02
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Dec 19 18:02:50 2012 +0000
sna/gen4+: Tweak preference of GPU placement for spans
If the CPU bo is busy, make sure we do not stall for an inplace
operation.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index ee37378..d6ba346 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2681,15 +2681,15 @@ gen4_check_composite_spans(struct sna *sna,
return FORCE_SPANS > 0;
if ((flags & COMPOSITE_SPANS_RECTILINEAR) == 0) {
- if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0) {
- struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
- assert(priv);
+ struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
+ assert(priv);
- if ((priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo)) ||
- (priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))) {
- return true;
- }
- }
+ if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo))
+ return true;
+
+ if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0 &&
+ priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))
+ return true;
DBG(("%s: fallback, non-rectilinear spans to idle bo\n",
__FUNCTION__));
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 3a9fd8c..054829e 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2693,15 +2693,15 @@ gen5_check_composite_spans(struct sna *sna,
}
if ((flags & COMPOSITE_SPANS_RECTILINEAR) == 0) {
- if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0) {
- struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
- assert(priv);
+ struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
+ assert(priv);
- if ((priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo)) ||
- (priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))) {
- return true;
- }
- }
+ if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo))
+ return true;
+
+ if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0 &&
+ priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))
+ return true;
DBG(("%s: fallback, non-rectilinear spans to idle bo\n",
__FUNCTION__));
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index c614363..a274f9b 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -3132,15 +3132,15 @@ gen6_check_composite_spans(struct sna *sna,
}
if ((flags & COMPOSITE_SPANS_RECTILINEAR) == 0) {
- if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0) {
- struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
- assert(priv);
+ struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
+ assert(priv);
- if ((priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo)) ||
- (priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))) {
- return true;
- }
- }
+ if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo))
+ return true;
+
+ if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0 &&
+ priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))
+ return true;
DBG(("%s: fallback, non-rectilinear spans to idle bo\n",
__FUNCTION__));
More information about the xorg-commit
mailing list