i965/gen4-5: Stop using bogus polygon_offset_scale field.
authorEric Anholt <eric@anholt.net>
Wed, 12 Jun 2013 00:32:41 +0000 (17:32 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 26 Jun 2013 08:07:11 +0000 (01:07 -0700)
The polygon offset math used for triangles by the WM is "OffsetUnits * 2 *
MRD + OffsetFactor * m" where 'MRD' is the minimum resolvable difference
for the depth buffer (~1/(1<<16) or ~1/(1<<24)), 'm' is the approximated
slope from the GL spec, and '2' is this magic number from the original
i965 code dump that we deviate from the GL spec by because "it makes glean
work" (except that it doesn't, because of some hilarity with 0.5 *
approximately 2.0 != 1.0.  go glean!).

This clipper code for unfilled polygons, on the other hand, was doing
"OffsetUnits * garbage + OffsetFactor * m", where garbage was MRD in the
case of 16-bit depth visual (regardless the FBO's depth resolution), or
128 * MRD for 24-bit depth visual.

This change just makes the unfilled polygons behavior match the WM's
filled polygons behavior.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_clip.c
src/mesa/drivers/dri/intel/intel_context.c
src/mesa/drivers/dri/intel/intel_context.h

index 3baad86b08fe6e52ed36f46be0d309f465b38cba..74d7e7e65396cf657e8f8b344345ffd3a555dd87 100644 (file)
@@ -216,7 +216,7 @@ brw_upload_clip_prog(struct brw_context *brw)
 
            if (offset_back || offset_front) {
               /* _NEW_POLYGON, _NEW_BUFFERS */
-              key.offset_units = ctx->Polygon.OffsetUnits * brw->intel.polygon_offset_scale;
+              key.offset_units = ctx->Polygon.OffsetUnits * ctx->DrawBuffer->_MRD * 2;
               key.offset_factor = ctx->Polygon.OffsetFactor * ctx->DrawBuffer->_MRD;
            }
 
index f669ae04ac8cd33bb32662a0ec8deec3dc5e76f3..23d8281b4ca92952d072b1f4aab31be48a2af1aa 100644 (file)
@@ -639,23 +639,6 @@ intelInitContext(struct intel_context *intel,
    intel->hw_stencil = mesaVis->stencilBits && mesaVis->depthBits == 24;
    intel->hw_stipple = 1;
 
-   /* XXX FBO: this doesn't seem to be used anywhere */
-   switch (mesaVis->depthBits) {
-   case 0:                     /* what to do in this case? */
-   case 16:
-      intel->polygon_offset_scale = 1.0;
-      break;
-   case 24:
-      intel->polygon_offset_scale = 2.0;     /* req'd to pass glean */
-      break;
-   default:
-      assert(0);
-      break;
-   }
-
-   if (intel->gen >= 4)
-      intel->polygon_offset_scale /= 0xffff;
-
    intel->RenderIndex = ~0;
 
    intelInitExtensions(ctx);
index eac65ba54239bbf8edd34a1efbc250bd8badbaf5..0f1a0c79e03b67d0f8a33f0201871263f192b032 100644 (file)
@@ -298,8 +298,6 @@ struct intel_context
    struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
    GLuint vertex_attr_count;
 
-   GLfloat polygon_offset_scale;        /* dependent on depth_scale, bpp */
-
    bool hw_stencil;
    bool hw_stipple;
    bool no_rast;