summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-10-17 12:41:21 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-10-17 12:41:21 +0100
commita032feb2531439b9945d7ae1e0c2e3ab95a960e1 (patch)
tree9b2794407250c779a5e34c31e8ffb5b84727cf63
parent2cbe79b85b46796d561105afa980e7a52f4f1889 (diff)
sna/gen3: Store floats_per_rect alongside floats_per_vertex
Moves a multiply out of the hot path. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/gen3_render.c17
-rw-r--r--src/sna/sna_render.h3
2 files changed, 14 insertions, 6 deletions
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 4e24e033..50883a58 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1524,12 +1524,12 @@ inline static int gen3_get_rectangles(struct sna *sna,
int rem = vertex_space(sna);
DBG(("%s: want=%d, rem=%d\n",
- __FUNCTION__, 3*want*op->floats_per_vertex, rem));
+ __FUNCTION__, want*op->floats_per_rect, rem));
assert(sna->render.vertex_index * op->floats_per_vertex == sna->render.vertex_used);
- if (op->floats_per_vertex*3 > rem) {
+ if (op->floats_per_rect > rem) {
DBG(("flushing vbo for %s: %d < %d\n",
- __FUNCTION__, rem, 3*op->floats_per_vertex));
+ __FUNCTION__, rem, op->floats_per_rect));
rem = gen3_get_rectangles__flush(sna, op->need_magic_ca_pass);
if (rem == 0)
return 0;
@@ -1540,8 +1540,8 @@ inline static int gen3_get_rectangles(struct sna *sna,
return 0;
}
- if (want > 1 && want * op->floats_per_vertex*3 > rem)
- want = rem / (3*op->floats_per_vertex);
+ if (want > 1 && want * op->floats_per_rect > rem)
+ want = rem / op->floats_per_rect;
sna->render.vertex_index += 3*want;
assert(want);
@@ -2383,6 +2383,7 @@ gen3_render_composite(struct sna *sna,
tmp->mask.u.gen3.type != SHADER_CONSTANT) ?
tmp->mask.is_affine ? 2 : 4 : 0,
tmp->floats_per_vertex));
+ tmp->floats_per_rect = 3 * tmp->floats_per_vertex;
tmp->blt = gen3_render_composite_blt;
tmp->box = gen3_render_composite_box;
@@ -2824,6 +2825,7 @@ gen3_render_composite_spans(struct sna *sna,
tmp->base.floats_per_vertex += tmp->base.src.is_affine ? 2 : 3;
tmp->base.floats_per_vertex +=
tmp->base.mask.u.gen3.type == SHADER_OPACITY;
+ tmp->base.floats_per_rect = 3 * tmp->base.floats_per_vertex;
tmp->box = gen3_render_composite_spans_box;
tmp->boxes = gen3_render_composite_spans_boxes;
@@ -3387,6 +3389,7 @@ gen3_render_copy_boxes(struct sna *sna, uint8_t alu,
gen3_render_copy_setup_source(&tmp.src, src, src_bo);
tmp.floats_per_vertex = 4;
+ tmp.floats_per_rect = 12;
tmp.mask.u.gen3.type = SHADER_NONE;
gen3_emit_composite_state(sna, &tmp);
@@ -3515,6 +3518,7 @@ gen3_render_copy(struct sna *sna, uint8_t alu,
gen3_render_copy_setup_source(&tmp->base.src, src, src_bo);
tmp->base.floats_per_vertex = 4;
+ tmp->base.floats_per_rect = 12;
tmp->base.mask.u.gen3.type = SHADER_NONE;
if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
@@ -3639,6 +3643,7 @@ gen3_render_fill_boxes(struct sna *sna,
tmp.dst.format = format;
tmp.dst.bo = dst_bo;
tmp.floats_per_vertex = 2;
+ tmp.floats_per_rect = 6;
tmp.src.u.gen3.type = op == PictOpClear ? SHADER_ZERO : SHADER_CONSTANT;
tmp.src.u.gen3.mode = pixel;
@@ -3740,6 +3745,7 @@ gen3_render_fill(struct sna *sna, uint8_t alu,
tmp->base.dst.format = sna_format_for_depth(dst->drawable.depth);
tmp->base.dst.bo = dst_bo;
tmp->base.floats_per_vertex = 2;
+ tmp->base.floats_per_rect = 6;
tmp->base.src.u.gen3.type = SHADER_CONSTANT;
tmp->base.src.u.gen3.mode =
@@ -3813,6 +3819,7 @@ gen3_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
tmp.dst.format = sna_format_for_depth(dst->drawable.depth);
tmp.dst.bo = bo;
tmp.floats_per_vertex = 2;
+ tmp.floats_per_rect = 6;
tmp.src.u.gen3.type = SHADER_CONSTANT;
tmp.src.u.gen3.mode =
diff --git a/src/sna/sna_render.h b/src/sna/sna_render.h
index f0a99a7c..1cbd0f5f 100644
--- a/src/sna/sna_render.h
+++ b/src/sna/sna_render.h
@@ -72,7 +72,8 @@ struct sna_composite_op {
uint32_t need_magic_ca_pass : 1;
uint32_t rb_reversed : 1;
- int floats_per_vertex;
+ int16_t floats_per_vertex;
+ int16_t floats_per_rect;
fastcall void (*prim_emit)(struct sna *sna,
const struct sna_composite_op *op,
const struct sna_composite_rectangles *r);