diff options
Diffstat (limited to 'src/sna/gen7_render.c')
-rw-r--r-- | src/sna/gen7_render.c | 55 |
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; } |