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 // RendererGL.h: Defines the class interface for RendererGL. 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_GL_RENDERERGL_H_ 10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_GL_RENDERERGL_H_ 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Worker #include <list> 13*8975f5c5SAndroid Build Coastguard Worker #include <mutex> 14*8975f5c5SAndroid Build Coastguard Worker 15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Caps.h" 16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h" 17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Version.h" 18*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/gl/renderergl_utils.h" 19*8975f5c5SAndroid Build Coastguard Worker #include "platform/autogen/FeaturesGL_autogen.h" 20*8975f5c5SAndroid Build Coastguard Worker 21*8975f5c5SAndroid Build Coastguard Worker namespace angle 22*8975f5c5SAndroid Build Coastguard Worker { 23*8975f5c5SAndroid Build Coastguard Worker struct FrontendFeatures; 24*8975f5c5SAndroid Build Coastguard Worker } // namespace angle 25*8975f5c5SAndroid Build Coastguard Worker 26*8975f5c5SAndroid Build Coastguard Worker namespace gl 27*8975f5c5SAndroid Build Coastguard Worker { 28*8975f5c5SAndroid Build Coastguard Worker struct IndexRange; 29*8975f5c5SAndroid Build Coastguard Worker class Path; 30*8975f5c5SAndroid Build Coastguard Worker class State; 31*8975f5c5SAndroid Build Coastguard Worker } // namespace gl 32*8975f5c5SAndroid Build Coastguard Worker 33*8975f5c5SAndroid Build Coastguard Worker namespace egl 34*8975f5c5SAndroid Build Coastguard Worker { 35*8975f5c5SAndroid Build Coastguard Worker class AttributeMap; 36*8975f5c5SAndroid Build Coastguard Worker } // namespace egl 37*8975f5c5SAndroid Build Coastguard Worker 38*8975f5c5SAndroid Build Coastguard Worker namespace sh 39*8975f5c5SAndroid Build Coastguard Worker { 40*8975f5c5SAndroid Build Coastguard Worker struct BlockMemberInfo; 41*8975f5c5SAndroid Build Coastguard Worker } // namespace sh 42*8975f5c5SAndroid Build Coastguard Worker 43*8975f5c5SAndroid Build Coastguard Worker namespace rx 44*8975f5c5SAndroid Build Coastguard Worker { 45*8975f5c5SAndroid Build Coastguard Worker class BlitGL; 46*8975f5c5SAndroid Build Coastguard Worker class ClearMultiviewGL; 47*8975f5c5SAndroid Build Coastguard Worker class ContextImpl; 48*8975f5c5SAndroid Build Coastguard Worker class DisplayGL; 49*8975f5c5SAndroid Build Coastguard Worker class FunctionsGL; 50*8975f5c5SAndroid Build Coastguard Worker class RendererGL; 51*8975f5c5SAndroid Build Coastguard Worker class StateManagerGL; 52*8975f5c5SAndroid Build Coastguard Worker 53*8975f5c5SAndroid Build Coastguard Worker class RendererGL : angle::NonCopyable 54*8975f5c5SAndroid Build Coastguard Worker { 55*8975f5c5SAndroid Build Coastguard Worker public: 56*8975f5c5SAndroid Build Coastguard Worker RendererGL(std::unique_ptr<FunctionsGL> functions, 57*8975f5c5SAndroid Build Coastguard Worker const egl::AttributeMap &attribMap, 58*8975f5c5SAndroid Build Coastguard Worker DisplayGL *display); 59*8975f5c5SAndroid Build Coastguard Worker virtual ~RendererGL(); 60*8975f5c5SAndroid Build Coastguard Worker 61*8975f5c5SAndroid Build Coastguard Worker angle::Result flush(); 62*8975f5c5SAndroid Build Coastguard Worker angle::Result finish(); 63*8975f5c5SAndroid Build Coastguard Worker 64*8975f5c5SAndroid Build Coastguard Worker gl::GraphicsResetStatus getResetStatus(); 65*8975f5c5SAndroid Build Coastguard Worker 66*8975f5c5SAndroid Build Coastguard Worker // EXT_debug_marker 67*8975f5c5SAndroid Build Coastguard Worker void insertEventMarker(GLsizei length, const char *marker); 68*8975f5c5SAndroid Build Coastguard Worker void pushGroupMarker(GLsizei length, const char *marker); 69*8975f5c5SAndroid Build Coastguard Worker void popGroupMarker(); 70*8975f5c5SAndroid Build Coastguard Worker 71*8975f5c5SAndroid Build Coastguard Worker // KHR_debug 72*8975f5c5SAndroid Build Coastguard Worker void pushDebugGroup(GLenum source, GLuint id, const std::string &message); 73*8975f5c5SAndroid Build Coastguard Worker void popDebugGroup(); 74*8975f5c5SAndroid Build Coastguard Worker 75*8975f5c5SAndroid Build Coastguard Worker GLint getGPUDisjoint(); 76*8975f5c5SAndroid Build Coastguard Worker GLint64 getTimestamp(); 77*8975f5c5SAndroid Build Coastguard Worker 78*8975f5c5SAndroid Build Coastguard Worker const gl::Version &getMaxSupportedESVersion() const; getFunctions()79*8975f5c5SAndroid Build Coastguard Worker const FunctionsGL *getFunctions() const { return mFunctions.get(); } getStateManager()80*8975f5c5SAndroid Build Coastguard Worker StateManagerGL *getStateManager() const { return mStateManager; } getFeatures()81*8975f5c5SAndroid Build Coastguard Worker const angle::FeaturesGL &getFeatures() const { return mFeatures; } getBlitter()82*8975f5c5SAndroid Build Coastguard Worker BlitGL *getBlitter() const { return mBlitter; } getMultiviewClearer()83*8975f5c5SAndroid Build Coastguard Worker ClearMultiviewGL *getMultiviewClearer() const { return mMultiviewClearer; } 84*8975f5c5SAndroid Build Coastguard Worker 85*8975f5c5SAndroid Build Coastguard Worker MultiviewImplementationTypeGL getMultiviewImplementationType() const; 86*8975f5c5SAndroid Build Coastguard Worker const gl::Caps &getNativeCaps() const; 87*8975f5c5SAndroid Build Coastguard Worker const gl::TextureCapsMap &getNativeTextureCaps() const; 88*8975f5c5SAndroid Build Coastguard Worker const gl::Extensions &getNativeExtensions() const; 89*8975f5c5SAndroid Build Coastguard Worker const gl::Limitations &getNativeLimitations() const; 90*8975f5c5SAndroid Build Coastguard Worker const ShPixelLocalStorageOptions &getNativePixelLocalStorageOptions() const; 91*8975f5c5SAndroid Build Coastguard Worker void initializeFrontendFeatures(angle::FrontendFeatures *features) const; 92*8975f5c5SAndroid Build Coastguard Worker 93*8975f5c5SAndroid Build Coastguard Worker angle::Result dispatchCompute(const gl::Context *context, 94*8975f5c5SAndroid Build Coastguard Worker GLuint numGroupsX, 95*8975f5c5SAndroid Build Coastguard Worker GLuint numGroupsY, 96*8975f5c5SAndroid Build Coastguard Worker GLuint numGroupsZ); 97*8975f5c5SAndroid Build Coastguard Worker angle::Result dispatchComputeIndirect(const gl::Context *context, GLintptr indirect); 98*8975f5c5SAndroid Build Coastguard Worker 99*8975f5c5SAndroid Build Coastguard Worker angle::Result memoryBarrier(GLbitfield barriers); 100*8975f5c5SAndroid Build Coastguard Worker angle::Result memoryBarrierByRegion(GLbitfield barriers); 101*8975f5c5SAndroid Build Coastguard Worker 102*8975f5c5SAndroid Build Coastguard Worker void framebufferFetchBarrier(); 103*8975f5c5SAndroid Build Coastguard Worker 104*8975f5c5SAndroid Build Coastguard Worker // Checks if the driver has the KHR_parallel_shader_compile or ARB_parallel_shader_compile 105*8975f5c5SAndroid Build Coastguard Worker // extension. 106*8975f5c5SAndroid Build Coastguard Worker bool hasNativeParallelCompile(); 107*8975f5c5SAndroid Build Coastguard Worker void setMaxShaderCompilerThreads(GLuint count); 108*8975f5c5SAndroid Build Coastguard Worker 109*8975f5c5SAndroid Build Coastguard Worker void setNeedsFlushBeforeDeleteTextures(); 110*8975f5c5SAndroid Build Coastguard Worker void flushIfNecessaryBeforeDeleteTextures(); 111*8975f5c5SAndroid Build Coastguard Worker 112*8975f5c5SAndroid Build Coastguard Worker void markWorkSubmitted(); 113*8975f5c5SAndroid Build Coastguard Worker 114*8975f5c5SAndroid Build Coastguard Worker void handleGPUSwitch(); 115*8975f5c5SAndroid Build Coastguard Worker 116*8975f5c5SAndroid Build Coastguard Worker private: 117*8975f5c5SAndroid Build Coastguard Worker void ensureCapsInitialized() const; 118*8975f5c5SAndroid Build Coastguard Worker void generateCaps(gl::Caps *outCaps, 119*8975f5c5SAndroid Build Coastguard Worker gl::TextureCapsMap *outTextureCaps, 120*8975f5c5SAndroid Build Coastguard Worker gl::Extensions *outExtensions, 121*8975f5c5SAndroid Build Coastguard Worker gl::Limitations *outLimitations) const; 122*8975f5c5SAndroid Build Coastguard Worker 123*8975f5c5SAndroid Build Coastguard Worker mutable gl::Version mMaxSupportedESVersion; 124*8975f5c5SAndroid Build Coastguard Worker 125*8975f5c5SAndroid Build Coastguard Worker std::unique_ptr<FunctionsGL> mFunctions; 126*8975f5c5SAndroid Build Coastguard Worker StateManagerGL *mStateManager; 127*8975f5c5SAndroid Build Coastguard Worker 128*8975f5c5SAndroid Build Coastguard Worker BlitGL *mBlitter; 129*8975f5c5SAndroid Build Coastguard Worker ClearMultiviewGL *mMultiviewClearer; 130*8975f5c5SAndroid Build Coastguard Worker 131*8975f5c5SAndroid Build Coastguard Worker bool mUseDebugOutput; 132*8975f5c5SAndroid Build Coastguard Worker 133*8975f5c5SAndroid Build Coastguard Worker mutable bool mCapsInitialized; 134*8975f5c5SAndroid Build Coastguard Worker mutable gl::Caps mNativeCaps; 135*8975f5c5SAndroid Build Coastguard Worker mutable gl::TextureCapsMap mNativeTextureCaps; 136*8975f5c5SAndroid Build Coastguard Worker mutable gl::Extensions mNativeExtensions; 137*8975f5c5SAndroid Build Coastguard Worker mutable gl::Limitations mNativeLimitations; 138*8975f5c5SAndroid Build Coastguard Worker mutable ShPixelLocalStorageOptions mNativePLSOptions; 139*8975f5c5SAndroid Build Coastguard Worker mutable MultiviewImplementationTypeGL mMultiviewImplementationType; 140*8975f5c5SAndroid Build Coastguard Worker 141*8975f5c5SAndroid Build Coastguard Worker bool mWorkDoneSinceLastFlush = false; 142*8975f5c5SAndroid Build Coastguard Worker 143*8975f5c5SAndroid Build Coastguard Worker bool mNativeParallelCompileEnabled; 144*8975f5c5SAndroid Build Coastguard Worker 145*8975f5c5SAndroid Build Coastguard Worker angle::FeaturesGL mFeatures; 146*8975f5c5SAndroid Build Coastguard Worker 147*8975f5c5SAndroid Build Coastguard Worker // Workaround for anglebug.com/40644715 148*8975f5c5SAndroid Build Coastguard Worker bool mNeedsFlushBeforeDeleteTextures; 149*8975f5c5SAndroid Build Coastguard Worker }; 150*8975f5c5SAndroid Build Coastguard Worker 151*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 152*8975f5c5SAndroid Build Coastguard Worker 153*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_GL_RENDERERGL_H_ 154