diff --git a/src/gallium/drivers/llvmpipe/lp_setup_line.c b/src/gallium/drivers/llvmpipe/lp_setup_line.c index a190254d9df..fac1cd61d77 100644 --- a/src/gallium/drivers/llvmpipe/lp_setup_line.c +++ b/src/gallium/drivers/llvmpipe/lp_setup_line.c @@ -311,6 +311,7 @@ try_setup_line( struct lp_setup_context *setup, float y2diff; float dx, dy; float area; + const float (*pv)[4]; boolean draw_start; boolean draw_end; @@ -320,22 +321,28 @@ try_setup_line( struct lp_setup_context *setup, if (0) print_line(setup, v1, v2); + if (setup->flatshade_first) { + pv = v1; + } + else { + pv = v2; + } + if (setup->viewport_index_slot > 0) { + unsigned *udata = (unsigned*)pv[setup->viewport_index_slot]; + viewport_index = lp_clamp_viewport_idx(*udata); + } + if (setup->layer_slot > 0) { + layer = *(unsigned*)pv[setup->layer_slot]; + layer = MIN2(layer, scene->fb_max_layer); + } + if (setup->scissor_test) { nr_planes = 8; - if (setup->viewport_index_slot > 0) { - unsigned *udata = (unsigned*)v1[setup->viewport_index_slot]; - viewport_index = lp_clamp_viewport_idx(*udata); - } } else { nr_planes = 4; } - if (setup->layer_slot > 0) { - layer = *(unsigned*)v1[setup->layer_slot]; - layer = MIN2(layer, scene->fb_max_layer); - } - dx = v1[0][0] - v2[0][0]; dy = v1[0][1] - v2[0][1]; area = (dx * dx + dy * dy); diff --git a/src/gallium/drivers/llvmpipe/lp_setup_tri.c b/src/gallium/drivers/llvmpipe/lp_setup_tri.c index 98a9d4bc28b..2c9d43fb040 100644 --- a/src/gallium/drivers/llvmpipe/lp_setup_tri.c +++ b/src/gallium/drivers/llvmpipe/lp_setup_tri.c @@ -276,6 +276,7 @@ do_triangle_ccw(struct lp_setup_context *setup, int nr_planes = 3; unsigned viewport_index = 0; unsigned layer = 0; + const float (*pv)[4]; /* Area should always be positive here */ assert(position->area > 0); @@ -283,20 +284,27 @@ do_triangle_ccw(struct lp_setup_context *setup, if (0) lp_setup_print_triangle(setup, v0, v1, v2); + if (setup->flatshade_first) { + pv = v0; + } + else { + pv = v2; + } + if (setup->viewport_index_slot > 0) { + unsigned *udata = (unsigned*)pv[setup->viewport_index_slot]; + viewport_index = lp_clamp_viewport_idx(*udata); + } + if (setup->layer_slot > 0) { + layer = *(unsigned*)pv[setup->layer_slot]; + layer = MIN2(layer, scene->fb_max_layer); + } + if (setup->scissor_test) { nr_planes = 7; - if (setup->viewport_index_slot > 0) { - unsigned *udata = (unsigned*)v0[setup->viewport_index_slot]; - viewport_index = lp_clamp_viewport_idx(*udata); - } } else { nr_planes = 3; } - if (setup->layer_slot > 0) { - layer = *(unsigned*)v1[setup->layer_slot]; - layer = MIN2(layer, scene->fb_max_layer); - } /* Bounding rectangle (in pixels) */ {