summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2017-01-21 03:54:46 -0800
committerKenneth Graunke <kenneth@whitecape.org>2017-02-06 17:40:14 -0800
commitce8a63de6dffd4a7bc704b63bdd48a63798a438e (patch)
treeaf30207c0cfd3b917515ed30c93648b8f0f0fafc
parentece0e535a44c228dd994861592deb155c14740d8 (diff)
Revert "i965: Disable guardband clipping in the smaller-than-viewport case."
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. Cc: "17.0" <mesa-stable@lists.freedesktop.org> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
-rw-r--r--src/mesa/drivers/dri/i965/gen6_clip_state.c31
1 files changed, 0 insertions, 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 8e893f5668..1c8c23730b 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;