diff options
author | Jonathan Marek <jonathan@marek.ca> | 2018-11-23 10:58:11 -0500 |
---|---|---|
committer | Rob Clark <robdclark@gmail.com> | 2019-01-28 13:04:41 -0500 |
commit | 7c930d99adfa3537b1dce987178544e1ce5eedf3 (patch) | |
tree | bfc46dd36738b5dab9e0ca2d9c31f8214d00fba4 /src/gallium/drivers/freedreno/a2xx/fd2_emit.c | |
parent | 32b1d2d716ccc85c119e7a46008cdfd6450220e1 (diff) |
freedreno: a2xx: enable early-Z testing
Enable earlyZ when alpha test is disabled.
Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Diffstat (limited to 'src/gallium/drivers/freedreno/a2xx/fd2_emit.c')
-rw-r--r-- | src/gallium/drivers/freedreno/a2xx/fd2_emit.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_emit.c b/src/gallium/drivers/freedreno/a2xx/fd2_emit.c index 9628f267365..e98f86a8257 100644 --- a/src/gallium/drivers/freedreno/a2xx/fd2_emit.c +++ b/src/gallium/drivers/freedreno/a2xx/fd2_emit.c @@ -190,6 +190,7 @@ fd2_emit_state(struct fd_context *ctx, const enum fd_dirty_3d_state dirty) { struct fd2_blend_stateobj *blend = fd2_blend_stateobj(ctx->blend); struct fd2_zsa_stateobj *zsa = fd2_zsa_stateobj(ctx->zsa); + struct fd2_shader_stateobj *fp = ctx->prog.fp; struct fd_ringbuffer *ring = ctx->batch->draw; /* NOTE: we probably want to eventually refactor this so each state @@ -205,12 +206,16 @@ fd2_emit_state(struct fd_context *ctx, const enum fd_dirty_3d_state dirty) OUT_RING(ring, ctx->sample_mask); } - if (dirty & (FD_DIRTY_ZSA | FD_DIRTY_STENCIL_REF)) { + if (dirty & (FD_DIRTY_ZSA | FD_DIRTY_STENCIL_REF | FD_DIRTY_PROG)) { struct pipe_stencil_ref *sr = &ctx->stencil_ref; + uint32_t val = zsa->rb_depthcontrol; + + if (fp->has_kill) + val &= ~A2XX_RB_DEPTHCONTROL_EARLY_Z_ENABLE; OUT_PKT3(ring, CP_SET_CONSTANT, 2); OUT_RING(ring, CP_REG(REG_A2XX_RB_DEPTHCONTROL)); - OUT_RING(ring, zsa->rb_depthcontrol); + OUT_RING(ring, val); OUT_PKT3(ring, CP_SET_CONSTANT, 4); OUT_RING(ring, CP_REG(REG_A2XX_RB_STENCILREFMASK_BF)); |