xref: /aosp_15_r20/external/deqp/framework/referencerenderer/rrRenderState.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _RRRENDERSTATE_HPP
2*35238bceSAndroid Build Coastguard Worker #define _RRRENDERSTATE_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program Reference Renderer
5*35238bceSAndroid Build Coastguard Worker  * -----------------------------------------------
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker  *
9*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker  *
15*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
20*35238bceSAndroid Build Coastguard Worker  *
21*35238bceSAndroid Build Coastguard Worker  *//*!
22*35238bceSAndroid Build Coastguard Worker  * \file
23*35238bceSAndroid Build Coastguard Worker  * \brief Reference renderer render state.
24*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker #include "rrDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "rrMultisamplePixelBufferAccess.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "tcuTexture.hpp"
29*35238bceSAndroid Build Coastguard Worker 
30*35238bceSAndroid Build Coastguard Worker namespace rr
31*35238bceSAndroid Build Coastguard Worker {
32*35238bceSAndroid Build Coastguard Worker 
33*35238bceSAndroid Build Coastguard Worker //! Horizontal fill rule
34*35238bceSAndroid Build Coastguard Worker enum HorizontalFill
35*35238bceSAndroid Build Coastguard Worker {
36*35238bceSAndroid Build Coastguard Worker     FILL_LEFT,
37*35238bceSAndroid Build Coastguard Worker     FILL_RIGHT
38*35238bceSAndroid Build Coastguard Worker };
39*35238bceSAndroid Build Coastguard Worker 
40*35238bceSAndroid Build Coastguard Worker //! Vertical fill rule
41*35238bceSAndroid Build Coastguard Worker enum VerticalFill
42*35238bceSAndroid Build Coastguard Worker {
43*35238bceSAndroid Build Coastguard Worker     FILL_TOP,
44*35238bceSAndroid Build Coastguard Worker     FILL_BOTTOM,
45*35238bceSAndroid Build Coastguard Worker };
46*35238bceSAndroid Build Coastguard Worker 
47*35238bceSAndroid Build Coastguard Worker //! Winding mode
48*35238bceSAndroid Build Coastguard Worker enum Winding
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker     WINDING_CCW = 0, //!< Counter-clockwise winding
51*35238bceSAndroid Build Coastguard Worker     WINDING_CW,      //!< Clockwise winding
52*35238bceSAndroid Build Coastguard Worker 
53*35238bceSAndroid Build Coastguard Worker     WINDING_LAST
54*35238bceSAndroid Build Coastguard Worker };
55*35238bceSAndroid Build Coastguard Worker 
56*35238bceSAndroid Build Coastguard Worker //! Triangle cull mode
57*35238bceSAndroid Build Coastguard Worker enum CullMode
58*35238bceSAndroid Build Coastguard Worker {
59*35238bceSAndroid Build Coastguard Worker     CULLMODE_NONE,
60*35238bceSAndroid Build Coastguard Worker     CULLMODE_BACK,
61*35238bceSAndroid Build Coastguard Worker     CULLMODE_FRONT,
62*35238bceSAndroid Build Coastguard Worker 
63*35238bceSAndroid Build Coastguard Worker     CULLMODE_LAST
64*35238bceSAndroid Build Coastguard Worker };
65*35238bceSAndroid Build Coastguard Worker 
66*35238bceSAndroid Build Coastguard Worker //! Viewport Orientation of renderer this will be compared against
67*35238bceSAndroid Build Coastguard Worker enum ViewportOrientation
68*35238bceSAndroid Build Coastguard Worker {
69*35238bceSAndroid Build Coastguard Worker     VIEWPORTORIENTATION_LOWER_LEFT = 0, //<! Corresponds to GL
70*35238bceSAndroid Build Coastguard Worker     VIEWPORTORIENTATION_UPPER_LEFT,     //<! Corresponds to Vulkan
71*35238bceSAndroid Build Coastguard Worker 
72*35238bceSAndroid Build Coastguard Worker     VIEWPORTORIENTATION_LAST
73*35238bceSAndroid Build Coastguard Worker };
74*35238bceSAndroid Build Coastguard Worker 
75*35238bceSAndroid Build Coastguard Worker struct RasterizationState
76*35238bceSAndroid Build Coastguard Worker {
RasterizationStaterr::RasterizationState77*35238bceSAndroid Build Coastguard Worker     RasterizationState(void)
78*35238bceSAndroid Build Coastguard Worker         : winding(WINDING_CCW)
79*35238bceSAndroid Build Coastguard Worker         , horizontalFill(FILL_LEFT)
80*35238bceSAndroid Build Coastguard Worker         , verticalFill(FILL_BOTTOM)
81*35238bceSAndroid Build Coastguard Worker         , viewportOrientation(VIEWPORTORIENTATION_LAST)
82*35238bceSAndroid Build Coastguard Worker     {
83*35238bceSAndroid Build Coastguard Worker     }
84*35238bceSAndroid Build Coastguard Worker 
85*35238bceSAndroid Build Coastguard Worker     Winding winding;
86*35238bceSAndroid Build Coastguard Worker     HorizontalFill horizontalFill;
87*35238bceSAndroid Build Coastguard Worker     VerticalFill verticalFill;
88*35238bceSAndroid Build Coastguard Worker     ViewportOrientation viewportOrientation;
89*35238bceSAndroid Build Coastguard Worker };
90*35238bceSAndroid Build Coastguard Worker 
91*35238bceSAndroid Build Coastguard Worker enum TestFunc
92*35238bceSAndroid Build Coastguard Worker {
93*35238bceSAndroid Build Coastguard Worker     TESTFUNC_NEVER = 0,
94*35238bceSAndroid Build Coastguard Worker     TESTFUNC_ALWAYS,
95*35238bceSAndroid Build Coastguard Worker     TESTFUNC_LESS,
96*35238bceSAndroid Build Coastguard Worker     TESTFUNC_LEQUAL,
97*35238bceSAndroid Build Coastguard Worker     TESTFUNC_GREATER,
98*35238bceSAndroid Build Coastguard Worker     TESTFUNC_GEQUAL,
99*35238bceSAndroid Build Coastguard Worker     TESTFUNC_EQUAL,
100*35238bceSAndroid Build Coastguard Worker     TESTFUNC_NOTEQUAL,
101*35238bceSAndroid Build Coastguard Worker 
102*35238bceSAndroid Build Coastguard Worker     TESTFUNC_LAST
103*35238bceSAndroid Build Coastguard Worker };
104*35238bceSAndroid Build Coastguard Worker 
105*35238bceSAndroid Build Coastguard Worker enum StencilOp
106*35238bceSAndroid Build Coastguard Worker {
107*35238bceSAndroid Build Coastguard Worker     STENCILOP_KEEP = 0,
108*35238bceSAndroid Build Coastguard Worker     STENCILOP_ZERO,
109*35238bceSAndroid Build Coastguard Worker     STENCILOP_REPLACE,
110*35238bceSAndroid Build Coastguard Worker     STENCILOP_INCR, //!< Increment with saturation.
111*35238bceSAndroid Build Coastguard Worker     STENCILOP_DECR, //!< Decrement with saturation.
112*35238bceSAndroid Build Coastguard Worker     STENCILOP_INCR_WRAP,
113*35238bceSAndroid Build Coastguard Worker     STENCILOP_DECR_WRAP,
114*35238bceSAndroid Build Coastguard Worker     STENCILOP_INVERT,
115*35238bceSAndroid Build Coastguard Worker 
116*35238bceSAndroid Build Coastguard Worker     STENCILOP_LAST
117*35238bceSAndroid Build Coastguard Worker };
118*35238bceSAndroid Build Coastguard Worker 
119*35238bceSAndroid Build Coastguard Worker enum BlendMode
120*35238bceSAndroid Build Coastguard Worker {
121*35238bceSAndroid Build Coastguard Worker     BLENDMODE_NONE = 0, //!< No blending.
122*35238bceSAndroid Build Coastguard Worker     BLENDMODE_STANDARD, //!< Standard blending.
123*35238bceSAndroid Build Coastguard Worker     BLENDMODE_ADVANCED, //!< Advanced blending mode, as defined in GL_KHR_blend_equation_advanced.
124*35238bceSAndroid Build Coastguard Worker 
125*35238bceSAndroid Build Coastguard Worker     BLENDMODE_LAST
126*35238bceSAndroid Build Coastguard Worker };
127*35238bceSAndroid Build Coastguard Worker 
128*35238bceSAndroid Build Coastguard Worker enum BlendEquation
129*35238bceSAndroid Build Coastguard Worker {
130*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADD = 0,
131*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_SUBTRACT,
132*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_REVERSE_SUBTRACT,
133*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_MIN,
134*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_MAX,
135*35238bceSAndroid Build Coastguard Worker 
136*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_LAST
137*35238bceSAndroid Build Coastguard Worker };
138*35238bceSAndroid Build Coastguard Worker 
139*35238bceSAndroid Build Coastguard Worker enum BlendEquationAdvanced
140*35238bceSAndroid Build Coastguard Worker {
141*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_MULTIPLY = 0,
142*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_SCREEN,
143*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_OVERLAY,
144*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_DARKEN,
145*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_LIGHTEN,
146*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_COLORDODGE,
147*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_COLORBURN,
148*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_HARDLIGHT,
149*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_SOFTLIGHT,
150*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_DIFFERENCE,
151*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_EXCLUSION,
152*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_HSL_HUE,
153*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_HSL_SATURATION,
154*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_HSL_COLOR,
155*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_HSL_LUMINOSITY,
156*35238bceSAndroid Build Coastguard Worker 
157*35238bceSAndroid Build Coastguard Worker     BLENDEQUATION_ADVANCED_LAST
158*35238bceSAndroid Build Coastguard Worker };
159*35238bceSAndroid Build Coastguard Worker 
160*35238bceSAndroid Build Coastguard Worker enum BlendFunc
161*35238bceSAndroid Build Coastguard Worker {
162*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_ZERO = 0,
163*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_ONE,
164*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_SRC_COLOR,
165*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_ONE_MINUS_SRC_COLOR,
166*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_DST_COLOR,
167*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_ONE_MINUS_DST_COLOR,
168*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_SRC_ALPHA,
169*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_ONE_MINUS_SRC_ALPHA,
170*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_DST_ALPHA,
171*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_ONE_MINUS_DST_ALPHA,
172*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_CONSTANT_COLOR,
173*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_ONE_MINUS_CONSTANT_COLOR,
174*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_CONSTANT_ALPHA,
175*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_ONE_MINUS_CONSTANT_ALPHA,
176*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_SRC_ALPHA_SATURATE,
177*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_SRC1_COLOR,
178*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_ONE_MINUS_SRC1_COLOR,
179*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_SRC1_ALPHA,
180*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_ONE_MINUS_SRC1_ALPHA,
181*35238bceSAndroid Build Coastguard Worker 
182*35238bceSAndroid Build Coastguard Worker     BLENDFUNC_LAST
183*35238bceSAndroid Build Coastguard Worker };
184*35238bceSAndroid Build Coastguard Worker 
185*35238bceSAndroid Build Coastguard Worker struct StencilState
186*35238bceSAndroid Build Coastguard Worker {
187*35238bceSAndroid Build Coastguard Worker     TestFunc func;
188*35238bceSAndroid Build Coastguard Worker     int ref;
189*35238bceSAndroid Build Coastguard Worker     uint32_t compMask;
190*35238bceSAndroid Build Coastguard Worker     StencilOp sFail;
191*35238bceSAndroid Build Coastguard Worker     StencilOp dpFail;
192*35238bceSAndroid Build Coastguard Worker     StencilOp dpPass;
193*35238bceSAndroid Build Coastguard Worker     uint32_t writeMask;
194*35238bceSAndroid Build Coastguard Worker 
StencilStaterr::StencilState195*35238bceSAndroid Build Coastguard Worker     StencilState(void)
196*35238bceSAndroid Build Coastguard Worker         : func(TESTFUNC_ALWAYS)
197*35238bceSAndroid Build Coastguard Worker         , ref(0)
198*35238bceSAndroid Build Coastguard Worker         , compMask(~0U)
199*35238bceSAndroid Build Coastguard Worker         , sFail(STENCILOP_KEEP)
200*35238bceSAndroid Build Coastguard Worker         , dpFail(STENCILOP_KEEP)
201*35238bceSAndroid Build Coastguard Worker         , dpPass(STENCILOP_KEEP)
202*35238bceSAndroid Build Coastguard Worker         , writeMask(~0U)
203*35238bceSAndroid Build Coastguard Worker     {
204*35238bceSAndroid Build Coastguard Worker     }
205*35238bceSAndroid Build Coastguard Worker };
206*35238bceSAndroid Build Coastguard Worker 
207*35238bceSAndroid Build Coastguard Worker struct BlendState
208*35238bceSAndroid Build Coastguard Worker {
209*35238bceSAndroid Build Coastguard Worker     BlendEquation equation;
210*35238bceSAndroid Build Coastguard Worker     BlendFunc srcFunc;
211*35238bceSAndroid Build Coastguard Worker     BlendFunc dstFunc;
212*35238bceSAndroid Build Coastguard Worker 
BlendStaterr::BlendState213*35238bceSAndroid Build Coastguard Worker     BlendState(void) : equation(BLENDEQUATION_ADD), srcFunc(BLENDFUNC_ONE), dstFunc(BLENDFUNC_ZERO)
214*35238bceSAndroid Build Coastguard Worker     {
215*35238bceSAndroid Build Coastguard Worker     }
216*35238bceSAndroid Build Coastguard Worker };
217*35238bceSAndroid Build Coastguard Worker 
218*35238bceSAndroid Build Coastguard Worker struct WindowRectangle
219*35238bceSAndroid Build Coastguard Worker {
220*35238bceSAndroid Build Coastguard Worker     int left;
221*35238bceSAndroid Build Coastguard Worker     int bottom;
222*35238bceSAndroid Build Coastguard Worker     int width;
223*35238bceSAndroid Build Coastguard Worker     int height;
224*35238bceSAndroid Build Coastguard Worker 
WindowRectanglerr::WindowRectangle225*35238bceSAndroid Build Coastguard Worker     WindowRectangle(int left_, int bottom_, int width_, int height_)
226*35238bceSAndroid Build Coastguard Worker         : left(left_)
227*35238bceSAndroid Build Coastguard Worker         , bottom(bottom_)
228*35238bceSAndroid Build Coastguard Worker         , width(width_)
229*35238bceSAndroid Build Coastguard Worker         , height(height_)
230*35238bceSAndroid Build Coastguard Worker     {
231*35238bceSAndroid Build Coastguard Worker     }
232*35238bceSAndroid Build Coastguard Worker };
233*35238bceSAndroid Build Coastguard Worker 
234*35238bceSAndroid Build Coastguard Worker struct FragmentOperationState
235*35238bceSAndroid Build Coastguard Worker {
236*35238bceSAndroid Build Coastguard Worker     // Variables corresponding to GL state variables.
237*35238bceSAndroid Build Coastguard Worker 
238*35238bceSAndroid Build Coastguard Worker     bool scissorTestEnabled;
239*35238bceSAndroid Build Coastguard Worker     WindowRectangle scissorRectangle;
240*35238bceSAndroid Build Coastguard Worker 
241*35238bceSAndroid Build Coastguard Worker     bool stencilTestEnabled;
242*35238bceSAndroid Build Coastguard Worker     StencilState stencilStates[2]; //!< Indexed with FACETYPE_FRONT and FACETYPE_BACK.
243*35238bceSAndroid Build Coastguard Worker 
244*35238bceSAndroid Build Coastguard Worker     bool depthTestEnabled;
245*35238bceSAndroid Build Coastguard Worker     TestFunc depthFunc;
246*35238bceSAndroid Build Coastguard Worker     bool depthMask;
247*35238bceSAndroid Build Coastguard Worker 
248*35238bceSAndroid Build Coastguard Worker     bool depthBoundsTestEnabled;
249*35238bceSAndroid Build Coastguard Worker     float minDepthBound;
250*35238bceSAndroid Build Coastguard Worker     float maxDepthBound;
251*35238bceSAndroid Build Coastguard Worker 
252*35238bceSAndroid Build Coastguard Worker     BlendMode blendMode;
253*35238bceSAndroid Build Coastguard Worker 
254*35238bceSAndroid Build Coastguard Worker     // Standard blending state
255*35238bceSAndroid Build Coastguard Worker     BlendState blendRGBState;
256*35238bceSAndroid Build Coastguard Worker     BlendState blendAState;
257*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 blendColor; //!< Components should be in range [0, 1].
258*35238bceSAndroid Build Coastguard Worker 
259*35238bceSAndroid Build Coastguard Worker     BlendEquationAdvanced blendEquationAdvaced;
260*35238bceSAndroid Build Coastguard Worker 
261*35238bceSAndroid Build Coastguard Worker     bool sRGBEnabled;
262*35238bceSAndroid Build Coastguard Worker 
263*35238bceSAndroid Build Coastguard Worker     bool depthClampEnabled;
264*35238bceSAndroid Build Coastguard Worker 
265*35238bceSAndroid Build Coastguard Worker     bool polygonOffsetEnabled;
266*35238bceSAndroid Build Coastguard Worker     float polygonOffsetFactor;
267*35238bceSAndroid Build Coastguard Worker     float polygonOffsetUnits;
268*35238bceSAndroid Build Coastguard Worker 
269*35238bceSAndroid Build Coastguard Worker     tcu::BVec4 colorMask;
270*35238bceSAndroid Build Coastguard Worker 
271*35238bceSAndroid Build Coastguard Worker     // Variables not corresponding to configurable GL state, but other GL variables.
272*35238bceSAndroid Build Coastguard Worker 
273*35238bceSAndroid Build Coastguard Worker     int numStencilBits;
274*35238bceSAndroid Build Coastguard Worker 
FragmentOperationStaterr::FragmentOperationState275*35238bceSAndroid Build Coastguard Worker     FragmentOperationState(void)
276*35238bceSAndroid Build Coastguard Worker         : scissorTestEnabled(false)
277*35238bceSAndroid Build Coastguard Worker         , scissorRectangle(0, 0, 1, 1)
278*35238bceSAndroid Build Coastguard Worker 
279*35238bceSAndroid Build Coastguard Worker         , stencilTestEnabled(false)
280*35238bceSAndroid Build Coastguard Worker         // \note stencilStates[] members get default-constructed.
281*35238bceSAndroid Build Coastguard Worker 
282*35238bceSAndroid Build Coastguard Worker         , depthTestEnabled(false)
283*35238bceSAndroid Build Coastguard Worker         , depthFunc(TESTFUNC_LESS)
284*35238bceSAndroid Build Coastguard Worker         , depthMask(true)
285*35238bceSAndroid Build Coastguard Worker 
286*35238bceSAndroid Build Coastguard Worker         , depthBoundsTestEnabled(false)
287*35238bceSAndroid Build Coastguard Worker         , minDepthBound(0.0f)
288*35238bceSAndroid Build Coastguard Worker         , maxDepthBound(1.0f)
289*35238bceSAndroid Build Coastguard Worker 
290*35238bceSAndroid Build Coastguard Worker         , blendMode(BLENDMODE_NONE)
291*35238bceSAndroid Build Coastguard Worker         , blendRGBState()
292*35238bceSAndroid Build Coastguard Worker         , blendAState()
293*35238bceSAndroid Build Coastguard Worker         , blendColor(0.0f)
294*35238bceSAndroid Build Coastguard Worker         , blendEquationAdvaced(BLENDEQUATION_ADVANCED_LAST)
295*35238bceSAndroid Build Coastguard Worker 
296*35238bceSAndroid Build Coastguard Worker         , sRGBEnabled(true)
297*35238bceSAndroid Build Coastguard Worker 
298*35238bceSAndroid Build Coastguard Worker         , depthClampEnabled(false)
299*35238bceSAndroid Build Coastguard Worker 
300*35238bceSAndroid Build Coastguard Worker         , polygonOffsetEnabled(false)
301*35238bceSAndroid Build Coastguard Worker         , polygonOffsetFactor(0.0f)
302*35238bceSAndroid Build Coastguard Worker         , polygonOffsetUnits(0.0f)
303*35238bceSAndroid Build Coastguard Worker 
304*35238bceSAndroid Build Coastguard Worker         , colorMask(true)
305*35238bceSAndroid Build Coastguard Worker 
306*35238bceSAndroid Build Coastguard Worker         , numStencilBits(8)
307*35238bceSAndroid Build Coastguard Worker     {
308*35238bceSAndroid Build Coastguard Worker     }
309*35238bceSAndroid Build Coastguard Worker };
310*35238bceSAndroid Build Coastguard Worker 
311*35238bceSAndroid Build Coastguard Worker struct PointState
312*35238bceSAndroid Build Coastguard Worker {
313*35238bceSAndroid Build Coastguard Worker     float pointSize;
314*35238bceSAndroid Build Coastguard Worker 
PointStaterr::PointState315*35238bceSAndroid Build Coastguard Worker     PointState(void) : pointSize(1.0f)
316*35238bceSAndroid Build Coastguard Worker     {
317*35238bceSAndroid Build Coastguard Worker     }
318*35238bceSAndroid Build Coastguard Worker };
319*35238bceSAndroid Build Coastguard Worker 
320*35238bceSAndroid Build Coastguard Worker struct LineState
321*35238bceSAndroid Build Coastguard Worker {
322*35238bceSAndroid Build Coastguard Worker     float lineWidth;
323*35238bceSAndroid Build Coastguard Worker 
LineStaterr::LineState324*35238bceSAndroid Build Coastguard Worker     LineState(void) : lineWidth(1.0f)
325*35238bceSAndroid Build Coastguard Worker     {
326*35238bceSAndroid Build Coastguard Worker     }
327*35238bceSAndroid Build Coastguard Worker };
328*35238bceSAndroid Build Coastguard Worker 
329*35238bceSAndroid Build Coastguard Worker struct ViewportState
330*35238bceSAndroid Build Coastguard Worker {
331*35238bceSAndroid Build Coastguard Worker     WindowRectangle rect;
332*35238bceSAndroid Build Coastguard Worker     float zn;
333*35238bceSAndroid Build Coastguard Worker     float zf;
334*35238bceSAndroid Build Coastguard Worker 
ViewportStaterr::ViewportState335*35238bceSAndroid Build Coastguard Worker     explicit ViewportState(const WindowRectangle &rect_) : rect(rect_), zn(0.0f), zf(1.0f)
336*35238bceSAndroid Build Coastguard Worker     {
337*35238bceSAndroid Build Coastguard Worker     }
338*35238bceSAndroid Build Coastguard Worker 
ViewportStaterr::ViewportState339*35238bceSAndroid Build Coastguard Worker     explicit ViewportState(const rr::MultisampleConstPixelBufferAccess &multisampleBuffer)
340*35238bceSAndroid Build Coastguard Worker         : rect(0, 0, multisampleBuffer.raw().getHeight(), multisampleBuffer.raw().getDepth())
341*35238bceSAndroid Build Coastguard Worker         , zn(0.0f)
342*35238bceSAndroid Build Coastguard Worker         , zf(1.0f)
343*35238bceSAndroid Build Coastguard Worker     {
344*35238bceSAndroid Build Coastguard Worker     }
345*35238bceSAndroid Build Coastguard Worker };
346*35238bceSAndroid Build Coastguard Worker 
347*35238bceSAndroid Build Coastguard Worker struct RestartState
348*35238bceSAndroid Build Coastguard Worker {
349*35238bceSAndroid Build Coastguard Worker     bool enabled;
350*35238bceSAndroid Build Coastguard Worker     uint32_t restartIndex;
351*35238bceSAndroid Build Coastguard Worker 
RestartStaterr::RestartState352*35238bceSAndroid Build Coastguard Worker     RestartState(void) : enabled(false), restartIndex(0xFFFFFFFFul)
353*35238bceSAndroid Build Coastguard Worker     {
354*35238bceSAndroid Build Coastguard Worker     }
355*35238bceSAndroid Build Coastguard Worker };
356*35238bceSAndroid Build Coastguard Worker 
357*35238bceSAndroid Build Coastguard Worker //! Rasterizer configuration
358*35238bceSAndroid Build Coastguard Worker struct RenderState
359*35238bceSAndroid Build Coastguard Worker {
RenderStaterr::RenderState360*35238bceSAndroid Build Coastguard Worker     explicit RenderState(const ViewportState &viewport_, const int subpixelBits_,
361*35238bceSAndroid Build Coastguard Worker                          ViewportOrientation viewportOrientation_ = VIEWPORTORIENTATION_LOWER_LEFT)
362*35238bceSAndroid Build Coastguard Worker         : cullMode(CULLMODE_NONE)
363*35238bceSAndroid Build Coastguard Worker         , provokingVertexConvention(PROVOKINGVERTEX_LAST)
364*35238bceSAndroid Build Coastguard Worker         , viewport(viewport_)
365*35238bceSAndroid Build Coastguard Worker         , viewportOrientation(viewportOrientation_)
366*35238bceSAndroid Build Coastguard Worker         , subpixelBits(subpixelBits_)
367*35238bceSAndroid Build Coastguard Worker     {
368*35238bceSAndroid Build Coastguard Worker         rasterization.viewportOrientation = viewportOrientation;
369*35238bceSAndroid Build Coastguard Worker     }
370*35238bceSAndroid Build Coastguard Worker 
371*35238bceSAndroid Build Coastguard Worker     enum
372*35238bceSAndroid Build Coastguard Worker     {
373*35238bceSAndroid Build Coastguard Worker         DEFAULT_SUBPIXEL_BITS = 8
374*35238bceSAndroid Build Coastguard Worker     };
375*35238bceSAndroid Build Coastguard Worker 
376*35238bceSAndroid Build Coastguard Worker     CullMode cullMode;
377*35238bceSAndroid Build Coastguard Worker     ProvokingVertex provokingVertexConvention;
378*35238bceSAndroid Build Coastguard Worker     RasterizationState rasterization;
379*35238bceSAndroid Build Coastguard Worker     FragmentOperationState fragOps;
380*35238bceSAndroid Build Coastguard Worker     PointState point;
381*35238bceSAndroid Build Coastguard Worker     ViewportState viewport;
382*35238bceSAndroid Build Coastguard Worker     LineState line;
383*35238bceSAndroid Build Coastguard Worker     RestartState restart;
384*35238bceSAndroid Build Coastguard Worker     ViewportOrientation viewportOrientation;
385*35238bceSAndroid Build Coastguard Worker     const int subpixelBits;
386*35238bceSAndroid Build Coastguard Worker };
387*35238bceSAndroid Build Coastguard Worker 
388*35238bceSAndroid Build Coastguard Worker } // namespace rr
389*35238bceSAndroid Build Coastguard Worker 
390*35238bceSAndroid Build Coastguard Worker #endif // _RRRENDERSTATE_HPP
391