summaryrefslogtreecommitdiff
path: root/src/sna/gen7_render.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sna/gen7_render.c')
-rw-r--r--src/sna/gen7_render.c55
1 files changed, 45 insertions, 10 deletions
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index ccc00373..05b65f39 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2846,9 +2846,9 @@ gen7_render_fill_boxes(struct sna *sna,
}
static void
-gen7_render_fill_blt(struct sna *sna,
- const struct sna_fill_op *op,
- int16_t x, int16_t y, int16_t w, int16_t h)
+gen7_render_fill_op_blt(struct sna *sna,
+ const struct sna_fill_op *op,
+ int16_t x, int16_t y, int16_t w, int16_t h)
{
DBG(("%s: (%d, %d)x(%d, %d)\n", __FUNCTION__, x, y, w, h));
@@ -2871,9 +2871,9 @@ gen7_render_fill_blt(struct sna *sna,
}
fastcall static void
-gen7_render_fill_box(struct sna *sna,
- const struct sna_fill_op *op,
- const BoxRec *box)
+gen7_render_fill_op_box(struct sna *sna,
+ const struct sna_fill_op *op,
+ const BoxRec *box)
{
DBG(("%s: (%d, %d),(%d, %d)\n", __FUNCTION__,
box->x1, box->y1, box->x2, box->y2));
@@ -2896,8 +2896,42 @@ gen7_render_fill_box(struct sna *sna,
OUT_VERTEX_F(0);
}
+fastcall static void
+gen7_render_fill_op_boxes(struct sna *sna,
+ const struct sna_fill_op *op,
+ const BoxRec *box,
+ int nbox)
+{
+ DBG(("%s: (%d, %d),(%d, %d)... x %d\n", __FUNCTION__,
+ box->x1, box->y1, box->x2, box->y2, n));
+
+ do {
+ int nbox_this_time = gen7_get_rectangles(sna, &op->base, nbox);
+ if (nbox_this_time == 0) {
+ gen7_emit_fill_state(sna, &op->base);
+ nbox_this_time = gen7_get_rectangles(sna, &op->base, nbox);
+ }
+ nbox -= nbox_this_time;
+
+ do {
+ OUT_VERTEX(box->x2, box->y2);
+ OUT_VERTEX_F(1);
+ OUT_VERTEX_F(1);
+
+ OUT_VERTEX(box->x1, box->y2);
+ OUT_VERTEX_F(0);
+ OUT_VERTEX_F(1);
+
+ OUT_VERTEX(box->x1, box->y1);
+ OUT_VERTEX_F(0);
+ OUT_VERTEX_F(0);
+ box++;
+ } while (--nbox_this_time);
+ } while (nbox);
+}
+
static void
-gen7_render_fill_done(struct sna *sna, const struct sna_fill_op *op)
+gen7_render_fill_op_done(struct sna *sna, const struct sna_fill_op *op)
{
gen7_vertex_flush(sna);
kgem_bo_destroy(&sna->kgem, op->base.src.bo);
@@ -2971,9 +3005,10 @@ gen7_render_fill(struct sna *sna, uint8_t alu,
gen7_emit_fill_state(sna, &op->base);
gen7_align_vertex(sna, &op->base);
- op->blt = gen7_render_fill_blt;
- op->box = gen7_render_fill_box;
- op->done = gen7_render_fill_done;
+ op->blt = gen7_render_fill_op_blt;
+ op->box = gen7_render_fill_op_box;
+ op->boxes = gen7_render_fill_op_boxes;
+ op->done = gen7_render_fill_op_done;
return TRUE;
}