[Mesa-dev] [PATCH 4/4] Revert "i965: Disable guardband clipping in the smaller-than-viewport case."

Kenneth Graunke kenneth at whitecape.org
Mon Jan 23 06:42:19 UTC 2017


This reverts commit 0bac2551e40410e2251daf4fd9faf69310ab34ce.

Now that we position the guardband correctly (applying translations
in addition to scaling) and made it as large (or larger) than the
render target, this shouldn't be necessary.

Now we leave guardband clipping enabled 100% of the time, like the
Windows driver does.

Fixes GL45-CTS.gtf21.GL2FixedTests.clip.clip.  It tries to draw a
16384x64 rectangle, and it appears that some kind of numerical
imprecisions in the clipper result in some edge pixels going missing.
The Windows driver passes this test because of guardband clipping.
---
 src/mesa/drivers/dri/i965/gen6_clip_state.c | 31 -----------------------------
 1 file changed, 31 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c b/src/mesa/drivers/dri/i965/gen6_clip_state.c
index 8e893f5668f..1c8c23730be 100644
--- a/src/mesa/drivers/dri/i965/gen6_clip_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c
@@ -172,37 +172,6 @@ upload_clip_state(struct brw_context *brw)
    /* BRW_NEW_VIEWPORT_COUNT */
    const unsigned viewport_count = brw->clip.viewport_count;
 
-   /* We need to disable guardband clipping if the guardband (which we always
-    * program to the maximum screen-space bounding box of 8K x 8K) will be
-    * smaller than the viewport.
-    *
-    * Closely examining the clip determination formulas in the documentation
-    * reveals that objects will be discarded entirely if they're outside the
-    * (small) guardband, even if they're within the (large) viewport:
-    *
-    *     TR = TR_GB || TR_VPXY || TR_VPZ || TR_UC || TR_NEGW
-    *     TA   = !TR && TA_GB && TA_VPZ && TA_NEGW
-    *     MC = !(TA || TR)
-    *
-    * (TA is "Trivial Accept", TR is "Trivial Reject", MC is "Must Clip".)
-    *
-    * Disabling guardband clipping removes the TR_GB condition, which means
-    * they'll be considered MC ("Must Clip") unless they're rejected for
-    * some other reason.
-    *
-    * Note that there is no TA_VPXY condition.  If there were, objects entirely
-    * inside a 16384x16384 viewport would be trivially accepted, breaking the
-    * "objects must have a screenspace bounding box not exceeding 8K in the X
-    * or Y direction" restriction.  Instead, they're clipped.
-    */
-   for (unsigned i = 0; i < viewport_count; i++) {
-      if (ctx->ViewportArray[i].Width > 8192 ||
-          ctx->ViewportArray[i].Height > 8192) {
-         dw2 &= ~GEN6_CLIP_GB_TEST;
-         break;
-      }
-   }
-
    /* BRW_NEW_RASTERIZER_DISCARD */
    if (ctx->RasterDiscard) {
       dw2 |= GEN6_CLIP_MODE_REJECT_ALL;
-- 
2.11.0



More information about the mesa-dev mailing list