/* * Copyright 2022 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef skgpu_graphite_render_CommonDepthStencilSettings_DEFINED #define skgpu_graphite_render_CommonDepthStencilSettings_DEFINED #include "src/gpu/graphite/DrawTypes.h" namespace skgpu::graphite { /** * DepthStencilSettings reusable by RenderSteps that can shade directly in a single pass, using * GREATER or GEQUAL depth tests depending on if they allow self-intersections. */ static constexpr DepthStencilSettings kDirectDepthGreaterPass = …; static constexpr DepthStencilSettings kDirectDepthGEqualPass = …; /** * "stencil" pass DepthStencilSettings reusable for RenderSteps following some form of * stencil-then-cover multi-pass algorithm. */ // Increments stencil value on clockwise triangles. Used for "winding" fill. constexpr DepthStencilSettings::Face kIncrementCW = …; // Decrements stencil value on counterclockwise triangles. Used for "winding" fill. constexpr DepthStencilSettings::Face kDecrementCCW = …; // Toggles the bottom stencil bit. Used for "even-odd" fill. constexpr DepthStencilSettings::Face kToggle = …; // Stencil settings to use for a standard Redbook "stencil" pass corresponding to a "winding" // fill rule (regular or inverse is selected by a follow-up pass). constexpr DepthStencilSettings kWindingStencilPass = …; // Stencil settings to use for a standard Redbook "stencil" pass corresponding to an "even-odd" // fill rule (regular or inverse is selected by a follow-up pass). constexpr DepthStencilSettings kEvenOddStencilPass = …; /** * "cover" pass DepthStencilSettings reusable for RenderSteps following some form of * stencil-then-cover multi-pass algorithm. */ // Resets non-zero bits to 0, passes when not zero. We set depthFail to kZero because if we // encounter that case, the kNotEqual=0 stencil test passed, so it does need to be set back to 0 // and the dsPass op won't be run. In practice, since the stencil steps will fail the same depth // test, the stencil value will likely not be non-zero, but best to be explicit. constexpr DepthStencilSettings::Face kPassNonZero = …; // Resets non-zero bits to 0, passes when zero. constexpr DepthStencilSettings::Face kPassZero = …; // Stencil settings to use for a standard Redbook "cover" pass for a regular fill, assuming that the // stencil buffer has been modified by either kWindingStencilPass or kEvenOddStencilPass. constexpr DepthStencilSettings kRegularCoverPass = …; // Stencil settings to use for a standard Redbook "cover" pass for inverse fills, assuming that the // stencil buffer has been modified by either kWindingStencilPass or kEvenOddStencilPass. constexpr DepthStencilSettings kInverseCoverPass = …; } // namespace skgpu::graphite #endif // skgpu_graphite_render_CommonDepthStencilSettings_DEFINED