st/mesa: Only enable depth writes if the function isn't EQUAL.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 5 Jul 2018 09:55:57 +0000 (02:55 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 11 Jul 2018 18:23:20 +0000 (11:23 -0700)
If the depth function is EQUAL, then we'll only write the depth value
when it already matches what's in the buffer, which is pointless.
Skipping these writes can save bandwidth.

The state tracker can easily take care of this, so all drivers benefit.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_atom_depth.c

index 6ddb8f525cf4445541ef033d6118a15af0cf9737..9e12361f881903b19877c6e7fe0d2fed4b12d81a 100644 (file)
@@ -107,8 +107,9 @@ st_update_depth_stencil_alpha(struct st_context *st)
    if (ctx->DrawBuffer->Visual.depthBits > 0) {
       if (ctx->Depth.Test) {
          dsa->depth.enabled = 1;
-         dsa->depth.writemask = ctx->Depth.Mask;
          dsa->depth.func = st_compare_func_to_pipe(ctx->Depth.Func);
+         if (dsa->depth.func != PIPE_FUNC_EQUAL)
+            dsa->depth.writemask = ctx->Depth.Mask;
       }
       if (ctx->Depth.BoundsTest) {
          dsa->depth.bounds_test = 1;