[Mesa-dev] [PATCH] i965: Always scissor on Gen7/7.5 instead of disabling guardband.
Chris Wilson
chris at chris-wilson.co.uk
Thu Jan 12 08:46:43 UTC 2017
On Thu, Jan 12, 2017 at 12:19:41AM -0800, Kenneth Graunke wrote:
> Previously we disabled the guardband when the viewport was smaller than
> the framebuffer on Gen7/7.5, to prevent portions of primitives from
> being draw outside of the viewport. On Gen8+, we relied on the viewport
> extents test to effectively scissor this away for us.
>
> We can simply always enable scissoring instead. We already include the
> viewport in the scissor rectangle, so this will effectively do the
> viewport extents test for us. (The only difference is that the scissor
> rectangle doesn't support sub-pixel values. I think that's okay.)
>
> Scissoring ought to be cheap (more or less free?), and enabling the
> guardband reduces the cost of clipping. It also allows us to drop
> _NEW_SCISSOR from this atom (which isn't a huge deal - we already
> listen to a ton of other bits).
>
> This also fixes misrendering in Blender, where the "floor plane" grid
> lines started rendering at wrong angles after I disabled XY clipping
> of line primitives. Enabling the guardband seems to solve the issue.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99339
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
> src/mesa/drivers/dri/i965/gen6_clip_state.c | 26 --------------------------
> src/mesa/drivers/dri/i965/gen6_sf_state.c | 15 +++------------
> src/mesa/drivers/dri/i965/gen7_sf_state.c | 12 ++----------
> 3 files changed, 5 insertions(+), 48 deletions(-)
>
> I have not benchmarked this yet. I should.
>
> diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c b/src/mesa/drivers/dri/i965/gen6_clip_state.c
> index 0b3c7f16f18..8e893f5668f 100644
> --- a/src/mesa/drivers/dri/i965/gen6_clip_state.c
> +++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c
> @@ -203,32 +203,6 @@ upload_clip_state(struct brw_context *brw)
> }
> }
>
> - /* If the viewport dimensions are smaller than the drawable dimensions,
> - * we have to disable guardband clipping prior to Gen8. We always program
> - * the guardband to a fixed size, which is almost always larger than the
> - * viewport. Any geometry which intersects the viewport but lies within
> - * the guardband would bypass the 3D clipping stage, so it wouldn't be
> - * clipped to the viewport. Rendering would happen beyond the viewport,
> - * but still inside the drawable.
> - *
> - * Gen8+ introduces a viewport extents test which restricts rendering to
> - * the viewport, so we can ignore this restriction.
> - */
> - if (brw->gen < 8) {
Would not
if (brw->gen < 8 &&
!(brw_is_drawing_points(brw) || brw_is_drawing_lines(brw)))
by itself fix the misrendering as a first step without any concern for
wider impact?
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the mesa-dev
mailing list