From 4106f6ce54f77c3cb5712eafc1358f53b99b5e09 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 14 Jun 2018 18:05:50 -0700 Subject: [PATCH] v3d: Handle a no-intersection scissor even if it's outside of the VP. The min/maxes ended up producing a negative clip width/height for dEQP-GLES3.functional.fragment_ops.scissor.outside_render_line. Just make sure they stay at 0 (or v3d 3.x's workaround) if that happens. --- src/gallium/drivers/v3d/v3dx_emit.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/v3d/v3dx_emit.c b/src/gallium/drivers/v3d/v3dx_emit.c index ac93badfda8..344f9e464f2 100644 --- a/src/gallium/drivers/v3d/v3dx_emit.c +++ b/src/gallium/drivers/v3d/v3dx_emit.c @@ -343,20 +343,18 @@ v3dX(emit_state)(struct pipe_context *pctx) cl_emit(&job->bcl, CLIP_WINDOW, clip) { clip.clip_window_left_pixel_coordinate = minx; clip.clip_window_bottom_pixel_coordinate = miny; - clip.clip_window_width_in_pixels = maxx - minx; - clip.clip_window_height_in_pixels = maxy - miny; - -#if V3D_VERSION < 41 - /* The HW won't entirely clip out when scissor w/h is - * 0. Just treat it the same as rasterizer discard. - */ - if (clip.clip_window_width_in_pixels == 0 || - clip.clip_window_height_in_pixels == 0) { + if (maxx > minx && maxy > miny) { + clip.clip_window_width_in_pixels = maxx - minx; + clip.clip_window_height_in_pixels = maxy - miny; + } else if (V3D_VERSION < 41) { + /* The HW won't entirely clip out when scissor + * w/h is 0. Just treat it the same as + * rasterizer discard. + */ rasterizer_discard = true; clip.clip_window_width_in_pixels = 1; clip.clip_window_height_in_pixels = 1; } -#endif } job->draw_min_x = MIN2(job->draw_min_x, minx); -- 2.30.2