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.
This commit is contained in:
@@ -343,20 +343,18 @@ v3dX(emit_state)(struct pipe_context *pctx)
|
|||||||
cl_emit(&job->bcl, CLIP_WINDOW, clip) {
|
cl_emit(&job->bcl, CLIP_WINDOW, clip) {
|
||||||
clip.clip_window_left_pixel_coordinate = minx;
|
clip.clip_window_left_pixel_coordinate = minx;
|
||||||
clip.clip_window_bottom_pixel_coordinate = miny;
|
clip.clip_window_bottom_pixel_coordinate = miny;
|
||||||
clip.clip_window_width_in_pixels = maxx - minx;
|
if (maxx > minx && maxy > miny) {
|
||||||
clip.clip_window_height_in_pixels = maxy - miny;
|
clip.clip_window_width_in_pixels = maxx - minx;
|
||||||
|
clip.clip_window_height_in_pixels = maxy - miny;
|
||||||
#if V3D_VERSION < 41
|
} else if (V3D_VERSION < 41) {
|
||||||
/* The HW won't entirely clip out when scissor w/h is
|
/* The HW won't entirely clip out when scissor
|
||||||
* 0. Just treat it the same as rasterizer discard.
|
* 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) {
|
|
||||||
rasterizer_discard = true;
|
rasterizer_discard = true;
|
||||||
clip.clip_window_width_in_pixels = 1;
|
clip.clip_window_width_in_pixels = 1;
|
||||||
clip.clip_window_height_in_pixels = 1;
|
clip.clip_window_height_in_pixels = 1;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
job->draw_min_x = MIN2(job->draw_min_x, minx);
|
job->draw_min_x = MIN2(job->draw_min_x, minx);
|
||||||
|
Reference in New Issue
Block a user