mesa: remove DD_TRI_UNFILLED flag
authorBrian Paul <brianp@vmware.com>
Wed, 17 Apr 2013 01:06:22 +0000 (19:06 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 17 Apr 2013 17:59:41 +0000 (11:59 -0600)
Use alternate code in intel, r200, radeon drivers.
v2: use conditional operator instead of bit shifting

Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i915/intel_tris.c
src/mesa/drivers/dri/r200/r200_state.c
src/mesa/drivers/dri/r200/r200_swtcl.c
src/mesa/drivers/dri/radeon/radeon_state.c
src/mesa/drivers/dri/radeon/radeon_swtcl.c
src/mesa/main/debug.c
src/mesa/main/mtypes.h
src/mesa/main/polygon.c
src/mesa/main/state.c
src/mesa/tnl/t_vertex.c

index e62fd612aae13221cc45e61472a7fc4ba182745e..9a9c56f3eea74212bb4b6c2a9f277e2161edd153 100644 (file)
@@ -943,7 +943,7 @@ intelFastRenderClippedPoly(struct gl_context * ctx, const GLuint * elts, GLuint
 /**********************************************************************/
 
 
-
+#define DD_TRI_UNFILLED (1 << 2)
 #define DD_TRI_STIPPLE  (1 << 4)
 #define DD_TRI_OFFSET   (1 << 5)
 #define DD_LINE_STIPPLE (1 << 7)
@@ -958,6 +958,8 @@ intelChooseRenderState(struct gl_context * ctx)
    TNLcontext *tnl = TNL_CONTEXT(ctx);
    struct intel_context *intel = intel_context(ctx);
    GLuint flags = ctx->_TriangleCaps |
+      ((ctx->Polygon.FrontMode != GL_FILL ||
+        ctx->Polygon.BackMode != GL_FILL) ? DD_TRI_UNFILLED : 0) |
       (ctx->Polygon.StippleFlag ? DD_TRI_STIPPLE : 0) |
       ((ctx->Polygon.OffsetPoint ||
         ctx->Polygon.OffsetLine ||
index 93ae52a4bbaaab3f600512e2b2e5e9704848df0a..6f79610f85b67acf0dcf220c985649639cf79c8c 100644 (file)
@@ -731,12 +731,13 @@ static void r200PolygonOffset( struct gl_context *ctx,
 static void r200PolygonMode( struct gl_context *ctx, GLenum face, GLenum mode )
 {
    r200ContextPtr rmesa = R200_CONTEXT(ctx);
-   GLboolean flag = (ctx->_TriangleCaps & DD_TRI_UNFILLED) != 0;
+   GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+                         ctx->Polygon.BackMode != GL_FILL);
 
    /* Can't generally do unfilled via tcl, but some good special
     * cases work.
     */
-   TCL_FALLBACK( ctx, R200_TCL_FALLBACK_UNFILLED, flag);
+   TCL_FALLBACK( ctx, R200_TCL_FALLBACK_UNFILLED, unfilled);
    if (rmesa->radeon.TclFallback) {
       r200ChooseRenderState( ctx );
       r200ChooseVertexState( ctx );
index 5c6e276dc9558f0b4a851e87abfee7eea39f7eb3..fb92e751a1b2ae3df905a22fb143fd080ee5af66 100644 (file)
@@ -239,6 +239,8 @@ void r200ChooseVertexState( struct gl_context *ctx )
    TNLcontext *tnl = TNL_CONTEXT(ctx);
    GLuint vte;
    GLuint vap;
+   GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+                         ctx->Polygon.BackMode != GL_FILL);
 
    /* We must ensure that we don't do _tnl_need_projected_coords while in a
     * rasterization fallback.  As this function will be called again when we
@@ -254,7 +256,8 @@ void r200ChooseVertexState( struct gl_context *ctx )
     * bigger one.
     */
    if ((0 == (tnl->render_inputs_bitset & BITFIELD64_RANGE(_TNL_ATTRIB_TEX0, _TNL_NUM_TEX)))
-       || (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
+       || (ctx->_TriangleCaps & DD_TRI_LIGHT_TWOSIDE)
+       || unfilled) {
       rmesa->swtcl.needproj = GL_TRUE;
       vte |= R200_VTX_XY_FMT | R200_VTX_Z_FMT;
       vte &= ~R200_VTX_W0_FMT;
@@ -571,12 +574,14 @@ void r200ChooseRenderState( struct gl_context *ctx )
    r200ContextPtr rmesa = R200_CONTEXT(ctx);
    GLuint index = 0;
    GLuint flags = ctx->_TriangleCaps;
+   GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+                         ctx->Polygon.BackMode != GL_FILL);
 
    if (!rmesa->radeon.TclFallback || rmesa->radeon.Fallback)
       return;
 
    if (flags & DD_TRI_LIGHT_TWOSIDE) index |= R200_TWOSIDE_BIT;
-   if (flags & DD_TRI_UNFILLED)      index |= R200_UNFILLED_BIT;
+   if (unfilled)                     index |= R200_UNFILLED_BIT;
 
    if (index != rmesa->radeon.swtcl.RenderIndex) {
       tnl->Driver.Render.Points = rast_tab[index].points;
@@ -634,8 +639,11 @@ static void r200RasterPrimitive( struct gl_context *ctx, GLuint hwprim )
 static void r200RenderPrimitive( struct gl_context *ctx, GLenum prim )
 {
    r200ContextPtr rmesa = R200_CONTEXT(ctx);
+   GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+                         ctx->Polygon.BackMode != GL_FILL);
+
    rmesa->radeon.swtcl.render_primitive = prim;
-   if (prim < GL_TRIANGLES || !(ctx->_TriangleCaps & DD_TRI_UNFILLED))
+   if (prim < GL_TRIANGLES || !unfilled)
       r200RasterPrimitive( ctx, reduced_hw_prim(ctx, prim) );
 }
 
index 49e346c88f321d0e3501ca7c3654c27db2a5f200..2f30f64f2edc5ed00ee661cd424c0f35cfe49482 100644 (file)
@@ -533,12 +533,13 @@ static void radeonPolygonOffset( struct gl_context *ctx,
 static void radeonPolygonMode( struct gl_context *ctx, GLenum face, GLenum mode )
 {
    r100ContextPtr rmesa = R100_CONTEXT(ctx);
-   GLboolean flag = (ctx->_TriangleCaps & DD_TRI_UNFILLED) != 0;
+   GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+                         ctx->Polygon.BackMode != GL_FILL);
 
    /* Can't generally do unfilled via tcl, but some good special
     * cases work.
     */
-   TCL_FALLBACK( ctx, RADEON_TCL_FALLBACK_UNFILLED, flag);
+   TCL_FALLBACK( ctx, RADEON_TCL_FALLBACK_UNFILLED, unfilled);
    if (rmesa->radeon.TclFallback) {
       radeonChooseRenderState( ctx );
       radeonChooseVertexState( ctx );
index 4f264a63f40398312748c18c739c861fce93af62..ed452df3f795bc01fb346a59d3798dce08d60274 100644 (file)
@@ -273,6 +273,8 @@ void radeonChooseVertexState( struct gl_context *ctx )
    TNLcontext *tnl = TNL_CONTEXT(ctx);
 
    GLuint se_coord_fmt = rmesa->hw.set.cmd[SET_SE_COORDFMT];
+   GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+                         ctx->Polygon.BackMode != GL_FILL);
    
    se_coord_fmt &= ~(RADEON_VTX_XY_PRE_MULT_1_OVER_W0 |
                     RADEON_VTX_Z_PRE_MULT_1_OVER_W0 |
@@ -292,7 +294,8 @@ void radeonChooseVertexState( struct gl_context *ctx )
    if ((0 == (tnl->render_inputs_bitset & 
         (BITFIELD64_RANGE(_TNL_ATTRIB_TEX0, _TNL_NUM_TEX)
          | BITFIELD64_BIT(_TNL_ATTRIB_COLOR1))))
-        || (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
+       || (ctx->_TriangleCaps & DD_TRI_LIGHT_TWOSIDE)
+       || unfilled) {
       rmesa->swtcl.needproj = GL_TRUE;
       se_coord_fmt |= (RADEON_VTX_XY_PRE_MULT_1_OVER_W0 |
                      RADEON_VTX_Z_PRE_MULT_1_OVER_W0);
@@ -694,12 +697,14 @@ void radeonChooseRenderState( struct gl_context *ctx )
    r100ContextPtr rmesa = R100_CONTEXT(ctx);
    GLuint index = 0;
    GLuint flags = ctx->_TriangleCaps;
+   GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+                         ctx->Polygon.BackMode != GL_FILL);
 
    if (!rmesa->radeon.TclFallback || rmesa->radeon.Fallback) 
       return;
 
    if (flags & DD_TRI_LIGHT_TWOSIDE) index |= RADEON_TWOSIDE_BIT;
-   if (flags & DD_TRI_UNFILLED)      index |= RADEON_UNFILLED_BIT;
+   if (unfilled)                     index |= RADEON_UNFILLED_BIT;
 
    if (index != rmesa->radeon.swtcl.RenderIndex) {
       tnl->Driver.Render.Points = rast_tab[index].points;
@@ -741,8 +746,11 @@ static void radeonRasterPrimitive( struct gl_context *ctx, GLuint hwprim )
 static void radeonRenderPrimitive( struct gl_context *ctx, GLenum prim )
 {
    r100ContextPtr rmesa = R100_CONTEXT(ctx);
+   GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+                         ctx->Polygon.BackMode != GL_FILL);
+
    rmesa->radeon.swtcl.render_primitive = prim;
-   if (prim < GL_TRIANGLES || !(ctx->_TriangleCaps & DD_TRI_UNFILLED)
+   if (prim < GL_TRIANGLES || !unfilled
       radeonRasterPrimitive( ctx, reduced_hw_prim[prim] );
 }
 
index 418f0e2e6b54b60bc0ea0d97fb4c6e25f57d2886..e8d850dff865c4b038c96a112977f346830c9347 100644 (file)
@@ -100,11 +100,10 @@ void
 _mesa_print_tri_caps( const char *name, GLuint flags )
 {
    _mesa_debug(NULL,
-          "%s: (0x%x) %s%s\n",
+          "%s: (0x%x) %s\n",
           name,
           flags,
-          (flags & DD_TRI_LIGHT_TWOSIDE)   ? "tri-light-twoside, " : "",
-          (flags & DD_TRI_UNFILLED)        ? "tri-unfilled, " : ""
+          (flags & DD_TRI_LIGHT_TWOSIDE)   ? "tri-light-twoside, " : ""
       );
 }
 
index 0463689587b6ecbab98dae16512160cbb5bac098..d6c2b35c6ccaeb022b234b66d9411bf651d95925 100644 (file)
@@ -3168,7 +3168,6 @@ struct gl_matrix_stack
  */
 /*@{*/
 #define DD_TRI_LIGHT_TWOSIDE        (1 << 1)
-#define DD_TRI_UNFILLED             (1 << 2)
 /*@}*/
 
 
index cdef01a2fe28e6c9c7fd8eb59497308bc6c6bc95..e1fd0ffaf69c65f399dad0159083f6d89371a381 100644 (file)
@@ -172,11 +172,6 @@ _mesa_PolygonMode( GLenum face, GLenum mode )
       return;
    }
 
-   if (ctx->Polygon.FrontMode == GL_FILL && ctx->Polygon.BackMode == GL_FILL)
-      ctx->_TriangleCaps &= ~DD_TRI_UNFILLED;
-   else
-      ctx->_TriangleCaps |= DD_TRI_UNFILLED;
-
    if (ctx->Driver.PolygonMode)
       ctx->Driver.PolygonMode(ctx, face, mode);
 }
index f7248647beb3bb3462f69b13689da6c876c43014..da7f713489dcc8d5cc7ae34a55688193dd4b317e 100644 (file)
@@ -326,15 +326,6 @@ update_tricaps(struct gl_context *ctx, GLbitfield new_state)
 {
    ctx->_TriangleCaps = 0;
 
-   /*
-    * Polygons
-    */
-   if (1/*new_state & _NEW_POLYGON*/) {
-      if (ctx->Polygon.FrontMode != GL_FILL
-          || ctx->Polygon.BackMode != GL_FILL)
-         ctx->_TriangleCaps |= DD_TRI_UNFILLED;
-   }
-
    /*
     * Lighting and shading
     */
index ce3e32165ab42727101a03fecc2fb5f468c3ef8b..a42f46053fdec348b85a5484701f2016ec4eef4a 100644 (file)
@@ -156,9 +156,11 @@ static void choose_interp_func( struct gl_context *ctx,
                                GLboolean force_boundary )
 {
    struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx);
-
+   GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+                         ctx->Polygon.BackMode != GL_FILL);
    if (vtx->need_extras && 
-       (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
+       ((ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE) ||
+         unfilled))) {
       vtx->interp = _tnl_generic_interp_extras;
    } else {
       vtx->interp = _tnl_generic_interp;
@@ -171,9 +173,12 @@ static void choose_interp_func( struct gl_context *ctx,
 static void choose_copy_pv_func(  struct gl_context *ctx, GLuint edst, GLuint esrc )
 {
    struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx);
+   GLboolean unfilled = (ctx->Polygon.FrontMode != GL_FILL ||
+                         ctx->Polygon.BackMode != GL_FILL);
 
    if (vtx->need_extras && 
-       (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
+       ((ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE) ||
+         unfilled))) {
       vtx->copy_pv = _tnl_generic_copy_pv_extras;
    } else {
       vtx->copy_pv = _tnl_generic_copy_pv;