xf86-video-intel: 3 commits - src/sna/gen2_render.c src/sna/gen3_render.c src/sna/sna_render.h src/sna/sna_trapezoids.c
Chris Wilson
ickle at kemper.freedesktop.org
Tue Oct 11 02:59:58 PDT 2011
src/sna/gen2_render.c | 12 +++++-----
src/sna/gen3_render.c | 56 +++++++++++++++++++++++++++++++++++++----------
src/sna/sna_render.h | 20 ++++++++++------
src/sna/sna_trapezoids.c | 11 +++++----
4 files changed, 70 insertions(+), 29 deletions(-)
New commits:
commit a9b53c48774078d404149e86267c39eb82234c3a
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Oct 11 10:37:25 2011 +0100
sna: Mark the spans render functions as fastcall
This reduces the amount of dancing required to call into the span
functions as we can pass the arguments in both the integer and floating
point registers.
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 c0d357d..a7ace88 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1403,7 +1403,7 @@ cleanup_dst:
return FALSE;
}
-static void
+fastcall static void
gen2_emit_composite_spans_primitive_constant(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -1426,7 +1426,7 @@ gen2_emit_composite_spans_primitive_constant(struct sna *sna,
*((uint32_t *)v + 8) = alpha;
}
-static void
+fastcall static void
gen2_emit_composite_spans_primitive_identity_source(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -1455,7 +1455,7 @@ gen2_emit_composite_spans_primitive_identity_source(struct sna *sna,
v[14] = (op->base.src.offset[1] + box->y1) * op->base.src.scale[1];
}
-static void
+fastcall static void
gen2_emit_composite_spans_primitive_affine_source(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -1509,7 +1509,7 @@ gen2_emit_composite_spans_vertex(struct sna *sna,
gen2_emit_composite_texcoord(sna, &op->base.src, x, y);
}
-static void
+fastcall static void
gen2_emit_composite_spans_primitive(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -1588,7 +1588,7 @@ static void gen2_emit_composite_spans_state(struct sna *sna,
}
}
-static void
+fastcall static void
gen2_render_composite_spans_box(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box, float opacity)
@@ -1643,7 +1643,7 @@ gen2_render_composite_spans_boxes(struct sna *sna,
} while (nbox);
}
-static void
+fastcall static void
gen2_render_composite_spans_done(struct sna *sna,
const struct sna_composite_spans_op *op)
{
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index e25e71b..e7d8bb2 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2434,7 +2434,7 @@ gen3_emit_composite_spans_vertex(struct sna *sna,
OUT_VERTEX(opacity);
}
-static void
+fastcall static void
gen3_emit_composite_spans_primitive_zero(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2453,7 +2453,7 @@ gen3_emit_composite_spans_primitive_zero(struct sna *sna,
v[5] = op->base.dst.x + box->y1;
}
-static void
+fastcall static void
gen3_emit_composite_spans_primitive_zero_no_offset(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2468,7 +2468,7 @@ gen3_emit_composite_spans_primitive_zero_no_offset(struct sna *sna,
v[5] = box->y1;
}
-static void
+fastcall static void
gen3_emit_composite_spans_primitive_constant(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2484,7 +2484,7 @@ gen3_emit_composite_spans_primitive_constant(struct sna *sna,
v[8] = v[5] = v[2] = opacity;
}
-static void
+fastcall static void
gen3_emit_composite_spans_primitive_constant_no_offset(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2500,7 +2500,7 @@ gen3_emit_composite_spans_primitive_constant_no_offset(struct sna *sna,
v[8] = v[5] = v[2] = opacity;
}
-static void
+fastcall static void
gen3_emit_composite_spans_primitive_identity_source(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2528,7 +2528,7 @@ gen3_emit_composite_spans_primitive_identity_source(struct sna *sna,
v[14] = opacity;
}
-static void
+fastcall static void
gen3_emit_composite_spans_primitive_affine_source(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2570,7 +2570,7 @@ gen3_emit_composite_spans_primitive_affine_source(struct sna *sna,
v[13] = y * op->base.src.scale[1];
}
-static void
+fastcall static void
gen3_emit_composite_spans_primitive_identity_gradient(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2598,7 +2598,7 @@ gen3_emit_composite_spans_primitive_identity_gradient(struct sna *sna,
v[14] = opacity;
}
-static void
+fastcall static void
gen3_emit_composite_spans_primitive_affine_gradient(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2633,7 +2633,7 @@ gen3_emit_composite_spans_primitive_affine_gradient(struct sna *sna,
v[14] = opacity;
}
-static void
+fastcall static void
gen3_emit_composite_spans_primitive(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2650,7 +2650,7 @@ gen3_emit_composite_spans_primitive(struct sna *sna,
opacity);
}
-static void
+fastcall static void
gen3_render_composite_spans_box(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box, float opacity)
@@ -2705,7 +2705,7 @@ gen3_render_composite_spans_boxes(struct sna *sna,
} while (nbox);
}
-static void
+fastcall static void
gen3_render_composite_spans_done(struct sna *sna,
const struct sna_composite_spans_op *op)
{
diff --git a/src/sna/sna_render.h b/src/sna/sna_render.h
index 2cc39f0..9e658a8 100644
--- a/src/sna/sna_render.h
+++ b/src/sna/sna_render.h
@@ -137,17 +137,21 @@ struct sna_composite_op {
struct sna_composite_spans_op {
struct sna_composite_op base;
- void (*box)(struct sna *sna, const struct sna_composite_spans_op *op,
- const BoxRec *box, float opacity);
- void (*boxes)(struct sna *sna, const struct sna_composite_spans_op *op,
+ fastcall void (*box)(struct sna *sna,
+ const struct sna_composite_spans_op *op,
+ const BoxRec *box,
+ float opacity);
+ void (*boxes)(struct sna *sna,
+ const struct sna_composite_spans_op *op,
const BoxRec *box, int nbox,
float opacity);
- void (*done)(struct sna *sna, const struct sna_composite_spans_op *op);
+ fastcall void (*done)(struct sna *sna,
+ const struct sna_composite_spans_op *op);
- void (*prim_emit)(struct sna *sna,
- const struct sna_composite_spans_op *op,
- const BoxRec *box,
- float opacity);
+ fastcall void (*prim_emit)(struct sna *sna,
+ const struct sna_composite_spans_op *op,
+ const BoxRec *box,
+ float opacity);
};
struct sna_fill_op {
commit 208fa8e6b88daf8446239a1a001a68ceb7d02e76
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Oct 11 10:08:42 2011 +0100
sna/trapezoid: Perform the NULL check for damage in the caller
Save the function call overhead in the common case.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index 86593a9..b0331cb 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -110,13 +110,10 @@ static void apply_damage(struct sna_composite_op *op, RegionPtr region)
sna_damage_add(op->damage, region);
}
-static void apply_damage_box(struct sna_composite_op *op, const BoxRec *box)
+static void _apply_damage_box(struct sna_composite_op *op, const BoxRec *box)
{
BoxRec r;
- if (op->damage == NULL)
- return;
-
r.x1 = box->x1 + op->dst.x;
r.x2 = box->x2 + op->dst.x;
r.y1 = box->y1 + op->dst.y;
@@ -126,6 +123,12 @@ static void apply_damage_box(struct sna_composite_op *op, const BoxRec *box)
sna_damage_add_box(op->damage, &r);
}
+inline static void apply_damage_box(struct sna_composite_op *op, const BoxRec *box)
+{
+ if (op->damage)
+ _apply_damage_box(op, box);
+}
+
typedef int grid_scaled_x_t;
typedef int grid_scaled_y_t;
commit 5050fead0ef81785a2a9be735852921463377e04
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Oct 11 09:59:13 2011 +0100
sna/gen3: avoid applying zero offset to common spans
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 dcaf0ff..e25e71b 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2454,6 +2454,21 @@ gen3_emit_composite_spans_primitive_zero(struct sna *sna,
}
static void
+gen3_emit_composite_spans_primitive_zero_no_offset(struct sna *sna,
+ const struct sna_composite_spans_op *op,
+ const BoxRec *box,
+ float opacity)
+{
+ float *v = sna->render.vertex_data + sna->render.vertex_used;
+ sna->render.vertex_used += 6;
+
+ v[0] = box->x2;
+ v[3] = v[1] = box->y2;
+ v[4] = v[2] = box->x1;
+ v[5] = box->y1;
+}
+
+static void
gen3_emit_composite_spans_primitive_constant(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2470,6 +2485,22 @@ gen3_emit_composite_spans_primitive_constant(struct sna *sna,
}
static void
+gen3_emit_composite_spans_primitive_constant_no_offset(struct sna *sna,
+ const struct sna_composite_spans_op *op,
+ const BoxRec *box,
+ float opacity)
+{
+ float *v = sna->render.vertex_data + sna->render.vertex_used;
+ sna->render.vertex_used += 9;
+
+ v[0] = box->x2;
+ v[6] = v[3] = box->x1;
+ v[4] = v[1] = box->y2;
+ v[7] = box->y1;
+ v[8] = v[5] = v[2] = opacity;
+}
+
+static void
gen3_emit_composite_spans_primitive_identity_source(struct sna *sna,
const struct sna_composite_spans_op *op,
const BoxRec *box,
@@ -2698,6 +2729,8 @@ gen3_render_composite_spans(struct sna *sna,
int16_t width, int16_t height,
struct sna_composite_spans_op *tmp)
{
+ bool no_offset;
+
DBG(("%s(src=(%d, %d), dst=(%d, %d), size=(%d, %d))\n", __FUNCTION__,
src_x, src_y, dst_x, dst_y, width, height));
@@ -2759,15 +2792,16 @@ gen3_render_composite_spans(struct sna *sna,
if (tmp->base.src.u.gen3.type != SHADER_ZERO)
tmp->base.mask.u.gen3.type = SHADER_OPACITY;
+ no_offset = tmp->base.dst.x == 0 && tmp->base.dst.y == 0;
tmp->prim_emit = gen3_emit_composite_spans_primitive;
switch (tmp->base.src.u.gen3.type) {
case SHADER_NONE:
assert(0);
case SHADER_ZERO:
- tmp->prim_emit = gen3_emit_composite_spans_primitive_zero;
+ tmp->prim_emit = no_offset ? gen3_emit_composite_spans_primitive_zero_no_offset : gen3_emit_composite_spans_primitive_zero;
break;
case SHADER_CONSTANT:
- tmp->prim_emit = gen3_emit_composite_spans_primitive_constant;
+ tmp->prim_emit = no_offset ? gen3_emit_composite_spans_primitive_constant_no_offset : gen3_emit_composite_spans_primitive_constant;
break;
case SHADER_LINEAR:
case SHADER_RADIAL:
More information about the xorg-commit
mailing list