Module: Mesa
Branch: master
Commit: cbef2dc7d3ca60df2307d04032395b2beeece2ec
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cbef2dc7d3ca60df2307d04032395b2beeece2ec

Author: Erik Faye-Lund <[email protected]>
Date:   Thu Sep 24 22:25:28 2020 +0200

zink: only set stencil-ref for back if two-sided

Otherwise, we want to set both front and back to the same state.

Reviewed-By: Mike Blumenkrantz <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6853>

---

 src/gallium/drivers/zink/zink_draw.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_draw.c 
b/src/gallium/drivers/zink/zink_draw.c
index 36be5cc5dde..2b6b9fc31d9 100644
--- a/src/gallium/drivers/zink/zink_draw.c
+++ b/src/gallium/drivers/zink/zink_draw.c
@@ -210,6 +210,7 @@ zink_draw_vbo(struct pipe_context *pctx,
    struct zink_context *ctx = zink_context(pctx);
    struct zink_screen *screen = zink_screen(pctx->screen);
    struct zink_rasterizer_state *rast_state = ctx->rast_state;
+   struct zink_depth_stencil_alpha_state *dsa_state = ctx->dsa_state;
    struct zink_so_target *so_target = 
zink_so_target(dinfo->count_from_stream_output);
    VkBuffer counter_buffers[PIPE_MAX_SO_OUTPUTS];
    VkDeviceSize counter_buffer_offsets[PIPE_MAX_SO_OUTPUTS] = {};
@@ -413,8 +414,17 @@ zink_draw_vbo(struct pipe_context *pctx,
          debug_printf("BUG: wide lines not supported, needs fallback!");
    }
 
-   vkCmdSetStencilReference(batch->cmdbuf, VK_STENCIL_FACE_FRONT_BIT, 
ctx->stencil_ref.ref_value[0]);
-   vkCmdSetStencilReference(batch->cmdbuf, VK_STENCIL_FACE_BACK_BIT, 
ctx->stencil_ref.ref_value[1]);
+   if (dsa_state->base.stencil[0].enabled) {
+      if (dsa_state->base.stencil[1].enabled) {
+         vkCmdSetStencilReference(batch->cmdbuf, VK_STENCIL_FACE_FRONT_BIT,
+                                  ctx->stencil_ref.ref_value[0]);
+         vkCmdSetStencilReference(batch->cmdbuf, VK_STENCIL_FACE_BACK_BIT,
+                                  ctx->stencil_ref.ref_value[1]);
+      } else
+         vkCmdSetStencilReference(batch->cmdbuf,
+                                  VK_STENCIL_FACE_FRONT_AND_BACK,
+                                  ctx->stencil_ref.ref_value[0]);
+   }
 
    if (depth_bias)
       vkCmdSetDepthBias(batch->cmdbuf, rast_state->offset_units, 
rast_state->offset_clamp, rast_state->offset_scale);

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to