Dawn: fix single-sided stencil.
GrStencilSettings requires that single-sided stencil be accessed via
frontAndBack(), not via front() or back().
Change-Id: Ib35e6187bda05e21c164685f7b726ce4849979fe
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249416
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/src/gpu/dawn/GrDawnProgramBuilder.cpp b/src/gpu/dawn/GrDawnProgramBuilder.cpp
index a33e9bb..84e4067 100644
--- a/src/gpu/dawn/GrDawnProgramBuilder.cpp
+++ b/src/gpu/dawn/GrDawnProgramBuilder.cpp
@@ -241,14 +241,18 @@
dawn::DepthStencilStateDescriptor state;
state.format = depthStencilFormat;
if (!stencilSettings.isDisabled()) {
- const GrStencilSettings::Face& front = stencilSettings.front(origin);
- state.stencilReadMask = front.fTestMask;
- state.stencilWriteMask = front.fWriteMask;
- state.stencilFront = to_stencil_state_face(stencilSettings.front(origin));
if (stencilSettings.isTwoSided()) {
- state.stencilBack = to_stencil_state_face(stencilSettings.back(origin));
+ auto front = stencilSettings.front(origin);
+ auto back = stencilSettings.front(origin);
+ state.stencilFront = to_stencil_state_face(front);
+ state.stencilBack = to_stencil_state_face(back);
+ state.stencilReadMask = front.fTestMask;
+ state.stencilWriteMask = front.fWriteMask;
} else {
- state.stencilBack = state.stencilFront;
+ auto frontAndBack = stencilSettings.frontAndBack();
+ state.stencilBack = state.stencilFront = to_stencil_state_face(frontAndBack);
+ state.stencilReadMask = frontAndBack.fTestMask;
+ state.stencilWriteMask = frontAndBack.fWriteMask;
}
}
return state;