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