diff options
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_context.h')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index be59e3b0d16..550eefedcc2 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -1713,6 +1713,26 @@ bool brw_lower_texture_gradients(struct brw_context *brw, extern const char * const conditional_modifier[16]; extern const char *const pred_ctrl_align16[16]; +static inline bool +brw_depth_writes_enabled(const struct brw_context *brw) +{ + const struct gl_context *ctx = &brw->ctx; + + /* We consider depth writes disabled if the depth function is GL_EQUAL, + * because it would just overwrite the existing depth value with itself. + * + * These bonus depth writes not only use bandwidth, but they also can + * prevent early depth processing. For example, if the pixel shader + * discards, the hardware must invoke the to determine whether or not + * to do the depth write. If writes are disabled, we may still be able + * to do the depth test before the shader, and skip the shader execution. + * + * The Broadwell 3DSTATE_WM_DEPTH_STENCIL documentation also contains + * a programming note saying to disable depth writes for EQUAL. + */ + return ctx->Depth.Test && ctx->Depth.Mask && ctx->Depth.Func != GL_EQUAL; +} + void brw_emit_depthbuffer(struct brw_context *brw); |