xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/gl/StateManagerGL.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2015 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker // StateManagerGL.h: Defines a class for caching applied OpenGL state
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_GL_STATEMANAGERGL_H_
10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_GL_STATEMANAGERGL_H_
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include "common/debug.h"
13*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/State.h"
15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/gl/ProgramExecutableGL.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/gl/functionsgl_typedefs.h"
18*8975f5c5SAndroid Build Coastguard Worker #include "platform/autogen/FeaturesGL_autogen.h"
19*8975f5c5SAndroid Build Coastguard Worker 
20*8975f5c5SAndroid Build Coastguard Worker #include <array>
21*8975f5c5SAndroid Build Coastguard Worker #include <map>
22*8975f5c5SAndroid Build Coastguard Worker 
23*8975f5c5SAndroid Build Coastguard Worker namespace gl
24*8975f5c5SAndroid Build Coastguard Worker {
25*8975f5c5SAndroid Build Coastguard Worker struct Caps;
26*8975f5c5SAndroid Build Coastguard Worker class FramebufferState;
27*8975f5c5SAndroid Build Coastguard Worker class State;
28*8975f5c5SAndroid Build Coastguard Worker }  // namespace gl
29*8975f5c5SAndroid Build Coastguard Worker 
30*8975f5c5SAndroid Build Coastguard Worker namespace rx
31*8975f5c5SAndroid Build Coastguard Worker {
32*8975f5c5SAndroid Build Coastguard Worker 
33*8975f5c5SAndroid Build Coastguard Worker class FramebufferGL;
34*8975f5c5SAndroid Build Coastguard Worker class FunctionsGL;
35*8975f5c5SAndroid Build Coastguard Worker class TransformFeedbackGL;
36*8975f5c5SAndroid Build Coastguard Worker class VertexArrayGL;
37*8975f5c5SAndroid Build Coastguard Worker class QueryGL;
38*8975f5c5SAndroid Build Coastguard Worker 
39*8975f5c5SAndroid Build Coastguard Worker struct ExternalContextVertexAttribute
40*8975f5c5SAndroid Build Coastguard Worker {
41*8975f5c5SAndroid Build Coastguard Worker     bool enabled;
42*8975f5c5SAndroid Build Coastguard Worker     const angle::Format *format;
43*8975f5c5SAndroid Build Coastguard Worker     GLuint stride;
44*8975f5c5SAndroid Build Coastguard Worker     GLvoid *pointer;
45*8975f5c5SAndroid Build Coastguard Worker     GLuint buffer;
46*8975f5c5SAndroid Build Coastguard Worker     gl::VertexAttribCurrentValueData currentData;
47*8975f5c5SAndroid Build Coastguard Worker };
48*8975f5c5SAndroid Build Coastguard Worker 
49*8975f5c5SAndroid Build Coastguard Worker // TODO(penghuang): use gl::State?
50*8975f5c5SAndroid Build Coastguard Worker struct ExternalContextState
51*8975f5c5SAndroid Build Coastguard Worker {
52*8975f5c5SAndroid Build Coastguard Worker     GLint packAlignment;
53*8975f5c5SAndroid Build Coastguard Worker     GLint unpackAlignment;
54*8975f5c5SAndroid Build Coastguard Worker 
55*8975f5c5SAndroid Build Coastguard Worker     GLenum vertexArrayBufferBinding;
56*8975f5c5SAndroid Build Coastguard Worker     GLenum elementArrayBufferBinding;
57*8975f5c5SAndroid Build Coastguard Worker 
58*8975f5c5SAndroid Build Coastguard Worker     bool depthTest;
59*8975f5c5SAndroid Build Coastguard Worker     bool cullFace;
60*8975f5c5SAndroid Build Coastguard Worker     GLenum cullFaceMode;
61*8975f5c5SAndroid Build Coastguard Worker     std::array<bool, 4> colorMask;
62*8975f5c5SAndroid Build Coastguard Worker     gl::ColorF colorClear;
63*8975f5c5SAndroid Build Coastguard Worker     gl::ColorF blendColor;
64*8975f5c5SAndroid Build Coastguard Worker     GLfloat depthClear;
65*8975f5c5SAndroid Build Coastguard Worker     GLenum currentProgram;
66*8975f5c5SAndroid Build Coastguard Worker     GLenum depthFunc;
67*8975f5c5SAndroid Build Coastguard Worker     bool depthMask;
68*8975f5c5SAndroid Build Coastguard Worker     GLfloat depthRage[2];
69*8975f5c5SAndroid Build Coastguard Worker     GLenum frontFace;
70*8975f5c5SAndroid Build Coastguard Worker     GLfloat lineWidth;
71*8975f5c5SAndroid Build Coastguard Worker     GLfloat polygonOffsetFactor;
72*8975f5c5SAndroid Build Coastguard Worker     GLfloat polygonOffsetUnits;
73*8975f5c5SAndroid Build Coastguard Worker     GLfloat polygonOffsetClamp;
74*8975f5c5SAndroid Build Coastguard Worker     GLfloat sampleCoverageValue;
75*8975f5c5SAndroid Build Coastguard Worker     bool sampleCoverageInvert;
76*8975f5c5SAndroid Build Coastguard Worker     GLenum blendEquationRgb;
77*8975f5c5SAndroid Build Coastguard Worker     GLenum blendEquationAlpha;
78*8975f5c5SAndroid Build Coastguard Worker     bool enableBlendEquationAdvancedCoherent;
79*8975f5c5SAndroid Build Coastguard Worker 
80*8975f5c5SAndroid Build Coastguard Worker     bool enableDither;
81*8975f5c5SAndroid Build Coastguard Worker     GLenum polygonMode;
82*8975f5c5SAndroid Build Coastguard Worker     bool enablePolygonOffsetPoint;
83*8975f5c5SAndroid Build Coastguard Worker     bool enablePolygonOffsetLine;
84*8975f5c5SAndroid Build Coastguard Worker     bool enablePolygonOffsetFill;
85*8975f5c5SAndroid Build Coastguard Worker     bool enableDepthClamp;
86*8975f5c5SAndroid Build Coastguard Worker     bool enableSampleAlphaToCoverage;
87*8975f5c5SAndroid Build Coastguard Worker     bool enableSampleCoverage;
88*8975f5c5SAndroid Build Coastguard Worker     bool multisampleEnabled;
89*8975f5c5SAndroid Build Coastguard Worker 
90*8975f5c5SAndroid Build Coastguard Worker     bool blendEnabled;
91*8975f5c5SAndroid Build Coastguard Worker     GLenum blendSrcRgb;
92*8975f5c5SAndroid Build Coastguard Worker     GLenum blendSrcAlpha;
93*8975f5c5SAndroid Build Coastguard Worker     GLenum blendDestRgb;
94*8975f5c5SAndroid Build Coastguard Worker     GLenum blendDestAlpha;
95*8975f5c5SAndroid Build Coastguard Worker     GLenum activeTexture;
96*8975f5c5SAndroid Build Coastguard Worker     gl::Rectangle viewport;
97*8975f5c5SAndroid Build Coastguard Worker     GLenum clipOrigin;
98*8975f5c5SAndroid Build Coastguard Worker     GLenum clipDepthMode;
99*8975f5c5SAndroid Build Coastguard Worker     bool scissorTest;
100*8975f5c5SAndroid Build Coastguard Worker     gl::Rectangle scissorBox;
101*8975f5c5SAndroid Build Coastguard Worker 
102*8975f5c5SAndroid Build Coastguard Worker     struct StencilState
103*8975f5c5SAndroid Build Coastguard Worker     {
104*8975f5c5SAndroid Build Coastguard Worker         bool stencilTestEnabled;
105*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilFrontFunc;
106*8975f5c5SAndroid Build Coastguard Worker         GLint stencilFrontRef;
107*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilFrontMask;
108*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilBackFunc;
109*8975f5c5SAndroid Build Coastguard Worker         GLint stencilBackRef;
110*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilBackMask;
111*8975f5c5SAndroid Build Coastguard Worker         GLint stencilClear;
112*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilFrontWritemask;
113*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilBackWritemask;
114*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilFrontFailOp;
115*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilFrontZFailOp;
116*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilFrontZPassOp;
117*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilBackFailOp;
118*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilBackZFailOp;
119*8975f5c5SAndroid Build Coastguard Worker         GLenum stencilBackZPassOp;
120*8975f5c5SAndroid Build Coastguard Worker     };
121*8975f5c5SAndroid Build Coastguard Worker     StencilState stencilState;
122*8975f5c5SAndroid Build Coastguard Worker 
123*8975f5c5SAndroid Build Coastguard Worker     GLenum framebufferBinding;
124*8975f5c5SAndroid Build Coastguard Worker 
125*8975f5c5SAndroid Build Coastguard Worker     struct TextureBindings
126*8975f5c5SAndroid Build Coastguard Worker     {
127*8975f5c5SAndroid Build Coastguard Worker         GLenum texture2d;
128*8975f5c5SAndroid Build Coastguard Worker         GLenum textureCubeMap;
129*8975f5c5SAndroid Build Coastguard Worker         GLenum textureExternalOES;
130*8975f5c5SAndroid Build Coastguard Worker         // TODO(boliu): TEXTURE_RECTANGLE_ARB
131*8975f5c5SAndroid Build Coastguard Worker     };
132*8975f5c5SAndroid Build Coastguard Worker     std::vector<TextureBindings> textureBindings;
133*8975f5c5SAndroid Build Coastguard Worker 
134*8975f5c5SAndroid Build Coastguard Worker     GLenum vertexArrayBinding;
135*8975f5c5SAndroid Build Coastguard Worker 
136*8975f5c5SAndroid Build Coastguard Worker     angle::FixedVector<ExternalContextVertexAttribute, gl::MAX_VERTEX_ATTRIBS>
137*8975f5c5SAndroid Build Coastguard Worker         defaultVertexArrayAttributes;
138*8975f5c5SAndroid Build Coastguard Worker };
139*8975f5c5SAndroid Build Coastguard Worker 
140*8975f5c5SAndroid Build Coastguard Worker struct VertexAttributeGL
141*8975f5c5SAndroid Build Coastguard Worker {
142*8975f5c5SAndroid Build Coastguard Worker     bool enabled                = false;
143*8975f5c5SAndroid Build Coastguard Worker     const angle::Format *format = &angle::Format::Get(angle::FormatID::R32G32B32A32_FLOAT);
144*8975f5c5SAndroid Build Coastguard Worker 
145*8975f5c5SAndroid Build Coastguard Worker     const void *pointer   = nullptr;
146*8975f5c5SAndroid Build Coastguard Worker     GLuint relativeOffset = 0;
147*8975f5c5SAndroid Build Coastguard Worker 
148*8975f5c5SAndroid Build Coastguard Worker     GLuint bindingIndex = 0;
149*8975f5c5SAndroid Build Coastguard Worker };
150*8975f5c5SAndroid Build Coastguard Worker 
151*8975f5c5SAndroid Build Coastguard Worker struct VertexBindingGL
152*8975f5c5SAndroid Build Coastguard Worker {
153*8975f5c5SAndroid Build Coastguard Worker     GLuint stride   = 16;
154*8975f5c5SAndroid Build Coastguard Worker     GLuint divisor  = 0;
155*8975f5c5SAndroid Build Coastguard Worker     GLintptr offset = 0;
156*8975f5c5SAndroid Build Coastguard Worker 
157*8975f5c5SAndroid Build Coastguard Worker     GLuint buffer = 0;
158*8975f5c5SAndroid Build Coastguard Worker };
159*8975f5c5SAndroid Build Coastguard Worker 
160*8975f5c5SAndroid Build Coastguard Worker struct VertexArrayStateGL
161*8975f5c5SAndroid Build Coastguard Worker {
162*8975f5c5SAndroid Build Coastguard Worker     VertexArrayStateGL(size_t maxAttribs, size_t maxBindings);
163*8975f5c5SAndroid Build Coastguard Worker 
164*8975f5c5SAndroid Build Coastguard Worker     GLuint elementArrayBuffer = 0;
165*8975f5c5SAndroid Build Coastguard Worker 
166*8975f5c5SAndroid Build Coastguard Worker     angle::FixedVector<VertexAttributeGL, gl::MAX_VERTEX_ATTRIBS> attributes;
167*8975f5c5SAndroid Build Coastguard Worker     angle::FixedVector<VertexBindingGL, gl::MAX_VERTEX_ATTRIBS> bindings;
168*8975f5c5SAndroid Build Coastguard Worker };
169*8975f5c5SAndroid Build Coastguard Worker 
170*8975f5c5SAndroid Build Coastguard Worker class StateManagerGL final : angle::NonCopyable
171*8975f5c5SAndroid Build Coastguard Worker {
172*8975f5c5SAndroid Build Coastguard Worker   public:
173*8975f5c5SAndroid Build Coastguard Worker     StateManagerGL(const FunctionsGL *functions,
174*8975f5c5SAndroid Build Coastguard Worker                    const gl::Caps &rendererCaps,
175*8975f5c5SAndroid Build Coastguard Worker                    const gl::Extensions &extensions,
176*8975f5c5SAndroid Build Coastguard Worker                    const angle::FeaturesGL &features);
177*8975f5c5SAndroid Build Coastguard Worker     ~StateManagerGL();
178*8975f5c5SAndroid Build Coastguard Worker 
179*8975f5c5SAndroid Build Coastguard Worker     void deleteProgram(GLuint program);
180*8975f5c5SAndroid Build Coastguard Worker     void deleteVertexArray(GLuint vao);
181*8975f5c5SAndroid Build Coastguard Worker     void deleteTexture(GLuint texture);
182*8975f5c5SAndroid Build Coastguard Worker     void deleteSampler(GLuint sampler);
183*8975f5c5SAndroid Build Coastguard Worker     void deleteBuffer(GLuint buffer);
184*8975f5c5SAndroid Build Coastguard Worker     void deleteFramebuffer(GLuint fbo);
185*8975f5c5SAndroid Build Coastguard Worker     void deleteRenderbuffer(GLuint rbo);
186*8975f5c5SAndroid Build Coastguard Worker     void deleteTransformFeedback(GLuint transformFeedback);
187*8975f5c5SAndroid Build Coastguard Worker 
188*8975f5c5SAndroid Build Coastguard Worker     void useProgram(GLuint program);
189*8975f5c5SAndroid Build Coastguard Worker     void forceUseProgram(GLuint program);
190*8975f5c5SAndroid Build Coastguard Worker     void bindVertexArray(GLuint vao, VertexArrayStateGL *vaoState);
191*8975f5c5SAndroid Build Coastguard Worker     void bindBuffer(gl::BufferBinding target, GLuint buffer);
192*8975f5c5SAndroid Build Coastguard Worker     void bindBufferBase(gl::BufferBinding target, size_t index, GLuint buffer);
193*8975f5c5SAndroid Build Coastguard Worker     void bindBufferRange(gl::BufferBinding target,
194*8975f5c5SAndroid Build Coastguard Worker                          size_t index,
195*8975f5c5SAndroid Build Coastguard Worker                          GLuint buffer,
196*8975f5c5SAndroid Build Coastguard Worker                          size_t offset,
197*8975f5c5SAndroid Build Coastguard Worker                          size_t size);
198*8975f5c5SAndroid Build Coastguard Worker     void activeTexture(size_t unit);
199*8975f5c5SAndroid Build Coastguard Worker     void bindTexture(gl::TextureType type, GLuint texture);
200*8975f5c5SAndroid Build Coastguard Worker     void invalidateTexture(gl::TextureType type);
201*8975f5c5SAndroid Build Coastguard Worker     void bindSampler(size_t unit, GLuint sampler);
202*8975f5c5SAndroid Build Coastguard Worker     void bindImageTexture(size_t unit,
203*8975f5c5SAndroid Build Coastguard Worker                           GLuint texture,
204*8975f5c5SAndroid Build Coastguard Worker                           GLint level,
205*8975f5c5SAndroid Build Coastguard Worker                           GLboolean layered,
206*8975f5c5SAndroid Build Coastguard Worker                           GLint layer,
207*8975f5c5SAndroid Build Coastguard Worker                           GLenum access,
208*8975f5c5SAndroid Build Coastguard Worker                           GLenum format);
209*8975f5c5SAndroid Build Coastguard Worker     void bindFramebuffer(GLenum type, GLuint framebuffer);
210*8975f5c5SAndroid Build Coastguard Worker     void bindRenderbuffer(GLenum type, GLuint renderbuffer);
211*8975f5c5SAndroid Build Coastguard Worker     void bindTransformFeedback(GLenum type, GLuint transformFeedback);
212*8975f5c5SAndroid Build Coastguard Worker     void onTransformFeedbackStateChange();
213*8975f5c5SAndroid Build Coastguard Worker     void beginQuery(gl::QueryType type, QueryGL *queryObject, GLuint queryId);
214*8975f5c5SAndroid Build Coastguard Worker     void endQuery(gl::QueryType type, QueryGL *queryObject, GLuint queryId);
215*8975f5c5SAndroid Build Coastguard Worker 
216*8975f5c5SAndroid Build Coastguard Worker     void setAttributeCurrentData(size_t index, const gl::VertexAttribCurrentValueData &data);
217*8975f5c5SAndroid Build Coastguard Worker 
218*8975f5c5SAndroid Build Coastguard Worker     void setScissorTestEnabled(bool enabled);
219*8975f5c5SAndroid Build Coastguard Worker     void setScissor(const gl::Rectangle &scissor);
220*8975f5c5SAndroid Build Coastguard Worker 
221*8975f5c5SAndroid Build Coastguard Worker     void setViewport(const gl::Rectangle &viewport);
222*8975f5c5SAndroid Build Coastguard Worker     void setDepthRange(float near, float far);
223*8975f5c5SAndroid Build Coastguard Worker     void setClipControl(gl::ClipOrigin origin, gl::ClipDepthMode depth);
224*8975f5c5SAndroid Build Coastguard Worker 
225*8975f5c5SAndroid Build Coastguard Worker     void setBlendEnabled(bool enabled);
226*8975f5c5SAndroid Build Coastguard Worker     void setBlendEnabledIndexed(const gl::DrawBufferMask blendEnabledMask);
227*8975f5c5SAndroid Build Coastguard Worker     void setBlendColor(const gl::ColorF &blendColor);
228*8975f5c5SAndroid Build Coastguard Worker     void setBlendFuncs(const gl::BlendStateExt &blendStateExt);
229*8975f5c5SAndroid Build Coastguard Worker     void setBlendEquations(const gl::BlendStateExt &blendStateExt);
230*8975f5c5SAndroid Build Coastguard Worker     void setBlendAdvancedCoherent(bool enabled);
231*8975f5c5SAndroid Build Coastguard Worker     void setColorMask(bool red, bool green, bool blue, bool alpha);
232*8975f5c5SAndroid Build Coastguard Worker     void setSampleAlphaToCoverageEnabled(bool enabled);
233*8975f5c5SAndroid Build Coastguard Worker     void setSampleCoverageEnabled(bool enabled);
234*8975f5c5SAndroid Build Coastguard Worker     void setSampleCoverage(float value, bool invert);
235*8975f5c5SAndroid Build Coastguard Worker     void setSampleMaskEnabled(bool enabled);
236*8975f5c5SAndroid Build Coastguard Worker     void setSampleMaski(GLuint maskNumber, GLbitfield mask);
237*8975f5c5SAndroid Build Coastguard Worker 
238*8975f5c5SAndroid Build Coastguard Worker     void setDepthTestEnabled(bool enabled);
239*8975f5c5SAndroid Build Coastguard Worker     void setDepthFunc(GLenum depthFunc);
240*8975f5c5SAndroid Build Coastguard Worker     void setDepthMask(bool mask);
241*8975f5c5SAndroid Build Coastguard Worker     void setStencilTestEnabled(bool enabled);
242*8975f5c5SAndroid Build Coastguard Worker     void setStencilFrontWritemask(GLuint mask);
243*8975f5c5SAndroid Build Coastguard Worker     void setStencilBackWritemask(GLuint mask);
244*8975f5c5SAndroid Build Coastguard Worker     void setStencilFrontFuncs(GLenum func, GLint ref, GLuint mask);
245*8975f5c5SAndroid Build Coastguard Worker     void setStencilBackFuncs(GLenum func, GLint ref, GLuint mask);
246*8975f5c5SAndroid Build Coastguard Worker     void setStencilFrontOps(GLenum sfail, GLenum dpfail, GLenum dppass);
247*8975f5c5SAndroid Build Coastguard Worker     void setStencilBackOps(GLenum sfail, GLenum dpfail, GLenum dppass);
248*8975f5c5SAndroid Build Coastguard Worker 
249*8975f5c5SAndroid Build Coastguard Worker     void setCullFaceEnabled(bool enabled);
250*8975f5c5SAndroid Build Coastguard Worker     void setCullFace(gl::CullFaceMode cullFace);
251*8975f5c5SAndroid Build Coastguard Worker     void setFrontFace(GLenum frontFace);
252*8975f5c5SAndroid Build Coastguard Worker     void setPolygonMode(gl::PolygonMode mode);
253*8975f5c5SAndroid Build Coastguard Worker     void setPolygonOffsetPointEnabled(bool enabled);
254*8975f5c5SAndroid Build Coastguard Worker     void setPolygonOffsetLineEnabled(bool enabled);
255*8975f5c5SAndroid Build Coastguard Worker     void setPolygonOffsetFillEnabled(bool enabled);
256*8975f5c5SAndroid Build Coastguard Worker     void setPolygonOffset(float factor, float units, float clamp);
257*8975f5c5SAndroid Build Coastguard Worker     void setDepthClampEnabled(bool enabled);
258*8975f5c5SAndroid Build Coastguard Worker     void setRasterizerDiscardEnabled(bool enabled);
259*8975f5c5SAndroid Build Coastguard Worker     void setLineWidth(float width);
260*8975f5c5SAndroid Build Coastguard Worker 
261*8975f5c5SAndroid Build Coastguard Worker     angle::Result setPrimitiveRestartEnabled(const gl::Context *context, bool enabled);
262*8975f5c5SAndroid Build Coastguard Worker     angle::Result setPrimitiveRestartIndex(const gl::Context *context, GLuint index);
263*8975f5c5SAndroid Build Coastguard Worker 
264*8975f5c5SAndroid Build Coastguard Worker     void setClearColor(const gl::ColorF &clearColor);
265*8975f5c5SAndroid Build Coastguard Worker     void setClearDepth(float clearDepth);
266*8975f5c5SAndroid Build Coastguard Worker     void setClearStencil(GLint clearStencil);
267*8975f5c5SAndroid Build Coastguard Worker 
268*8975f5c5SAndroid Build Coastguard Worker     angle::Result setPixelUnpackState(const gl::Context *context,
269*8975f5c5SAndroid Build Coastguard Worker                                       const gl::PixelUnpackState &unpack);
270*8975f5c5SAndroid Build Coastguard Worker     angle::Result setPixelUnpackBuffer(const gl::Context *context, const gl::Buffer *pixelBuffer);
271*8975f5c5SAndroid Build Coastguard Worker     angle::Result setPixelPackState(const gl::Context *context, const gl::PixelPackState &pack);
272*8975f5c5SAndroid Build Coastguard Worker     angle::Result setPixelPackBuffer(const gl::Context *context, const gl::Buffer *pixelBuffer);
273*8975f5c5SAndroid Build Coastguard Worker 
274*8975f5c5SAndroid Build Coastguard Worker     void setFramebufferSRGBEnabled(const gl::Context *context, bool enabled);
275*8975f5c5SAndroid Build Coastguard Worker     void setFramebufferSRGBEnabledForFramebuffer(const gl::Context *context,
276*8975f5c5SAndroid Build Coastguard Worker                                                  bool enabled,
277*8975f5c5SAndroid Build Coastguard Worker                                                  const FramebufferGL *framebuffer);
278*8975f5c5SAndroid Build Coastguard Worker     void setColorMaskForFramebuffer(const gl::BlendStateExt &blendStateExt,
279*8975f5c5SAndroid Build Coastguard Worker                                     const bool disableAlpha);
280*8975f5c5SAndroid Build Coastguard Worker 
281*8975f5c5SAndroid Build Coastguard Worker     void setDitherEnabled(bool enabled);
282*8975f5c5SAndroid Build Coastguard Worker 
283*8975f5c5SAndroid Build Coastguard Worker     void setMultisamplingStateEnabled(bool enabled);
284*8975f5c5SAndroid Build Coastguard Worker     void setSampleAlphaToOneStateEnabled(bool enabled);
285*8975f5c5SAndroid Build Coastguard Worker 
286*8975f5c5SAndroid Build Coastguard Worker     void setCoverageModulation(GLenum components);
287*8975f5c5SAndroid Build Coastguard Worker 
288*8975f5c5SAndroid Build Coastguard Worker     void setProvokingVertex(GLenum mode);
289*8975f5c5SAndroid Build Coastguard Worker 
290*8975f5c5SAndroid Build Coastguard Worker     void setClipDistancesEnable(const gl::ClipDistanceEnableBits &enables);
291*8975f5c5SAndroid Build Coastguard Worker 
292*8975f5c5SAndroid Build Coastguard Worker     void setLogicOpEnabled(bool enabled);
293*8975f5c5SAndroid Build Coastguard Worker     void setLogicOp(gl::LogicalOperation opcode);
294*8975f5c5SAndroid Build Coastguard Worker 
295*8975f5c5SAndroid Build Coastguard Worker     void pauseTransformFeedback();
296*8975f5c5SAndroid Build Coastguard Worker     angle::Result pauseAllQueries(const gl::Context *context);
297*8975f5c5SAndroid Build Coastguard Worker     angle::Result pauseQuery(const gl::Context *context, gl::QueryType type);
298*8975f5c5SAndroid Build Coastguard Worker     angle::Result resumeAllQueries(const gl::Context *context);
299*8975f5c5SAndroid Build Coastguard Worker     angle::Result resumeQuery(const gl::Context *context, gl::QueryType type);
300*8975f5c5SAndroid Build Coastguard Worker     angle::Result onMakeCurrent(const gl::Context *context);
301*8975f5c5SAndroid Build Coastguard Worker 
302*8975f5c5SAndroid Build Coastguard Worker     angle::Result syncState(const gl::Context *context,
303*8975f5c5SAndroid Build Coastguard Worker                             const gl::state::DirtyBits &glDirtyBits,
304*8975f5c5SAndroid Build Coastguard Worker                             const gl::state::DirtyBits &bitMask,
305*8975f5c5SAndroid Build Coastguard Worker                             const gl::state::ExtendedDirtyBits &extendedDirtyBits,
306*8975f5c5SAndroid Build Coastguard Worker                             const gl::state::ExtendedDirtyBits &extendedBitMask);
307*8975f5c5SAndroid Build Coastguard Worker 
updateMultiviewBaseViewLayerIndexUniform(const gl::ProgramExecutable * executable,const gl::FramebufferState & drawFramebufferState)308*8975f5c5SAndroid Build Coastguard Worker     ANGLE_INLINE void updateMultiviewBaseViewLayerIndexUniform(
309*8975f5c5SAndroid Build Coastguard Worker         const gl::ProgramExecutable *executable,
310*8975f5c5SAndroid Build Coastguard Worker         const gl::FramebufferState &drawFramebufferState) const
311*8975f5c5SAndroid Build Coastguard Worker     {
312*8975f5c5SAndroid Build Coastguard Worker         if (mIsMultiviewEnabled && executable && executable->usesMultiview())
313*8975f5c5SAndroid Build Coastguard Worker         {
314*8975f5c5SAndroid Build Coastguard Worker             updateMultiviewBaseViewLayerIndexUniformImpl(executable, drawFramebufferState);
315*8975f5c5SAndroid Build Coastguard Worker         }
316*8975f5c5SAndroid Build Coastguard Worker     }
317*8975f5c5SAndroid Build Coastguard Worker 
updateEmulatedClipOriginUniform(const gl::ProgramExecutable * executable,const gl::ClipOrigin origin)318*8975f5c5SAndroid Build Coastguard Worker     ANGLE_INLINE void updateEmulatedClipOriginUniform(const gl::ProgramExecutable *executable,
319*8975f5c5SAndroid Build Coastguard Worker                                                       const gl::ClipOrigin origin) const
320*8975f5c5SAndroid Build Coastguard Worker     {
321*8975f5c5SAndroid Build Coastguard Worker         ASSERT(executable);
322*8975f5c5SAndroid Build Coastguard Worker         GetImplAs<ProgramExecutableGL>(executable)->updateEmulatedClipOrigin(origin);
323*8975f5c5SAndroid Build Coastguard Worker     }
324*8975f5c5SAndroid Build Coastguard Worker 
getProgramID()325*8975f5c5SAndroid Build Coastguard Worker     GLuint getProgramID() const { return mProgram; }
getVertexArrayID()326*8975f5c5SAndroid Build Coastguard Worker     GLuint getVertexArrayID() const { return mVAO; }
getFramebufferID(angle::FramebufferBinding binding)327*8975f5c5SAndroid Build Coastguard Worker     GLuint getFramebufferID(angle::FramebufferBinding binding) const
328*8975f5c5SAndroid Build Coastguard Worker     {
329*8975f5c5SAndroid Build Coastguard Worker         return mFramebuffers[binding];
330*8975f5c5SAndroid Build Coastguard Worker     }
getBufferID(gl::BufferBinding binding)331*8975f5c5SAndroid Build Coastguard Worker     GLuint getBufferID(gl::BufferBinding binding) const { return mBuffers[binding]; }
332*8975f5c5SAndroid Build Coastguard Worker 
getHasSeparateFramebufferBindings()333*8975f5c5SAndroid Build Coastguard Worker     bool getHasSeparateFramebufferBindings() const { return mHasSeparateFramebufferBindings; }
334*8975f5c5SAndroid Build Coastguard Worker 
335*8975f5c5SAndroid Build Coastguard Worker     GLuint getDefaultVAO() const;
336*8975f5c5SAndroid Build Coastguard Worker     VertexArrayStateGL *getDefaultVAOState();
337*8975f5c5SAndroid Build Coastguard Worker     void setDefaultVAOStateDirty();
338*8975f5c5SAndroid Build Coastguard Worker 
339*8975f5c5SAndroid Build Coastguard Worker     void validateState() const;
340*8975f5c5SAndroid Build Coastguard Worker 
341*8975f5c5SAndroid Build Coastguard Worker     void syncFromNativeContext(const gl::Extensions &extensions, ExternalContextState *state);
342*8975f5c5SAndroid Build Coastguard Worker     void restoreNativeContext(const gl::Extensions &extensions, const ExternalContextState *state);
343*8975f5c5SAndroid Build Coastguard Worker 
344*8975f5c5SAndroid Build Coastguard Worker   private:
345*8975f5c5SAndroid Build Coastguard Worker     void forceBindVertexArray(GLuint vao, VertexArrayStateGL *vaoState);
346*8975f5c5SAndroid Build Coastguard Worker 
347*8975f5c5SAndroid Build Coastguard Worker     void setTextureCubemapSeamlessEnabled(bool enabled);
348*8975f5c5SAndroid Build Coastguard Worker 
349*8975f5c5SAndroid Build Coastguard Worker     void setClipControlWithEmulatedClipOrigin(const gl::ProgramExecutable *executable,
350*8975f5c5SAndroid Build Coastguard Worker                                               GLenum frontFace,
351*8975f5c5SAndroid Build Coastguard Worker                                               gl::ClipOrigin origin,
352*8975f5c5SAndroid Build Coastguard Worker                                               gl::ClipDepthMode depth);
353*8975f5c5SAndroid Build Coastguard Worker 
354*8975f5c5SAndroid Build Coastguard Worker     angle::Result propagateProgramToVAO(const gl::Context *context,
355*8975f5c5SAndroid Build Coastguard Worker                                         const gl::ProgramExecutable *executable,
356*8975f5c5SAndroid Build Coastguard Worker                                         VertexArrayGL *vao);
357*8975f5c5SAndroid Build Coastguard Worker 
358*8975f5c5SAndroid Build Coastguard Worker     void updateProgramTextureBindings(const gl::Context *context);
359*8975f5c5SAndroid Build Coastguard Worker     void updateProgramStorageBufferBindings(const gl::Context *context);
360*8975f5c5SAndroid Build Coastguard Worker     void updateProgramUniformBufferBindings(const gl::Context *context);
361*8975f5c5SAndroid Build Coastguard Worker     void updateProgramAtomicCounterBufferBindings(const gl::Context *context);
362*8975f5c5SAndroid Build Coastguard Worker     void updateProgramImageBindings(const gl::Context *context);
363*8975f5c5SAndroid Build Coastguard Worker 
364*8975f5c5SAndroid Build Coastguard Worker     void updateDispatchIndirectBufferBinding(const gl::Context *context);
365*8975f5c5SAndroid Build Coastguard Worker     void updateDrawIndirectBufferBinding(const gl::Context *context);
366*8975f5c5SAndroid Build Coastguard Worker 
367*8975f5c5SAndroid Build Coastguard Worker     template <typename T>
368*8975f5c5SAndroid Build Coastguard Worker     void get(GLenum name, T *value);
369*8975f5c5SAndroid Build Coastguard Worker 
370*8975f5c5SAndroid Build Coastguard Worker     template <size_t n, typename T>
371*8975f5c5SAndroid Build Coastguard Worker     void get(GLenum name, std::array<T, n> *values);
372*8975f5c5SAndroid Build Coastguard Worker 
373*8975f5c5SAndroid Build Coastguard Worker     void syncSamplersState(const gl::Context *context);
374*8975f5c5SAndroid Build Coastguard Worker     void syncTransformFeedbackState(const gl::Context *context);
375*8975f5c5SAndroid Build Coastguard Worker 
376*8975f5c5SAndroid Build Coastguard Worker     void updateEmulatedClipDistanceState(const gl::ProgramExecutable *executable,
377*8975f5c5SAndroid Build Coastguard Worker                                          const gl::ClipDistanceEnableBits enables) const;
378*8975f5c5SAndroid Build Coastguard Worker 
379*8975f5c5SAndroid Build Coastguard Worker     void updateMultiviewBaseViewLayerIndexUniformImpl(
380*8975f5c5SAndroid Build Coastguard Worker         const gl::ProgramExecutable *executable,
381*8975f5c5SAndroid Build Coastguard Worker         const gl::FramebufferState &drawFramebufferState) const;
382*8975f5c5SAndroid Build Coastguard Worker 
383*8975f5c5SAndroid Build Coastguard Worker     void syncBlendFromNativeContext(const gl::Extensions &extensions, ExternalContextState *state);
384*8975f5c5SAndroid Build Coastguard Worker     void restoreBlendNativeContext(const gl::Extensions &extensions,
385*8975f5c5SAndroid Build Coastguard Worker                                    const ExternalContextState *state);
386*8975f5c5SAndroid Build Coastguard Worker 
387*8975f5c5SAndroid Build Coastguard Worker     void syncFramebufferFromNativeContext(const gl::Extensions &extensions,
388*8975f5c5SAndroid Build Coastguard Worker                                           ExternalContextState *state);
389*8975f5c5SAndroid Build Coastguard Worker     void restoreFramebufferNativeContext(const gl::Extensions &extensions,
390*8975f5c5SAndroid Build Coastguard Worker                                          const ExternalContextState *state);
391*8975f5c5SAndroid Build Coastguard Worker 
392*8975f5c5SAndroid Build Coastguard Worker     void syncPixelPackUnpackFromNativeContext(const gl::Extensions &extensions,
393*8975f5c5SAndroid Build Coastguard Worker                                               ExternalContextState *state);
394*8975f5c5SAndroid Build Coastguard Worker     void restorePixelPackUnpackNativeContext(const gl::Extensions &extensions,
395*8975f5c5SAndroid Build Coastguard Worker                                              const ExternalContextState *state);
396*8975f5c5SAndroid Build Coastguard Worker 
397*8975f5c5SAndroid Build Coastguard Worker     void syncStencilFromNativeContext(const gl::Extensions &extensions,
398*8975f5c5SAndroid Build Coastguard Worker                                       ExternalContextState *state);
399*8975f5c5SAndroid Build Coastguard Worker     void restoreStencilNativeContext(const gl::Extensions &extensions,
400*8975f5c5SAndroid Build Coastguard Worker                                      const ExternalContextState *state);
401*8975f5c5SAndroid Build Coastguard Worker 
402*8975f5c5SAndroid Build Coastguard Worker     void syncBufferBindingsFromNativeContext(const gl::Extensions &extensions,
403*8975f5c5SAndroid Build Coastguard Worker                                              ExternalContextState *state);
404*8975f5c5SAndroid Build Coastguard Worker     void restoreBufferBindingsNativeContext(const gl::Extensions &extensions,
405*8975f5c5SAndroid Build Coastguard Worker                                             const ExternalContextState *state);
406*8975f5c5SAndroid Build Coastguard Worker 
407*8975f5c5SAndroid Build Coastguard Worker     void syncTextureUnitsFromNativeContext(const gl::Extensions &extensions,
408*8975f5c5SAndroid Build Coastguard Worker                                            ExternalContextState *state);
409*8975f5c5SAndroid Build Coastguard Worker     void restoreTextureUnitsNativeContext(const gl::Extensions &extensions,
410*8975f5c5SAndroid Build Coastguard Worker                                           const ExternalContextState *state);
411*8975f5c5SAndroid Build Coastguard Worker 
412*8975f5c5SAndroid Build Coastguard Worker     void syncVertexArraysFromNativeContext(const gl::Extensions &extensions,
413*8975f5c5SAndroid Build Coastguard Worker                                            ExternalContextState *state);
414*8975f5c5SAndroid Build Coastguard Worker     void restoreVertexArraysNativeContext(const gl::Extensions &extensions,
415*8975f5c5SAndroid Build Coastguard Worker                                           const ExternalContextState *state);
416*8975f5c5SAndroid Build Coastguard Worker 
417*8975f5c5SAndroid Build Coastguard Worker     const FunctionsGL *mFunctions;
418*8975f5c5SAndroid Build Coastguard Worker     const angle::FeaturesGL &mFeatures;
419*8975f5c5SAndroid Build Coastguard Worker 
420*8975f5c5SAndroid Build Coastguard Worker     GLuint mProgram;
421*8975f5c5SAndroid Build Coastguard Worker 
422*8975f5c5SAndroid Build Coastguard Worker     const bool mSupportsVertexArrayObjects;
423*8975f5c5SAndroid Build Coastguard Worker     GLuint mVAO;
424*8975f5c5SAndroid Build Coastguard Worker     std::vector<gl::VertexAttribCurrentValueData> mVertexAttribCurrentValues;
425*8975f5c5SAndroid Build Coastguard Worker 
426*8975f5c5SAndroid Build Coastguard Worker     GLuint mDefaultVAO = 0;
427*8975f5c5SAndroid Build Coastguard Worker     // The current state of the default VAO is owned by StateManagerGL. It may be shared between
428*8975f5c5SAndroid Build Coastguard Worker     // multiple VertexArrayGL objects if the native driver does not support vertex array objects.
429*8975f5c5SAndroid Build Coastguard Worker     // When this object is shared, StateManagerGL forces VertexArrayGL to resynchronize itself every
430*8975f5c5SAndroid Build Coastguard Worker     // time a new vertex array is bound.
431*8975f5c5SAndroid Build Coastguard Worker     VertexArrayStateGL mDefaultVAOState;
432*8975f5c5SAndroid Build Coastguard Worker 
433*8975f5c5SAndroid Build Coastguard Worker     // The state of the currently bound vertex array object so StateManagerGL can know about the
434*8975f5c5SAndroid Build Coastguard Worker     // current element array buffer.
435*8975f5c5SAndroid Build Coastguard Worker     VertexArrayStateGL *mVAOState = nullptr;
436*8975f5c5SAndroid Build Coastguard Worker 
437*8975f5c5SAndroid Build Coastguard Worker     angle::PackedEnumMap<gl::BufferBinding, GLuint> mBuffers;
438*8975f5c5SAndroid Build Coastguard Worker 
439*8975f5c5SAndroid Build Coastguard Worker     struct IndexedBufferBinding
440*8975f5c5SAndroid Build Coastguard Worker     {
441*8975f5c5SAndroid Build Coastguard Worker         IndexedBufferBinding();
442*8975f5c5SAndroid Build Coastguard Worker 
443*8975f5c5SAndroid Build Coastguard Worker         size_t offset;
444*8975f5c5SAndroid Build Coastguard Worker         size_t size;
445*8975f5c5SAndroid Build Coastguard Worker         GLuint buffer;
446*8975f5c5SAndroid Build Coastguard Worker     };
447*8975f5c5SAndroid Build Coastguard Worker     angle::PackedEnumMap<gl::BufferBinding, std::vector<IndexedBufferBinding>> mIndexedBuffers;
448*8975f5c5SAndroid Build Coastguard Worker 
449*8975f5c5SAndroid Build Coastguard Worker     size_t mTextureUnitIndex;
450*8975f5c5SAndroid Build Coastguard Worker     angle::PackedEnumMap<gl::TextureType, gl::ActiveTextureArray<GLuint>> mTextures;
451*8975f5c5SAndroid Build Coastguard Worker     gl::ActiveTextureArray<GLuint> mSamplers;
452*8975f5c5SAndroid Build Coastguard Worker 
453*8975f5c5SAndroid Build Coastguard Worker     struct ImageUnitBinding
454*8975f5c5SAndroid Build Coastguard Worker     {
ImageUnitBindingImageUnitBinding455*8975f5c5SAndroid Build Coastguard Worker         ImageUnitBinding()
456*8975f5c5SAndroid Build Coastguard Worker             : texture(0), level(0), layered(false), layer(0), access(GL_READ_ONLY), format(GL_R32UI)
457*8975f5c5SAndroid Build Coastguard Worker         {}
458*8975f5c5SAndroid Build Coastguard Worker 
459*8975f5c5SAndroid Build Coastguard Worker         GLuint texture;
460*8975f5c5SAndroid Build Coastguard Worker         GLint level;
461*8975f5c5SAndroid Build Coastguard Worker         GLboolean layered;
462*8975f5c5SAndroid Build Coastguard Worker         GLint layer;
463*8975f5c5SAndroid Build Coastguard Worker         GLenum access;
464*8975f5c5SAndroid Build Coastguard Worker         GLenum format;
465*8975f5c5SAndroid Build Coastguard Worker     };
466*8975f5c5SAndroid Build Coastguard Worker     std::vector<ImageUnitBinding> mImages;
467*8975f5c5SAndroid Build Coastguard Worker 
468*8975f5c5SAndroid Build Coastguard Worker     GLuint mTransformFeedback;
469*8975f5c5SAndroid Build Coastguard Worker     TransformFeedbackGL *mCurrentTransformFeedback;
470*8975f5c5SAndroid Build Coastguard Worker 
471*8975f5c5SAndroid Build Coastguard Worker     // Queries that are currently running on the driver
472*8975f5c5SAndroid Build Coastguard Worker     angle::PackedEnumMap<gl::QueryType, QueryGL *> mQueries;
473*8975f5c5SAndroid Build Coastguard Worker 
474*8975f5c5SAndroid Build Coastguard Worker     // Queries that are temporarily in the paused state so that their results will not be affected
475*8975f5c5SAndroid Build Coastguard Worker     // by other operations
476*8975f5c5SAndroid Build Coastguard Worker     angle::PackedEnumMap<gl::QueryType, QueryGL *> mTemporaryPausedQueries;
477*8975f5c5SAndroid Build Coastguard Worker 
478*8975f5c5SAndroid Build Coastguard Worker     gl::ContextID mPrevDrawContext;
479*8975f5c5SAndroid Build Coastguard Worker 
480*8975f5c5SAndroid Build Coastguard Worker     GLint mUnpackAlignment;
481*8975f5c5SAndroid Build Coastguard Worker     GLint mUnpackRowLength;
482*8975f5c5SAndroid Build Coastguard Worker     GLint mUnpackSkipRows;
483*8975f5c5SAndroid Build Coastguard Worker     GLint mUnpackSkipPixels;
484*8975f5c5SAndroid Build Coastguard Worker     GLint mUnpackImageHeight;
485*8975f5c5SAndroid Build Coastguard Worker     GLint mUnpackSkipImages;
486*8975f5c5SAndroid Build Coastguard Worker 
487*8975f5c5SAndroid Build Coastguard Worker     GLint mPackAlignment;
488*8975f5c5SAndroid Build Coastguard Worker     GLint mPackRowLength;
489*8975f5c5SAndroid Build Coastguard Worker     GLint mPackSkipRows;
490*8975f5c5SAndroid Build Coastguard Worker     GLint mPackSkipPixels;
491*8975f5c5SAndroid Build Coastguard Worker 
492*8975f5c5SAndroid Build Coastguard Worker     // TODO(jmadill): Convert to std::array when available
493*8975f5c5SAndroid Build Coastguard Worker     std::vector<GLenum> mFramebuffers;
494*8975f5c5SAndroid Build Coastguard Worker     GLuint mRenderbuffer;
495*8975f5c5SAndroid Build Coastguard Worker     GLuint mPlaceholderFbo;
496*8975f5c5SAndroid Build Coastguard Worker     GLuint mPlaceholderRbo;
497*8975f5c5SAndroid Build Coastguard Worker 
498*8975f5c5SAndroid Build Coastguard Worker     bool mScissorTestEnabled;
499*8975f5c5SAndroid Build Coastguard Worker     gl::Rectangle mScissor;
500*8975f5c5SAndroid Build Coastguard Worker     gl::Rectangle mViewport;
501*8975f5c5SAndroid Build Coastguard Worker     float mNear;
502*8975f5c5SAndroid Build Coastguard Worker     float mFar;
503*8975f5c5SAndroid Build Coastguard Worker 
504*8975f5c5SAndroid Build Coastguard Worker     gl::ClipOrigin mClipOrigin;
505*8975f5c5SAndroid Build Coastguard Worker     gl::ClipDepthMode mClipDepthMode;
506*8975f5c5SAndroid Build Coastguard Worker 
507*8975f5c5SAndroid Build Coastguard Worker     gl::ColorF mBlendColor;
508*8975f5c5SAndroid Build Coastguard Worker     gl::BlendStateExt mBlendStateExt;
509*8975f5c5SAndroid Build Coastguard Worker     bool mBlendAdvancedCoherent;
510*8975f5c5SAndroid Build Coastguard Worker     const bool mIndependentBlendStates;
511*8975f5c5SAndroid Build Coastguard Worker 
512*8975f5c5SAndroid Build Coastguard Worker     bool mSampleAlphaToCoverageEnabled;
513*8975f5c5SAndroid Build Coastguard Worker     bool mSampleCoverageEnabled;
514*8975f5c5SAndroid Build Coastguard Worker     float mSampleCoverageValue;
515*8975f5c5SAndroid Build Coastguard Worker     bool mSampleCoverageInvert;
516*8975f5c5SAndroid Build Coastguard Worker     bool mSampleMaskEnabled;
517*8975f5c5SAndroid Build Coastguard Worker     gl::SampleMaskArray<GLbitfield> mSampleMaskValues;
518*8975f5c5SAndroid Build Coastguard Worker 
519*8975f5c5SAndroid Build Coastguard Worker     bool mDepthTestEnabled;
520*8975f5c5SAndroid Build Coastguard Worker     GLenum mDepthFunc;
521*8975f5c5SAndroid Build Coastguard Worker     bool mDepthMask;
522*8975f5c5SAndroid Build Coastguard Worker     bool mStencilTestEnabled;
523*8975f5c5SAndroid Build Coastguard Worker     GLenum mStencilFrontFunc;
524*8975f5c5SAndroid Build Coastguard Worker     GLint mStencilFrontRef;
525*8975f5c5SAndroid Build Coastguard Worker     GLuint mStencilFrontValueMask;
526*8975f5c5SAndroid Build Coastguard Worker     GLenum mStencilFrontStencilFailOp;
527*8975f5c5SAndroid Build Coastguard Worker     GLenum mStencilFrontStencilPassDepthFailOp;
528*8975f5c5SAndroid Build Coastguard Worker     GLenum mStencilFrontStencilPassDepthPassOp;
529*8975f5c5SAndroid Build Coastguard Worker     GLuint mStencilFrontWritemask;
530*8975f5c5SAndroid Build Coastguard Worker     GLenum mStencilBackFunc;
531*8975f5c5SAndroid Build Coastguard Worker     GLint mStencilBackRef;
532*8975f5c5SAndroid Build Coastguard Worker     GLuint mStencilBackValueMask;
533*8975f5c5SAndroid Build Coastguard Worker     GLenum mStencilBackStencilFailOp;
534*8975f5c5SAndroid Build Coastguard Worker     GLenum mStencilBackStencilPassDepthFailOp;
535*8975f5c5SAndroid Build Coastguard Worker     GLenum mStencilBackStencilPassDepthPassOp;
536*8975f5c5SAndroid Build Coastguard Worker     GLuint mStencilBackWritemask;
537*8975f5c5SAndroid Build Coastguard Worker 
538*8975f5c5SAndroid Build Coastguard Worker     bool mCullFaceEnabled;
539*8975f5c5SAndroid Build Coastguard Worker     gl::CullFaceMode mCullFace;
540*8975f5c5SAndroid Build Coastguard Worker     GLenum mFrontFace;
541*8975f5c5SAndroid Build Coastguard Worker     gl::PolygonMode mPolygonMode;
542*8975f5c5SAndroid Build Coastguard Worker     bool mPolygonOffsetPointEnabled;
543*8975f5c5SAndroid Build Coastguard Worker     bool mPolygonOffsetLineEnabled;
544*8975f5c5SAndroid Build Coastguard Worker     bool mPolygonOffsetFillEnabled;
545*8975f5c5SAndroid Build Coastguard Worker     GLfloat mPolygonOffsetFactor;
546*8975f5c5SAndroid Build Coastguard Worker     GLfloat mPolygonOffsetUnits;
547*8975f5c5SAndroid Build Coastguard Worker     GLfloat mPolygonOffsetClamp;
548*8975f5c5SAndroid Build Coastguard Worker     bool mDepthClampEnabled;
549*8975f5c5SAndroid Build Coastguard Worker     bool mRasterizerDiscardEnabled;
550*8975f5c5SAndroid Build Coastguard Worker     float mLineWidth;
551*8975f5c5SAndroid Build Coastguard Worker 
552*8975f5c5SAndroid Build Coastguard Worker     bool mPrimitiveRestartEnabled;
553*8975f5c5SAndroid Build Coastguard Worker     GLuint mPrimitiveRestartIndex;
554*8975f5c5SAndroid Build Coastguard Worker 
555*8975f5c5SAndroid Build Coastguard Worker     gl::ColorF mClearColor;
556*8975f5c5SAndroid Build Coastguard Worker     float mClearDepth;
557*8975f5c5SAndroid Build Coastguard Worker     GLint mClearStencil;
558*8975f5c5SAndroid Build Coastguard Worker 
559*8975f5c5SAndroid Build Coastguard Worker     bool mFramebufferSRGBAvailable;
560*8975f5c5SAndroid Build Coastguard Worker     bool mFramebufferSRGBEnabled;
561*8975f5c5SAndroid Build Coastguard Worker     const bool mHasSeparateFramebufferBindings;
562*8975f5c5SAndroid Build Coastguard Worker 
563*8975f5c5SAndroid Build Coastguard Worker     bool mDitherEnabled;
564*8975f5c5SAndroid Build Coastguard Worker     bool mTextureCubemapSeamlessEnabled;
565*8975f5c5SAndroid Build Coastguard Worker 
566*8975f5c5SAndroid Build Coastguard Worker     bool mMultisamplingEnabled;
567*8975f5c5SAndroid Build Coastguard Worker     bool mSampleAlphaToOneEnabled;
568*8975f5c5SAndroid Build Coastguard Worker 
569*8975f5c5SAndroid Build Coastguard Worker     GLenum mCoverageModulation;
570*8975f5c5SAndroid Build Coastguard Worker 
571*8975f5c5SAndroid Build Coastguard Worker     const bool mIsMultiviewEnabled;
572*8975f5c5SAndroid Build Coastguard Worker 
573*8975f5c5SAndroid Build Coastguard Worker     GLenum mProvokingVertex;
574*8975f5c5SAndroid Build Coastguard Worker 
575*8975f5c5SAndroid Build Coastguard Worker     gl::ClipDistanceEnableBits mEnabledClipDistances;
576*8975f5c5SAndroid Build Coastguard Worker     const size_t mMaxClipDistances;
577*8975f5c5SAndroid Build Coastguard Worker 
578*8975f5c5SAndroid Build Coastguard Worker     bool mLogicOpEnabled;
579*8975f5c5SAndroid Build Coastguard Worker     gl::LogicalOperation mLogicOp;
580*8975f5c5SAndroid Build Coastguard Worker 
581*8975f5c5SAndroid Build Coastguard Worker     gl::state::DirtyBits mLocalDirtyBits;
582*8975f5c5SAndroid Build Coastguard Worker     gl::state::ExtendedDirtyBits mLocalExtendedDirtyBits;
583*8975f5c5SAndroid Build Coastguard Worker     gl::AttributesMask mLocalDirtyCurrentValues;
584*8975f5c5SAndroid Build Coastguard Worker };
585*8975f5c5SAndroid Build Coastguard Worker 
586*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
587*8975f5c5SAndroid Build Coastguard Worker 
588*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_RENDERER_GL_STATEMANAGERGL_H_
589