xf86-video-intel: 4 commits - src/sna/gen2_render.c 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_render_inline.h
Chris Wilson
ickle at kemper.freedesktop.org
Fri Dec 14 07:25:40 PST 2012
src/sna/gen2_render.c | 2 +-
src/sna/gen3_render.c | 18 +++++++++---------
src/sna/gen4_render.c | 2 +-
src/sna/gen5_render.c | 2 +-
src/sna/gen6_render.c | 2 +-
src/sna/gen7_render.c | 2 +-
src/sna/kgem.c | 13 ++++++++-----
src/sna/sna_render_inline.h | 9 +++++++++
8 files changed, 31 insertions(+), 19 deletions(-)
New commits:
commit 9df9585cb00958b42461b3139bb7aec32090a869
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Dec 14 15:37:56 2012 +0000
sna: Reduce fence watermarks
Further restrict the amount of fenced bo we try to fit into the batch to
make it easier for the kernel to accommodate the request.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index f8b3cff..66bf473 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -3906,9 +3906,12 @@ bool kgem_check_bo_fenced(struct kgem *kgem, struct kgem_bo *bo)
if (kgem->nfence >= kgem->fence_max)
return false;
+ if (3*kgem->aperture_fenced > kgem->aperture_mappable)
+ return false;
+
size = kgem->aperture_fenced;
size += kgem_bo_fenced_size(kgem, bo);
- if (4*size > 3*kgem->aperture_mappable)
+ if (3*size > 2*kgem->aperture_mappable)
return false;
}
@@ -3932,12 +3935,12 @@ bool kgem_check_bo_fenced(struct kgem *kgem, struct kgem_bo *bo)
if (kgem->nfence >= kgem->fence_max)
return false;
- if (2*kgem->aperture_fenced > kgem->aperture_mappable)
+ if (3*kgem->aperture_fenced > kgem->aperture_mappable)
return false;
size = kgem->aperture_fenced;
size += kgem_bo_fenced_size(kgem, bo);
- if (4*size > 3*kgem->aperture_mappable)
+ if (3*size > 2*kgem->aperture_mappable)
return false;
}
@@ -3982,10 +3985,10 @@ bool kgem_check_many_bo_fenced(struct kgem *kgem, ...)
if (kgem->nfence + num_fence > kgem->fence_max)
return false;
- if (2*kgem->aperture_fenced > kgem->aperture_mappable)
+ if (3*kgem->aperture_fenced > kgem->aperture_mappable)
return false;
- if (4*(fenced_size + kgem->aperture_fenced) > 3*kgem->aperture_mappable)
+ if (3*(fenced_size + kgem->aperture_fenced) > 2*kgem->aperture_mappable)
return false;
}
commit 0d3ba44e448c152a570cc469d289ab057fa7be5c
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Dec 14 12:47:46 2012 +0000
sna/gen2+: Experiment with not forcing migration to GPU after CPU rasterisation
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index c4242f4..8f92338 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1716,7 +1716,7 @@ gen2_composite_fallback(struct sna *sna,
DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
__FUNCTION__));
- return false;
+ return dst_use_cpu(dst_pixmap);
}
static int
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 5c17a8f..b9a1e01 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2676,9 +2676,9 @@ gen3_composite_fallback(struct sna *sna,
if (mask &&
mask->componentAlpha && PICT_FORMAT_RGB(mask->format) &&
- op != PictOpOver &&
- gen3_blend_op[op].src_blend != BLENDFACT_ZERO)
- {
+ gen3_blend_op[op].src_alpha &&
+ gen3_blend_op[op].src_blend != BLENDFACT_ZERO &&
+ op != PictOpOver) {
DBG(("%s: component-alpha mask with op=%d, should fallback\n",
__FUNCTION__, op));
return true;
@@ -2725,9 +2725,9 @@ gen3_composite_fallback(struct sna *sna,
return true;
}
- DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
- __FUNCTION__));
- return false;
+ DBG(("%s: dst is not on the GPU and the operation should not fallback: use-cpu? %d\n",
+ __FUNCTION__, dst_use_cpu(dst_pixmap)));
+ return dst_use_cpu(dst_pixmap);
}
static int
@@ -2916,7 +2916,7 @@ gen3_render_composite(struct sna *sna,
tmp->mask.u.gen3.type = SHADER_NONE;
tmp->has_component_alpha = false;
} else if (gen3_blend_op[op].src_alpha &&
- (gen3_blend_op[op].src_blend != BLENDFACT_ZERO)) {
+ gen3_blend_op[op].src_blend != BLENDFACT_ZERO) {
if (op != PictOpOver)
goto cleanup_mask;
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index f80fa83..27cf975 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2247,7 +2247,7 @@ gen4_composite_fallback(struct sna *sna,
DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
__FUNCTION__));
- return false;
+ return dst_use_cpu(dst_pixmap);
}
static int
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 6e6389a..9b779b6 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2256,7 +2256,7 @@ gen5_composite_fallback(struct sna *sna,
DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
__FUNCTION__));
- return false;
+ return dst_use_cpu(dst_pixmap);
}
static int
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 801236f..ec29124 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2604,7 +2604,7 @@ gen6_composite_fallback(struct sna *sna,
DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
__FUNCTION__));
- return false;
+ return dst_use_cpu(dst_pixmap);
}
static int
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 270488c..29b1cdc 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2721,7 +2721,7 @@ gen7_composite_fallback(struct sna *sna,
DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
__FUNCTION__));
- return false;
+ return dst_use_cpu(dst_pixmap);
}
static int
diff --git a/src/sna/sna_render_inline.h b/src/sna/sna_render_inline.h
index 2468b89..e31db15 100644
--- a/src/sna/sna_render_inline.h
+++ b/src/sna/sna_render_inline.h
@@ -233,6 +233,15 @@ inline static bool dst_use_gpu(PixmapPtr pixmap)
return priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo);
}
+inline static bool dst_use_cpu(PixmapPtr pixmap)
+{
+ struct sna_pixmap *priv = sna_pixmap(pixmap);
+ if (priv == NULL)
+ return true;
+
+ return priv->cpu_damage && priv->cpu;
+}
+
inline static bool dst_is_cpu(PixmapPtr pixmap)
{
struct sna_pixmap *priv = sna_pixmap(pixmap);
commit d867fd01cb0060342102a79600daf43e3dc44a07
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Dec 14 13:10:54 2012 +0000
sna/gen3: Don't combine primitives if beginning a ca 2-pass
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 8f8cef2..5c17a8f 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1768,7 +1768,8 @@ static bool gen3_rectangle_begin(struct sna *sna,
}
}
- if (sna->kgem.nbatch == 2 + state->last_vertex_offset) {
+ if (sna->kgem.nbatch == 2 + state->last_vertex_offset &&
+ !op->need_magic_ca_pass) {
state->vertex_offset = state->last_vertex_offset;
} else {
state->vertex_offset = sna->kgem.nbatch;
commit 3ca503dac2ea6c036e7ebe878b41923541daf225
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Dec 14 12:49:14 2012 +0000
sna/gen3: Remove stray setting of vertex_start
It is always done at the beginning of vertex emission.
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 51ace78..8f8cef2 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2921,7 +2921,6 @@ gen3_render_composite(struct sna *sna,
tmp->need_magic_ca_pass = true;
tmp->op = PictOpOutReverse;
- sna->render.vertex_start = sna->render.vertex_index;
}
} else {
if (tmp->mask.is_opaque) {
More information about the xorg-commit
mailing list