xf86-video-intel: 3 commits - src/sna/gen6_render.c src/sna/gen7_render.c src/sna/sna_accel.c
Chris Wilson
ickle at kemper.freedesktop.org
Mon Dec 12 01:44:35 PST 2011
src/sna/gen6_render.c | 54 ++++++++++++++++++++++++++++----------------------
src/sna/gen7_render.c | 2 -
src/sna/sna_accel.c | 29 --------------------------
3 files changed, 32 insertions(+), 53 deletions(-)
New commits:
commit 2682308c10c9622247409dee9c6bb6a862b73c3f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Dec 12 09:24:11 2011 +0000
sna: Remove bo transference for whole XCopyArea
In benchmarking firefox this performs whose - it would appear the
sources are indeed used more often than not.
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 861cbe7..a71d5e1 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -2012,35 +2012,6 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
src_priv ? src_priv->cpu_bo : NULL,
replaces));
- if (replaces) {
- if (src_pixmap->drawable.width == dst_pixmap->drawable.width &&
- src_pixmap->drawable.height == dst_pixmap->drawable.height &&
- dst_priv && !dst_priv->pinned && 0 &&
- src_priv && !src_priv->pinned &&
- src_priv->gpu_damage == NULL) {
- if (sna_pixmap_move_to_gpu(src_pixmap)) {
- DBG(("%s: transferring src GPU bo to dst\n", __FUNCTION__));
- if (dst_priv->gpu_bo)
- kgem_bo_destroy(&sna->kgem, dst_priv->gpu_bo);
- sna_damage_destroy(&dst_priv->cpu_damage);
- sna_damage_all(&dst_priv->gpu_damage,
- dst_pixmap->drawable.width,
- dst_pixmap->drawable.height);
-
- dst_priv->gpu_bo = src_priv->gpu_bo;
- src_priv->gpu_bo = NULL;
-
- sna_damage_all(&src_priv->cpu_damage,
- src_pixmap->drawable.width,
- src_pixmap->drawable.height);
- return;
- }
- }
-
- if (!src_priv || src_priv->gpu_bo == NULL || src_priv->cpu_damage)
- goto fallback;
- }
-
/* Try to maintain the data on the GPU */
if (dst_priv && dst_priv->gpu_bo == NULL &&
src_priv && src_priv->gpu_bo != NULL) {
commit 7703424222f8bd08450c1b109ea64c6b0ee901d8
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Dec 12 00:15:10 2011 +0000
sna/gen6: Only use CPU bo for a render target if untiled
For large render targets, we prefer to use tiled bo in order to avoid
severe performance degradation. However, if we don't have a GPU bo but
do have a CPU bo and the operation would be untiled, then simply use the
CPU bo.
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 6320dda..3ef1c42 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2027,16 +2027,12 @@ static void gen6_render_composite_done(struct sna *sna,
}
static Bool
-gen6_composite_set_target(struct sna_composite_op *op, PicturePtr dst)
+gen6_composite_set_target(struct sna *sna,
+ struct sna_composite_op *op,
+ PicturePtr dst)
{
struct sna_pixmap *priv;
- if (!gen6_check_dst_format(dst->format)) {
- DBG(("%s: unsupported target format %08x\n",
- __FUNCTION__, dst->format));
- return FALSE;
- }
-
op->dst.pixmap = get_drawable_pixmap(dst->pDrawable);
op->dst.width = op->dst.pixmap->drawable.width;
op->dst.height = op->dst.pixmap->drawable.height;
@@ -2044,10 +2040,17 @@ gen6_composite_set_target(struct sna_composite_op *op, PicturePtr dst)
priv = sna_pixmap(op->dst.pixmap);
op->dst.bo = NULL;
- if (priv && priv->gpu_bo == NULL) {
+#if USE_VMAP
+ if (priv && priv->gpu_bo == NULL &&
+ I915_TILING_NONE == kgem_choose_tiling(&sna->kgem,
+ I915_TILING_X,
+ op->dst.width,
+ op->dst.height,
+ op->dst.pixmap->drawable.bitsPerPixel)) {
op->dst.bo = priv->cpu_bo;
op->damage = &priv->cpu_damage;
}
+#endif
if (op->dst.bo == NULL) {
priv = sna_pixmap_force_to_gpu(op->dst.pixmap);
if (priv == NULL)
@@ -2241,7 +2244,7 @@ gen6_render_composite(struct sna *sna,
tmp);
tmp->op = op;
- if (!gen6_composite_set_target(tmp, dst))
+ if (!gen6_composite_set_target(sna, tmp, dst))
return FALSE;
sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
@@ -2599,7 +2602,7 @@ gen6_render_composite_spans(struct sna *sna,
return FALSE;
tmp->base.op = op;
- if (!gen6_composite_set_target(&tmp->base, dst))
+ if (!gen6_composite_set_target(sna, &tmp->base, dst))
return FALSE;
sna_render_reduce_damage(&tmp->base, dst_x, dst_y, width, height);
commit a92a41ba3291a4304948ed1961d1242ca7d3981e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Dec 11 19:03:54 2011 +0000
sna/gen6: Tidy the usage of the max pipeline size
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 cb62463..6320dda 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -56,6 +56,8 @@
#define NO_FILL 0
#define NO_FILL_BOXES 0
+#define GEN6_MAX_SIZE 8192
+
static const uint32_t ps_kernel_nomask_affine[][4] = {
#include "exa_wm_src_affine.g6b"
#include "exa_wm_src_sample_argb.g6b"
@@ -1926,6 +1928,11 @@ gen6_composite_solid_init(struct sna *sna,
return channel->bo != NULL;
}
+static inline bool too_large(int width, int height)
+{
+ return (width | height) > GEN6_MAX_SIZE;
+}
+
static int
gen6_composite_picture(struct sna *sna,
PicturePtr picture,
@@ -1984,7 +1991,7 @@ gen6_composite_picture(struct sna *sna,
return sna_render_picture_convert(sna, picture, channel, pixmap,
x, y, w, h, dst_x, dst_y);
- if (pixmap->drawable.width > 8192 || pixmap->drawable.height > 8192) {
+ if (too_large(pixmap->drawable.width, pixmap->drawable.height)) {
DBG(("%s: extracting from pixmap %dx%d\n", __FUNCTION__,
pixmap->drawable.width, pixmap->drawable.height));
return sna_render_picture_extract(sna, picture, channel,
@@ -2072,7 +2079,7 @@ try_blt(struct sna *sna, int width, int height)
return TRUE;
}
- if (width > 8192 || height > 8192) {
+ if (too_large(width, height)) {
DBG(("%s: operation too large for 3D pipe (%d, %d)\n",
__FUNCTION__, width, height));
return TRUE;
@@ -2238,7 +2245,7 @@ gen6_render_composite(struct sna *sna,
return FALSE;
sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
- if (tmp->dst.width > 8192 || tmp->dst.height > 8192) {
+ if (too_large(tmp->dst.width, tmp->dst.height)) {
if (!sna_render_composite_redirect(sna, tmp,
dst_x, dst_y, width, height))
return FALSE;
@@ -2739,8 +2746,8 @@ gen6_render_copy_boxes(struct sna *sna, uint8_t alu,
return TRUE;
if (!(alu == GXcopy || alu == GXclear) || src_bo == dst_bo ||
- src->drawable.width > 8192 || src->drawable.height > 8192 ||
- dst->drawable.width > 8192 || dst->drawable.height > 8192) {
+ too_large(src->drawable.width, src->drawable.height) ||
+ too_large(dst->drawable.width, dst->drawable.height)) {
if (!sna_blt_compare_depth(&src->drawable, &dst->drawable))
return FALSE;
@@ -2895,8 +2902,8 @@ gen6_render_copy(struct sna *sna, uint8_t alu,
return TRUE;
if (!(alu == GXcopy || alu == GXclear) || src_bo == dst_bo ||
- src->drawable.width > 8192 || src->drawable.height > 8192 ||
- dst->drawable.width > 8192 || dst->drawable.height > 8192) {
+ too_large(src->drawable.width, src->drawable.height) ||
+ too_large(dst->drawable.width, dst->drawable.height)) {
if (!sna_blt_compare_depth(&src->drawable, &dst->drawable))
return FALSE;
@@ -3000,8 +3007,7 @@ gen6_render_fill_boxes(struct sna *sna,
}
if (sna->kgem.ring != KGEM_RENDER ||
- dst->drawable.width > 8192 ||
- dst->drawable.height > 8192 ||
+ too_large(dst->drawable.width, dst->drawable.height) ||
!gen6_check_dst_format(format)) {
uint8_t alu = -1;
@@ -3028,8 +3034,7 @@ gen6_render_fill_boxes(struct sna *sna,
pixel, box, n))
return TRUE;
- if (dst->drawable.width > 8192 ||
- dst->drawable.height > 8192 ||
+ if (too_large(dst->drawable.width, dst->drawable.height) ||
!gen6_check_dst_format(format))
return FALSE;
}
@@ -3229,7 +3234,7 @@ gen6_render_fill(struct sna *sna, uint8_t alu,
return TRUE;
if (!(alu == GXcopy || alu == GXclear) ||
- dst->drawable.width > 8192 || dst->drawable.height > 8192)
+ too_large(dst->drawable.width, dst->drawable.height))
return sna_blt_fill(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
color,
@@ -3501,6 +3506,6 @@ Bool gen6_render_init(struct sna *sna)
sna->render.reset = gen6_render_reset;
sna->render.fini = gen6_render_fini;
- sna->render.max_3d_size = 8192;
+ sna->render.max_3d_size = GEN6_MAX_SIZE;
return TRUE;
}
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 68ec221..a45814e 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -3163,7 +3163,7 @@ gen7_render_fill_boxes(struct sna *sna,
return FALSE;
#endif
- if (op ==PictOpClear)
+ if (op == PictOpClear)
pixel = 0;
else if (!sna_get_pixel_from_rgba(&pixel,
color->red,
More information about the xorg-commit
mailing list