v3d: Fix Z clipping when viewport.scale[2] is negative.
authorEric Anholt <eric@anholt.net>
Mon, 25 Jun 2018 20:29:42 +0000 (13:29 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 27 Jun 2018 16:35:51 +0000 (09:35 -0700)
Fixes:
dEQP-GLES3.functional.shaders.builtin_variable.depth_range_fragment
dEQP-GLES3.functional.shaders.builtin_variable.depth_range_vertex

src/gallium/drivers/v3d/v3dx_emit.c

index e0bb95efb219054110c0245b09cd7aef4e19a04e..d5549bb945cb66024626e1e684f188d2b429c2ca 100644 (file)
@@ -465,10 +465,12 @@ v3dX(emit_state)(struct pipe_context *pctx)
                                 v3d->viewport.scale[2];
                 }
                 cl_emit(&job->bcl, CLIPPER_Z_MIN_MAX_CLIPPING_PLANES, clip) {
-                        clip.minimum_zw = (v3d->viewport.translate[2] -
-                                           v3d->viewport.scale[2]);
-                        clip.maximum_zw = (v3d->viewport.translate[2] +
-                                           v3d->viewport.scale[2]);
+                        float z1 = (v3d->viewport.translate[2] -
+                                    v3d->viewport.scale[2]);
+                        float z2 = (v3d->viewport.translate[2] +
+                                    v3d->viewport.scale[2]);
+                        clip.minimum_zw = MIN2(z1, z2);
+                        clip.maximum_zw = MAX2(z1, z2);
                 }
 
                 cl_emit(&job->bcl, VIEWPORT_OFFSET, vp) {