xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/gl/RendererGL.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 // 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