const struct lp_rast_triangle *tri,
const struct lp_rast_plane *plane,
int x, int y,
- const int *c)
+ const int64_t *c)
{
unsigned mask = 0xffff;
int j;
for (j = 0; j < NR_PLANES; j++) {
- mask &= ~build_mask_linear(c[j] - 1,
+ mask &= ~BUILD_MASK_LINEAR(c[j] - 1,
-plane[j].dcdx,
plane[j].dcdy);
}
const struct lp_rast_triangle *tri,
const struct lp_rast_plane *plane,
int x, int y,
- const int *c)
+ const int64_t *c)
{
unsigned outmask, inmask, partmask, partial_mask;
unsigned j;
partmask = 0; /* outside one or more trivial accept planes */
for (j = 0; j < NR_PLANES; j++) {
- const int dcdx = -plane[j].dcdx * 4;
- const int dcdy = plane[j].dcdy * 4;
- const int cox = plane[j].eo * 4;
- const int cio = plane[j].ei * 4 - 1;
+ const int64_t dcdx = -IMUL64(plane[j].dcdx, 4);
+ const int64_t dcdy = IMUL64(plane[j].dcdy, 4);
+ const int64_t cox = IMUL64(plane[j].eo, 4);
+ const int64_t ei = plane[j].dcdy - plane[j].dcdx - plane[j].eo;
+ const int64_t cio = IMUL64(ei, 4) - 1;
- build_masks(c[j] + cox,
+ BUILD_MASKS(c[j] + cox,
cio - cox,
dcdx, dcdy,
&outmask, /* sign bits from c[i][0..15] + cox */
int iy = (i >> 2) * 4;
int px = x + ix;
int py = y + iy;
- int cx[NR_PLANES];
+ int64_t cx[NR_PLANES];
partial_mask &= ~(1 << i);
for (j = 0; j < NR_PLANES; j++)
cx[j] = (c[j]
- - plane[j].dcdx * ix
- + plane[j].dcdy * iy);
+ - IMUL64(plane[j].dcdx, ix)
+ + IMUL64(plane[j].dcdy, iy));
TAG(do_block_4)(task, tri, plane, px, py, cx);
}
{
const struct lp_rast_triangle *tri = arg.triangle.tri;
unsigned plane_mask = arg.triangle.plane_mask;
+ const struct lp_rast_plane *tri_plane = GET_PLANES(tri);
const int x = task->x, y = task->y;
struct lp_rast_plane plane[NR_PLANES];
- int c[NR_PLANES];
+ int64_t c[NR_PLANES];
unsigned outmask, inmask, partmask, partial_mask;
unsigned j = 0;
while (plane_mask) {
int i = ffs(plane_mask) - 1;
- plane[j] = tri->plane[i];
+ plane[j] = tri_plane[i];
plane_mask &= ~(1 << i);
- c[j] = plane[j].c + plane[j].dcdy * y - plane[j].dcdx * x;
+ c[j] = plane[j].c + IMUL64(plane[j].dcdy, y) - IMUL64(plane[j].dcdx, x);
{
- const int dcdx = -plane[j].dcdx * 16;
- const int dcdy = plane[j].dcdy * 16;
- const int cox = plane[j].eo * 16;
- const int cio = plane[j].ei * 16 - 1;
-
- build_masks(c[j] + cox,
- cio - cox,
- dcdx, dcdy,
- &outmask, /* sign bits from c[i][0..15] + cox */
- &partmask); /* sign bits from c[i][0..15] + cio */
+ const int64_t dcdx = -IMUL64(plane[j].dcdx, 16);
+ const int64_t dcdy = IMUL64(plane[j].dcdy, 16);
+ const int64_t cox = IMUL64(plane[j].eo, 16);
+ const int64_t ei = plane[j].dcdy - plane[j].dcdx - plane[j].eo;
+ const int64_t cio = IMUL64(ei, 16) - 1;
+
+ BUILD_MASKS(c[j] + cox,
+ cio - cox,
+ dcdx, dcdy,
+ &outmask, /* sign bits from c[i][0..15] + cox */
+ &partmask); /* sign bits from c[i][0..15] + cio */
}
j++;
int iy = (i >> 2) * 16;
int px = x + ix;
int py = y + iy;
- int cx[NR_PLANES];
+ int64_t cx[NR_PLANES];
for (j = 0; j < NR_PLANES; j++)
cx[j] = (c[j]
- - plane[j].dcdx * ix
- + plane[j].dcdy * iy);
+ - IMUL64(plane[j].dcdx, ix)
+ + IMUL64(plane[j].dcdy, iy));
partial_mask &= ~(1 << i);
const union lp_rast_cmd_arg arg)
{
const struct lp_rast_triangle *tri = arg.triangle.tri;
- const struct lp_rast_plane *plane = tri->plane;
+ const struct lp_rast_plane *plane = GET_PLANES(tri);
unsigned mask = arg.triangle.plane_mask;
unsigned outmask, partial_mask;
unsigned j;
partial_mask &= ~(1 << i);
for (j = 0; j < NR_PLANES; j++) {
- const int cx = (plane[j].c
+ const int cx = (plane[j].c - 1
- plane[j].dcdx * px
+ plane[j].dcdy * py) * 4;
const union lp_rast_cmd_arg arg)
{
const struct lp_rast_triangle *tri = arg.triangle.tri;
- const struct lp_rast_plane *plane = tri->plane;
+ const struct lp_rast_plane *plane = GET_PLANES(tri);
unsigned mask = arg.triangle.plane_mask;
const int x = task->x + (mask & 0xff);
const int y = task->y + (mask >> 8);