diff options
author | Eric Anholt <[email protected]> | 2017-09-28 10:37:02 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2017-10-10 11:42:05 -0700 |
commit | 732a3a72cb8b5c78e95eee47572701b3f6055c19 (patch) | |
tree | 5953561d0a1a8843e94a020fd87ecc4cf96bf895 /src/broadcom/compiler/nir_to_vir.c | |
parent | 4c4fbab345c164284e62e5e2587382785ade1750 (diff) |
broadcom/compiler: Set up passthrough Z when doing FS discards.
In order to keep early-Z from writing early in a discard shader, you need
to set the "modifies Z" bit in the shader state (which the new
prog_data.discards will indicate). Then, in the shader we do a TLB write
to make Z passthrough happen (the QPU result is ignored, so we use a NULL
source).
Diffstat (limited to 'src/broadcom/compiler/nir_to_vir.c')
-rw-r--r-- | src/broadcom/compiler/nir_to_vir.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index 1c9a9a9746c..89d18f85061 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -1038,6 +1038,17 @@ emit_frag_end(struct v3d_compile *c) TLB_TYPE_DEPTH | TLB_DEPTH_TYPE_PER_PIXEL | 0xffffff00); + } else if (c->s->info.fs.uses_discard) { + struct qinst *inst = vir_MOV_dest(c, + vir_reg(QFILE_TLBU, 0), + vir_reg(QFILE_NULL, 0)); + vir_set_cond(inst, discard_cond); + + inst->src[vir_get_implicit_uniform_src(inst)] = + vir_uniform_ui(c, + TLB_TYPE_DEPTH | + TLB_DEPTH_TYPE_INVARIANT | + 0xffffff00); } /* XXX: Performance improvement: Merge Z write and color writes TLB |