From 641028debf0e4b03111b205088763d3d957070b2 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Mon, 18 Oct 2010 13:11:29 -0700 Subject: i965: Fix scissor-offscreen on gen6 like we did pre-gen6. --- src/mesa/drivers/dri/i965/gen6_scissor_state.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mesa/drivers/dri/i965/gen6_scissor_state.c b/src/mesa/drivers/dri/i965/gen6_scissor_state.c index 5684c2e44c..b57126c793 100644 --- a/src/mesa/drivers/dri/i965/gen6_scissor_state.c +++ b/src/mesa/drivers/dri/i965/gen6_scissor_state.c @@ -46,7 +46,19 @@ prepare_scissor_state(struct brw_context *brw) * Note that the hardware's coordinates are inclusive, while Mesa's min is * inclusive but max is exclusive. */ - if (render_to_fbo) { + if (ctx->DrawBuffer->_Xmin == ctx->DrawBuffer->_Xmax || + ctx->DrawBuffer->_Ymin == ctx->DrawBuffer->_Ymax) { + /* If the scissor was out of bounds and got clamped to 0 + * width/height at the bounds, the subtraction of 1 from + * maximums could produce a negative number and thus not clip + * anything. Instead, just provide a min > max scissor inside + * the bounds, which produces the expected no rendering. + */ + scissor.xmin = 1; + scissor.xmax = 0; + scissor.ymin = 1; + scissor.ymax = 0; + } else if (render_to_fbo) { /* texmemory: Y=0=bottom */ scissor.xmin = ctx->DrawBuffer->_Xmin; scissor.xmax = ctx->DrawBuffer->_Xmax - 1; -- cgit v1.2.3