llvmpipe: scale up bounding box planes to subpixel precision
Otherwise some planes we get in rasterization have subpixel precision, others not. Doesn't matter so far, but will soon. (OpenGL actually supports viewports with subpixel accuracy, so could even do bounding box calcs with that). Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
@@ -713,24 +713,24 @@ try_setup_line( struct lp_setup_context *setup,
|
||||
const struct u_rect *scissor =
|
||||
&setup->scissors[viewport_index];
|
||||
|
||||
plane[4].dcdx = -1;
|
||||
plane[4].dcdx = -1 << 8;
|
||||
plane[4].dcdy = 0;
|
||||
plane[4].c = 1-scissor->x0;
|
||||
plane[4].eo = 1;
|
||||
plane[4].c = (1-scissor->x0) << 8;
|
||||
plane[4].eo = 1 << 8;
|
||||
|
||||
plane[5].dcdx = 1;
|
||||
plane[5].dcdx = 1 << 8;
|
||||
plane[5].dcdy = 0;
|
||||
plane[5].c = scissor->x1+1;
|
||||
plane[5].c = (scissor->x1+1) << 8;
|
||||
plane[5].eo = 0;
|
||||
|
||||
plane[6].dcdx = 0;
|
||||
plane[6].dcdy = 1;
|
||||
plane[6].c = 1-scissor->y0;
|
||||
plane[6].eo = 1;
|
||||
plane[6].dcdy = 1 << 8;
|
||||
plane[6].c = (1-scissor->y0) << 8;
|
||||
plane[6].eo = 1 << 8;
|
||||
|
||||
plane[7].dcdx = 0;
|
||||
plane[7].dcdy = -1;
|
||||
plane[7].c = scissor->y1+1;
|
||||
plane[7].dcdy = -1 << 8;
|
||||
plane[7].c = (scissor->y1+1) << 8;
|
||||
plane[7].eo = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -492,24 +492,24 @@ try_setup_point( struct lp_setup_context *setup,
|
||||
{
|
||||
struct lp_rast_plane *plane = GET_PLANES(point);
|
||||
|
||||
plane[0].dcdx = -1;
|
||||
plane[0].dcdx = -1 << 8;
|
||||
plane[0].dcdy = 0;
|
||||
plane[0].c = 1-bbox.x0;
|
||||
plane[0].eo = 1;
|
||||
plane[0].c = (1-bbox.x0) << 8;
|
||||
plane[0].eo = 1 << 8;
|
||||
|
||||
plane[1].dcdx = 1;
|
||||
plane[1].dcdx = 1 << 8;
|
||||
plane[1].dcdy = 0;
|
||||
plane[1].c = bbox.x1+1;
|
||||
plane[1].c = (bbox.x1+1) << 8;
|
||||
plane[1].eo = 0;
|
||||
|
||||
plane[2].dcdx = 0;
|
||||
plane[2].dcdy = 1;
|
||||
plane[2].c = 1-bbox.y0;
|
||||
plane[2].eo = 1;
|
||||
plane[2].dcdy = 1 << 8;
|
||||
plane[2].c = (1-bbox.y0) << 8;
|
||||
plane[2].eo = 1 << 8;
|
||||
|
||||
plane[3].dcdx = 0;
|
||||
plane[3].dcdy = -1;
|
||||
plane[3].c = bbox.y1+1;
|
||||
plane[3].dcdy = -1 << 8;
|
||||
plane[3].c = (bbox.y1+1) << 8;
|
||||
plane[3].eo = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -676,24 +676,24 @@ do_triangle_ccw(struct lp_setup_context *setup,
|
||||
if (nr_planes == 7) {
|
||||
const struct u_rect *scissor = &setup->scissors[viewport_index];
|
||||
|
||||
plane[3].dcdx = -1;
|
||||
plane[3].dcdx = -1 << 8;
|
||||
plane[3].dcdy = 0;
|
||||
plane[3].c = 1-scissor->x0;
|
||||
plane[3].eo = 1;
|
||||
plane[3].c = (1-scissor->x0) << 8;
|
||||
plane[3].eo = 1 << 8;
|
||||
|
||||
plane[4].dcdx = 1;
|
||||
plane[4].dcdx = 1 << 8;
|
||||
plane[4].dcdy = 0;
|
||||
plane[4].c = scissor->x1+1;
|
||||
plane[4].c = (scissor->x1+1) << 8;
|
||||
plane[4].eo = 0;
|
||||
|
||||
plane[5].dcdx = 0;
|
||||
plane[5].dcdy = 1;
|
||||
plane[5].c = 1-scissor->y0;
|
||||
plane[5].eo = 1;
|
||||
plane[5].dcdy = 1 << 8;
|
||||
plane[5].c = (1-scissor->y0) << 8;
|
||||
plane[5].eo = 1 << 8;
|
||||
|
||||
plane[6].dcdx = 0;
|
||||
plane[6].dcdy = -1;
|
||||
plane[6].c = scissor->y1+1;
|
||||
plane[6].dcdy = -1 << 8;
|
||||
plane[6].c = (scissor->y1+1) << 8;
|
||||
plane[6].eo = 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user