Reviewed-by: Bruce Cherniak <bruce.chern...@intel.com> 

> On May 4, 2017, at 10:35 AM, George Kyriazis <george.kyria...@intel.com> 
> wrote:
> 
> Rasterizer core only supports polygonmode front==back.  Add logic for
> populating fillMode for the rasterizer only for that case correctly.
> Provide enum conversion between mesa enums and core enums.
> 
> The core renders lines/points as tris. Previously, code would enable
> stipple for polygonmode != FILL.  Modify stipple enable logic so that
> this works correctly.
> 
> No regressions in vtk tests.
> Fixes the following piglit tests:
>       pointsprite
>       gl-1.0-edgeflag-const
> 
> v2: remove cc stable, and remove "not implemented" assert
> v3: modified commit message
> ---
> src/gallium/drivers/swr/swr_state.cpp |  8 +++++++-
> src/gallium/drivers/swr/swr_state.h   | 20 ++++++++++++++++++++
> 2 files changed, 27 insertions(+), 1 deletion(-)
> 
> diff --git a/src/gallium/drivers/swr/swr_state.cpp 
> b/src/gallium/drivers/swr/swr_state.cpp
> index 56b1374..12b4e9d 100644
> --- a/src/gallium/drivers/swr/swr_state.cpp
> +++ b/src/gallium/drivers/swr/swr_state.cpp
> @@ -1153,6 +1153,10 @@ swr_update_derived(struct pipe_context *pipe,
>          rastState->slopeScaledDepthBias = 0;
>          rastState->depthBiasClamp = 0;
>       }
> +
> +      /* translate polygon mode, at least for the front==back case */
> +      rastState->fillMode = swr_convert_fill_mode(rasterizer->fill_front);
> +
>       struct pipe_surface *zb = fb->zsbuf;
>       if (zb && swr_resource(zb->texture)->has_depth)
>          rastState->depthFormat = swr_resource(zb->texture)->swr.format;
> @@ -1423,7 +1427,9 @@ swr_update_derived(struct pipe_context *pipe,
>    /* and points, since we rasterize them as triangles, too */
>    /* Has to be before fragment shader, since it sets SWR_NEW_FS */
>    if (p_draw_info) {
> -      bool new_prim_is_poly = (u_reduced_prim(p_draw_info->mode) == 
> PIPE_PRIM_TRIANGLES);
> +      bool new_prim_is_poly =
> +         (u_reduced_prim(p_draw_info->mode) == PIPE_PRIM_TRIANGLES) &&
> +         (ctx->derived.rastState.fillMode == SWR_FILLMODE_SOLID);
>       if (new_prim_is_poly != ctx->poly_stipple.prim_is_poly) {
>          ctx->dirty |= SWR_NEW_FS;
>          ctx->poly_stipple.prim_is_poly = new_prim_is_poly;
> diff --git a/src/gallium/drivers/swr/swr_state.h 
> b/src/gallium/drivers/swr/swr_state.h
> index 9a8c4e1..7940a96 100644
> --- a/src/gallium/drivers/swr/swr_state.h
> +++ b/src/gallium/drivers/swr/swr_state.h
> @@ -376,4 +376,24 @@ swr_convert_prim_topology(const unsigned mode)
>       return TOP_UNKNOWN;
>    }
> };
> +
> +/*
> + * convert mesa PIPE_POLYGON_MODE_X to SWR enum SWR_FILLMODE
> + */
> +static INLINE enum SWR_FILLMODE
> +swr_convert_fill_mode(const unsigned mode)
> +{
> +   switch(mode) {
> +   case PIPE_POLYGON_MODE_FILL:
> +      return SWR_FILLMODE_SOLID;
> +   case PIPE_POLYGON_MODE_LINE:
> +      return SWR_FILLMODE_WIREFRAME;
> +   case PIPE_POLYGON_MODE_POINT:
> +      return SWR_FILLMODE_POINT;
> +   default:
> +      assert(0 && "Unknown fillmode");
> +      return SWR_FILLMODE_SOLID; // at least do something sensible
> +   }
> +}
> +
> #endif
> -- 
> 2.7.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to