diff options
author | Eric Anholt <[email protected]> | 2019-02-12 14:39:40 -0800 |
---|---|---|
committer | Dylan Baker <[email protected]> | 2019-02-19 07:07:38 -0800 |
commit | ba24ca67f6d5532037c6c4a4528cf22a05872109 (patch) | |
tree | 47a49014115bd83398e413e5911fb1cd43434070 /src/broadcom | |
parent | 110500cc8ab5dfc2b0d5c464155f85b1bccba779 (diff) |
v3d: Use the early_fragment_tests flag for the shader's disable-EZ field.
Apparently we need disable-EZ flagged, not just "does Z writes".
Fixes
dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_depth_fbo
on 7278, even though it passed in simulation.
Signed-off-by: Eric Anholt <[email protected]>
Fixes: 051a41d3d56e ("v3d: Add support for the early_fragment_tests flag.")
(cherry picked from commit cd5e0b272919a654079620adecd2abe24ff51233)
Diffstat (limited to 'src/broadcom')
-rw-r--r-- | src/broadcom/compiler/nir_to_vir.c | 3 | ||||
-rw-r--r-- | src/broadcom/compiler/v3d_compiler.h | 3 | ||||
-rw-r--r-- | src/broadcom/compiler/vir.c | 25 |
3 files changed, 16 insertions, 15 deletions
diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index a3ff2b0e8b4..a6d3cad21a5 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -1158,7 +1158,9 @@ emit_frag_end(struct v3d_compile *c) inst->src[vir_get_implicit_uniform_src(inst)] = vir_uniform_ui(c, tlb_specifier | 0xffffff00); + c->writes_z = true; } else if (c->s->info.fs.uses_discard || + !c->s->info.fs.early_fragment_tests || c->fs_key->sample_alpha_to_coverage || !has_any_tlb_color_write) { /* Emit passthrough Z if it needed to be delayed until shader @@ -1188,6 +1190,7 @@ emit_frag_end(struct v3d_compile *c) inst->src[vir_get_implicit_uniform_src(inst)] = vir_uniform_ui(c, tlb_specifier | 0xffffff00); + c->writes_z = true; } /* XXX: Performance improvement: Merge Z write and color writes TLB diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h index 127b04136d1..3f811f2b808 100644 --- a/src/broadcom/compiler/v3d_compiler.h +++ b/src/broadcom/compiler/v3d_compiler.h @@ -519,6 +519,7 @@ struct v3d_compile { uint32_t centroid_flags[BITSET_WORDS(V3D_MAX_FS_INPUTS)]; bool uses_center_w; + bool writes_z; struct v3d_ubo_range *ubo_ranges; bool *ubo_range_used; @@ -716,7 +717,7 @@ struct v3d_fs_prog_data { uint32_t centroid_flags[((V3D_MAX_FS_INPUTS - 1) / 24) + 1]; bool writes_z; - bool discard; + bool disable_ez; bool uses_center_w; }; diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index 10105fbd861..20f7004149c 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -777,21 +777,9 @@ v3d_fs_set_prog_data(struct v3d_compile *c, struct v3d_fs_prog_data *prog_data) { v3d_set_fs_prog_data_inputs(c, prog_data); - prog_data->writes_z = (c->s->info.outputs_written & - (1 << FRAG_RESULT_DEPTH)); - prog_data->discard = (c->s->info.fs.uses_discard || - c->fs_key->sample_alpha_to_coverage); + prog_data->writes_z = c->writes_z; + prog_data->disable_ez = !c->s->info.fs.early_fragment_tests; 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 @@ -888,6 +876,15 @@ v3d_nir_lower_fs_early(struct v3d_compile *c) { if (c->fs_key->int_color_rb || c->fs_key->uint_color_rb) v3d_fixup_fs_output_types(c); + + /* If the shader has no non-TLB side effects, we can promote it to + * enabling early_fragment_tests even if the user didn't. + */ + if (!(c->s->info.num_images || + c->s->info.num_ssbos || + c->s->info.num_abos)) { + c->s->info.fs.early_fragment_tests = true; + } } static void |