OSDN Git Service

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 6ddb8f5..9e12361 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;