vc4: Add support for enabling early Z discards.
This is the same basic logic from the original Broadcom driver.
This commit is contained in:
parent
c6e8d2c659
commit
3f6b008168
1 changed files with 18 additions and 0 deletions
|
|
@ -186,12 +186,30 @@ vc4_create_depth_stencil_alpha_state(struct pipe_context *pctx,
|
|||
|
||||
so->base = *cso;
|
||||
|
||||
/* We always keep the early Z state correct, since a later state using
|
||||
* early Z may want it.
|
||||
*/
|
||||
so->config_bits[2] |= VC4_CONFIG_BITS_EARLY_Z_UPDATE;
|
||||
|
||||
if (cso->depth.enabled) {
|
||||
if (cso->depth.writemask) {
|
||||
so->config_bits[1] |= VC4_CONFIG_BITS_Z_UPDATE;
|
||||
}
|
||||
so->config_bits[1] |= (cso->depth.func <<
|
||||
VC4_CONFIG_BITS_DEPTH_FUNC_SHIFT);
|
||||
|
||||
/* We only handle early Z in the < direction because otherwise
|
||||
* we'd have to runtime guess which direction to set in the
|
||||
* render config.
|
||||
*/
|
||||
if ((cso->depth.func == PIPE_FUNC_LESS ||
|
||||
cso->depth.func == PIPE_FUNC_LEQUAL) &&
|
||||
(!cso->stencil[0].enabled ||
|
||||
(cso->stencil[0].zfail_op == PIPE_STENCIL_OP_KEEP &&
|
||||
(!cso->stencil[1].enabled ||
|
||||
cso->stencil[1].zfail_op == PIPE_STENCIL_OP_KEEP)))) {
|
||||
so->config_bits[2] |= VC4_CONFIG_BITS_EARLY_Z;
|
||||
}
|
||||
} else {
|
||||
so->config_bits[1] |= (PIPE_FUNC_ALWAYS <<
|
||||
VC4_CONFIG_BITS_DEPTH_FUNC_SHIFT);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue