Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Side by Side Diff: src/gpu/batches/GrPathStencilSettings.h

Issue 1962243002: Separate user and raw stencil settings (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrPathStencilSettings_DEFINED 8 #ifndef GrPathStencilSettings_DEFINED
9 #define GrPathStencilSettings_DEFINED 9 #define GrPathStencilSettings_DEFINED
10 10
11 #include "GrUserStencilSettings.h"
12
11 //////////////////////////////////////////////////////////////////////////////// 13 ////////////////////////////////////////////////////////////////////////////////
12 // Stencil rules for paths 14 // Stencil rules for paths
13 15
14 ////// Even/Odd 16 ////// Even/Odd
15 17
16 static constexpr GrStencilSettings gEOStencilPass( 18 static constexpr GrUserStencilSettings gEOStencilPass(
17 kInvert_StencilOp, 19 GrUserStencilSettings::StaticInit<
18 kKeep_StencilOp, 20 0xffff,
19 kAlwaysIfInClip_StencilFunc, 21 GrUserStencilTest::kAlwaysIfInClip,
20 0xffff, 22 0xffff,
21 0xffff, 23 GrUserStencilOp::kInvert,
22 0xffff); 24 GrUserStencilOp::kKeep,
25 0xffff>()
26 );
23 27
24 // ok not to check clip b/c stencil pass only wrote inside clip 28 // ok not to check clip b/c stencil pass only wrote inside clip
25 static constexpr GrStencilSettings gEOColorPass( 29 static constexpr GrUserStencilSettings gEOColorPass(
26 kZero_StencilOp, 30 GrUserStencilSettings::StaticInit<
27 kZero_StencilOp, 31 0x0000,
28 kNotEqual_StencilFunc, 32 GrUserStencilTest::kNotEqual,
29 0xffff, 33 0xffff,
30 0x0000, 34 GrUserStencilOp::kZero,
31 0xffff); 35 GrUserStencilOp::kZero,
36 0xffff>()
37 );
32 38
33 // have to check clip b/c outside clip will always be zero. 39 // have to check clip b/c outside clip will always be zero.
34 static constexpr GrStencilSettings gInvEOColorPass( 40 static constexpr GrUserStencilSettings gInvEOColorPass(
35 kZero_StencilOp, 41 GrUserStencilSettings::StaticInit<
36 kZero_StencilOp, 42 0x0000,
37 kEqualIfInClip_StencilFunc, 43 GrUserStencilTest::kEqualIfInClip,
38 0xffff, 44 0xffff,
39 0x0000, 45 GrUserStencilOp::kZero,
40 0xffff); 46 GrUserStencilOp::kZero,
47 0xffff>()
48 );
41 49
42 ////// Winding 50 ////// Winding
43 51
44 // when we have separate stencil we increment front faces / decrement back faces 52 // when we have separate stencil we increment front faces / decrement back faces
45 // when we don't have wrap incr and decr we use the stencil test to simulate 53 // when we don't have wrap incr and decr we use the stencil test to simulate
46 // them. 54 // them.
47 55
48 static constexpr GrStencilSettings gWindStencilSeparateWithWrap( 56 static constexpr GrUserStencilSettings gWindStencilSeparateWithWrap(
49 kIncWrap_StencilOp, kDecWrap_StencilOp, 57 GrUserStencilSettings::StaticInitSeparate<
50 kKeep_StencilOp, kKeep_StencilOp, 58 0xffff, 0xffff,
51 kAlwaysIfInClip_StencilFunc, kAlwaysIfInClip_StencilFunc, 59 GrUserStencilTest::kAlwaysIfInClip, GrUserStencilTest::kAlwaysIfInCli p,
52 0xffff, 0xffff, 60 0xffff, 0xffff,
53 0xffff, 0xffff, 61 GrUserStencilOp::kIncWrap, GrUserStencilOp::kDecWrap,
54 0xffff, 0xffff); 62 GrUserStencilOp::kKeep, GrUserStencilOp::kKeep,
63 0xffff, 0xffff>()
64 );
55 65
56 // if inc'ing the max value, invert to make 0 66 // if inc'ing the max value, invert to make 0
57 // if dec'ing zero invert to make all ones. 67 // if dec'ing zero invert to make all ones.
58 // we can't avoid touching the stencil on both passing and 68 // we can't avoid touching the stencil on both passing and
59 // failing, so we can't resctrict ourselves to the clip. 69 // failing, so we can't resctrict ourselves to the clip.
60 static constexpr GrStencilSettings gWindStencilSeparateNoWrap( 70 static constexpr GrUserStencilSettings gWindStencilSeparateNoWrap(
61 kInvert_StencilOp, kInvert_StencilOp, 71 GrUserStencilSettings::StaticInitSeparate<
62 kIncClamp_StencilOp, kDecClamp_StencilOp, 72 0xffff, 0x0000,
63 kEqual_StencilFunc, kEqual_StencilFunc, 73 GrUserStencilTest::kEqual, GrUserStencilTest::kEqual,
64 0xffff, 0xffff, 74 0xffff, 0xffff,
65 0xffff, 0x0000, 75 GrUserStencilOp::kInvert, GrUserStencilOp::kInvert,
66 0xffff, 0xffff); 76 GrUserStencilOp::kIncMaybeClamp, GrUserStencilOp::kDecMaybeClamp,
77 0xffff, 0xffff>()
78 );
67 79
68 // When there are no separate faces we do two passes to setup the winding rule 80 // When there are no separate faces we do two passes to setup the winding rule
69 // stencil. First we draw the front faces and inc, then we draw the back faces 81 // stencil. First we draw the front faces and inc, then we draw the back faces
70 // and dec. These are same as the above two split into the incrementing and 82 // and dec. These are same as the above two split into the incrementing and
71 // decrementing passes. 83 // decrementing passes.
72 static constexpr GrStencilSettings gWindSingleStencilWithWrapInc( 84 static constexpr GrUserStencilSettings gWindSingleStencilWithWrapInc(
73 kIncWrap_StencilOp, 85 GrUserStencilSettings::StaticInit<
74 kKeep_StencilOp, 86 0xffff,
75 kAlwaysIfInClip_StencilFunc, 87 GrUserStencilTest::kAlwaysIfInClip,
76 0xffff, 88 0xffff,
77 0xffff, 89 GrUserStencilOp::kIncWrap,
78 0xffff); 90 GrUserStencilOp::kKeep,
91 0xffff>()
92 );
79 93
80 static constexpr GrStencilSettings gWindSingleStencilWithWrapDec( 94 static constexpr GrUserStencilSettings gWindSingleStencilWithWrapDec(
81 kDecWrap_StencilOp, 95 GrUserStencilSettings::StaticInit<
82 kKeep_StencilOp, 96 0xffff,
83 kAlwaysIfInClip_StencilFunc, 97 GrUserStencilTest::kAlwaysIfInClip,
84 0xffff, 98 0xffff,
85 0xffff, 99 GrUserStencilOp::kDecWrap,
86 0xffff); 100 GrUserStencilOp::kKeep,
101 0xffff>()
102 );
87 103
88 static constexpr GrStencilSettings gWindSingleStencilNoWrapInc( 104 static constexpr GrUserStencilSettings gWindSingleStencilNoWrapInc(
89 kInvert_StencilOp, 105 GrUserStencilSettings::StaticInit<
90 kIncClamp_StencilOp, 106 0xffff,
91 kEqual_StencilFunc, 107 GrUserStencilTest::kEqual,
92 0xffff, 108 0xffff,
93 0xffff, 109 GrUserStencilOp::kInvert,
94 0xffff); 110 GrUserStencilOp::kIncMaybeClamp,
111 0xffff>()
112 );
95 113
96 static constexpr GrStencilSettings gWindSingleStencilNoWrapDec( 114 static constexpr GrUserStencilSettings gWindSingleStencilNoWrapDec(
97 kInvert_StencilOp, 115 GrUserStencilSettings::StaticInit<
98 kDecClamp_StencilOp, 116 0x0000,
99 kEqual_StencilFunc, 117 GrUserStencilTest::kEqual,
100 0xffff, 118 0xffff,
101 0x0000, 119 GrUserStencilOp::kInvert,
102 0xffff); 120 GrUserStencilOp::kDecMaybeClamp,
121 0xffff>()
122 );
103 123
104 // Color passes are the same whether we use the two-sided stencil or two passes 124 // Color passes are the same whether we use the two-sided stencil or two passes
105 125
106 static constexpr GrStencilSettings gWindColorPass( 126 static constexpr GrUserStencilSettings gWindColorPass(
107 kZero_StencilOp, 127 GrUserStencilSettings::StaticInit<
108 kZero_StencilOp, 128 0x0000,
109 kNonZeroIfInClip_StencilFunc, 129 GrUserStencilTest::kLessIfInClip, // "0 < stencil" is equivalent to "0 ! = stencil".
110 0xffff, 130 0xffff,
111 0x0000, 131 GrUserStencilOp::kZero,
112 0xffff); 132 GrUserStencilOp::kZero,
133 0xffff>()
134 );
113 135
114 static constexpr GrStencilSettings gInvWindColorPass( 136 static constexpr GrUserStencilSettings gInvWindColorPass(
115 kZero_StencilOp, 137 GrUserStencilSettings::StaticInit<
116 kZero_StencilOp, 138 0x0000,
117 kEqualIfInClip_StencilFunc, 139 GrUserStencilTest::kEqualIfInClip,
118 0xffff, 140 0xffff,
119 0x0000, 141 GrUserStencilOp::kZero,
120 0xffff); 142 GrUserStencilOp::kZero,
143 0xffff>()
144 );
121 145
122 ////// Normal render to stencil 146 ////// Normal render to stencil
123 147
124 // Sometimes the default path renderer can draw a path directly to the stencil 148 // Sometimes the default path renderer can draw a path directly to the stencil
125 // buffer without having to first resolve the interior / exterior. 149 // buffer without having to first resolve the interior / exterior.
126 static constexpr GrStencilSettings gDirectToStencil( 150 static constexpr GrUserStencilSettings gDirectToStencil(
127 kZero_StencilOp, 151 GrUserStencilSettings::StaticInit<
128 kIncClamp_StencilOp, 152 0x0000,
129 kAlwaysIfInClip_StencilFunc, 153 GrUserStencilTest::kAlwaysIfInClip,
130 0xffff, 154 0xffff,
131 0x0000, 155 GrUserStencilOp::kZero,
132 0xffff); 156 GrUserStencilOp::kIncMaybeClamp,
157 0xffff>()
158 );
133 159
134 #endif 160 #endif
OLDNEW
« no previous file with comments | « src/gpu/batches/GrMSAAPathRenderer.cpp ('k') | src/gpu/batches/GrStencilAndCoverPathRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698