v3d: Add support for the early_fragment_tests flag.
authorEric Anholt <eric@anholt.net>
Fri, 4 Jan 2019 21:33:35 +0000 (13:33 -0800)
committerEric Anholt <eric@anholt.net>
Mon, 14 Jan 2019 21:18:02 +0000 (13:18 -0800)
If this flag hasn't been set by the shader and it has some visible side
effects, then we need to disable EZ.

src/broadcom/compiler/vir.c

index 4e6149d11aa319abb38d57c43181bd2423d4c1cb..ae7b362f3ba598737b0e45bf0de5d28338b494ba 100644 (file)
@@ -781,6 +781,16 @@ v3d_fs_set_prog_data(struct v3d_compile *c,
         prog_data->discard = (c->s->info.fs.uses_discard ||
                               c->fs_key->sample_alpha_to_coverage);
         prog_data->uses_center_w = c->uses_center_w;
+
+        /* If the shader has some side effects and hasn't allowed early
+         * fragment tests, disable them.
+         */
+        if (!c->s->info.fs.early_fragment_tests &&
+            (c->s->info.num_images ||
+             c->s->info.num_ssbos ||
+             c->s->info.num_abos)) {
+                prog_data->discard = true;
+        }
 }
 
 static void