[Mesa-dev] [PATCH] llvmpipe: Don't mess with the provoking vertex when inverting a triangle.
Jose Fonseca
jfonseca at vmware.com
Thu May 17 16:03:53 PDT 2012
Pushed. Thanks.
Jose
----- Original Message -----
> Fixes a bunch of piglit tests related to flat interpolation of
> floats.
>
> Signed-off-by: Olivier Galibert <galibert at pobox.com>
> ---
> src/gallium/drivers/llvmpipe/lp_setup_tri.c | 45
> ++++++++++++++++++++++++---
> 1 file changed, 40 insertions(+), 5 deletions(-)
>
> diff --git a/src/gallium/drivers/llvmpipe/lp_setup_tri.c
> b/src/gallium/drivers/llvmpipe/lp_setup_tri.c
> index 9916101..97a76d8 100644
> --- a/src/gallium/drivers/llvmpipe/lp_setup_tri.c
> +++ b/src/gallium/drivers/llvmpipe/lp_setup_tri.c
> @@ -815,10 +815,35 @@ calc_fixed_position( struct lp_setup_context
> *setup,
>
> /**
> * Rotate a triangle, flipping its clockwise direction,
> + * Swaps values for xy[0] and xy[1]
> + */
> +static INLINE void
> +rotate_fixed_position_01( struct fixed_position* position )
> +{
> + int x, y;
> +
> + x = position->x[1];
> + y = position->y[1];
> + position->x[1] = position->x[0];
> + position->y[1] = position->y[0];
> + position->x[0] = x;
> + position->y[0] = y;
> +
> + position->dx01 = -position->dx01;
> + position->dy01 = -position->dy01;
> + position->dx20 = position->x[2] - position->x[0];
> + position->dy20 = position->y[2] - position->y[0];
> +
> + position->area = -position->area;
> +}
> +
> +
> +/**
> + * Rotate a triangle, flipping its clockwise direction,
> * Swaps values for xy[1] and xy[2]
> */
> static INLINE void
> -rotate_fixed_position( struct fixed_position* position )
> +rotate_fixed_position_12( struct fixed_position* position )
> {
> int x, y;
>
> @@ -852,8 +877,13 @@ static void triangle_cw( struct lp_setup_context
> *setup,
> calc_fixed_position(setup, &position, v0, v1, v2);
>
> if (position.area < 0) {
> - rotate_fixed_position(&position);
> - retry_triangle_ccw(setup, &position, v0, v2, v1,
> !setup->ccw_is_frontface);
> + if (setup->flatshade_first) {
> + rotate_fixed_position_12(&position);
> + retry_triangle_ccw(setup, &position, v0, v2, v1,
> !setup->ccw_is_frontface);
> + } else {
> + rotate_fixed_position_01(&position);
> + retry_triangle_ccw(setup, &position, v1, v0, v2,
> !setup->ccw_is_frontface);
> + }
> }
> }
>
> @@ -893,8 +923,13 @@ static void triangle_both( struct
> lp_setup_context *setup,
> if (position.area > 0)
> retry_triangle_ccw( setup, &position, v0, v1, v2,
> setup->ccw_is_frontface );
> else if (position.area < 0) {
> - rotate_fixed_position( &position );
> - retry_triangle_ccw( setup, &position, v0, v2, v1,
> !setup->ccw_is_frontface );
> + if (setup->flatshade_first) {
> + rotate_fixed_position_12( &position );
> + retry_triangle_ccw( setup, &position, v0, v2, v1,
> !setup->ccw_is_frontface );
> + } else {
> + rotate_fixed_position_01( &position );
> + retry_triangle_ccw( setup, &position, v1, v0, v2,
> !setup->ccw_is_frontface );
> + }
> }
> }
>
> --
> 1.7.10.rc3.1.gb306
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list