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