xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/DisplayImpl.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 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 // DisplayImpl.h: Implementation methods of egl::Display
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_DISPLAYIMPL_H_
10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_DISPLAYIMPL_H_
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include "common/Optional.h"
13*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Caps.h"
15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Config.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Observer.h"
18*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Stream.h"
19*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Version.h"
20*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/EGLImplFactory.h"
21*8975f5c5SAndroid Build Coastguard Worker #include "platform/Feature.h"
22*8975f5c5SAndroid Build Coastguard Worker 
23*8975f5c5SAndroid Build Coastguard Worker #include <set>
24*8975f5c5SAndroid Build Coastguard Worker #include <vector>
25*8975f5c5SAndroid Build Coastguard Worker 
26*8975f5c5SAndroid Build Coastguard Worker namespace angle
27*8975f5c5SAndroid Build Coastguard Worker {
28*8975f5c5SAndroid Build Coastguard Worker struct FrontendFeatures;
29*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
30*8975f5c5SAndroid Build Coastguard Worker 
31*8975f5c5SAndroid Build Coastguard Worker namespace egl
32*8975f5c5SAndroid Build Coastguard Worker {
33*8975f5c5SAndroid Build Coastguard Worker class AttributeMap;
34*8975f5c5SAndroid Build Coastguard Worker class BlobCache;
35*8975f5c5SAndroid Build Coastguard Worker class Display;
36*8975f5c5SAndroid Build Coastguard Worker struct DisplayState;
37*8975f5c5SAndroid Build Coastguard Worker struct Config;
38*8975f5c5SAndroid Build Coastguard Worker class Surface;
39*8975f5c5SAndroid Build Coastguard Worker class ImageSibling;
40*8975f5c5SAndroid Build Coastguard Worker class Thread;
41*8975f5c5SAndroid Build Coastguard Worker }  // namespace egl
42*8975f5c5SAndroid Build Coastguard Worker 
43*8975f5c5SAndroid Build Coastguard Worker namespace gl
44*8975f5c5SAndroid Build Coastguard Worker {
45*8975f5c5SAndroid Build Coastguard Worker class Context;
46*8975f5c5SAndroid Build Coastguard Worker }  // namespace gl
47*8975f5c5SAndroid Build Coastguard Worker 
48*8975f5c5SAndroid Build Coastguard Worker namespace rx
49*8975f5c5SAndroid Build Coastguard Worker {
50*8975f5c5SAndroid Build Coastguard Worker class SurfaceImpl;
51*8975f5c5SAndroid Build Coastguard Worker class ImageImpl;
52*8975f5c5SAndroid Build Coastguard Worker struct ConfigDesc;
53*8975f5c5SAndroid Build Coastguard Worker class DeviceImpl;
54*8975f5c5SAndroid Build Coastguard Worker class StreamProducerImpl;
55*8975f5c5SAndroid Build Coastguard Worker 
56*8975f5c5SAndroid Build Coastguard Worker class DisplayImpl : public EGLImplFactory, public angle::Subject
57*8975f5c5SAndroid Build Coastguard Worker {
58*8975f5c5SAndroid Build Coastguard Worker   public:
59*8975f5c5SAndroid Build Coastguard Worker     DisplayImpl(const egl::DisplayState &state);
60*8975f5c5SAndroid Build Coastguard Worker     ~DisplayImpl() override;
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error initialize(egl::Display *display) = 0;
63*8975f5c5SAndroid Build Coastguard Worker     virtual void terminate()                             = 0;
64*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error prepareForCall();
65*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error releaseThread();
66*8975f5c5SAndroid Build Coastguard Worker 
67*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error makeCurrent(egl::Display *display,
68*8975f5c5SAndroid Build Coastguard Worker                                    egl::Surface *drawSurface,
69*8975f5c5SAndroid Build Coastguard Worker                                    egl::Surface *readSurface,
70*8975f5c5SAndroid Build Coastguard Worker                                    gl::Context *context) = 0;
71*8975f5c5SAndroid Build Coastguard Worker 
72*8975f5c5SAndroid Build Coastguard Worker     virtual egl::ConfigSet generateConfigs() = 0;
73*8975f5c5SAndroid Build Coastguard Worker 
74*8975f5c5SAndroid Build Coastguard Worker     virtual bool testDeviceLost()                                     = 0;
75*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error restoreLostDevice(const egl::Display *display) = 0;
76*8975f5c5SAndroid Build Coastguard Worker 
77*8975f5c5SAndroid Build Coastguard Worker     virtual bool isValidNativeWindow(EGLNativeWindowType window) const = 0;
78*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error validateClientBuffer(const egl::Config *configuration,
79*8975f5c5SAndroid Build Coastguard Worker                                             EGLenum buftype,
80*8975f5c5SAndroid Build Coastguard Worker                                             EGLClientBuffer clientBuffer,
81*8975f5c5SAndroid Build Coastguard Worker                                             const egl::AttributeMap &attribs) const;
82*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error validateImageClientBuffer(const gl::Context *context,
83*8975f5c5SAndroid Build Coastguard Worker                                                  EGLenum target,
84*8975f5c5SAndroid Build Coastguard Worker                                                  EGLClientBuffer clientBuffer,
85*8975f5c5SAndroid Build Coastguard Worker                                                  const egl::AttributeMap &attribs) const;
86*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error validatePixmap(const egl::Config *config,
87*8975f5c5SAndroid Build Coastguard Worker                                       EGLNativePixmapType pixmap,
88*8975f5c5SAndroid Build Coastguard Worker                                       const egl::AttributeMap &attributes) const;
89*8975f5c5SAndroid Build Coastguard Worker 
90*8975f5c5SAndroid Build Coastguard Worker     virtual std::string getRendererDescription()                  = 0;
91*8975f5c5SAndroid Build Coastguard Worker     virtual std::string getVendorString()                         = 0;
92*8975f5c5SAndroid Build Coastguard Worker     virtual std::string getVersionString(bool includeFullVersion) = 0;
93*8975f5c5SAndroid Build Coastguard Worker 
94*8975f5c5SAndroid Build Coastguard Worker     virtual DeviceImpl *createDevice();
95*8975f5c5SAndroid Build Coastguard Worker 
96*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error waitClient(const gl::Context *context)                = 0;
97*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error waitNative(const gl::Context *context, EGLint engine) = 0;
98*8975f5c5SAndroid Build Coastguard Worker     virtual gl::Version getMaxSupportedESVersion() const                     = 0;
99*8975f5c5SAndroid Build Coastguard Worker     virtual gl::Version getMaxConformantESVersion() const                    = 0;
100*8975f5c5SAndroid Build Coastguard Worker     const egl::Caps &getCaps() const;
101*8975f5c5SAndroid Build Coastguard Worker 
setBlobCacheFuncs(EGLSetBlobFuncANDROID set,EGLGetBlobFuncANDROID get)102*8975f5c5SAndroid Build Coastguard Worker     virtual void setBlobCacheFuncs(EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get) {}
103*8975f5c5SAndroid Build Coastguard Worker 
104*8975f5c5SAndroid Build Coastguard Worker     const egl::DisplayExtensions &getExtensions() const;
105*8975f5c5SAndroid Build Coastguard Worker 
setBlobCache(egl::BlobCache * blobCache)106*8975f5c5SAndroid Build Coastguard Worker     void setBlobCache(egl::BlobCache *blobCache) { mBlobCache = blobCache; }
getBlobCache()107*8975f5c5SAndroid Build Coastguard Worker     egl::BlobCache *getBlobCache() const { return mBlobCache; }
108*8975f5c5SAndroid Build Coastguard Worker 
initializeFrontendFeatures(angle::FrontendFeatures * features)109*8975f5c5SAndroid Build Coastguard Worker     virtual void initializeFrontendFeatures(angle::FrontendFeatures *features) const {}
110*8975f5c5SAndroid Build Coastguard Worker 
111*8975f5c5SAndroid Build Coastguard Worker     virtual void populateFeatureList(angle::FeatureList *features) = 0;
112*8975f5c5SAndroid Build Coastguard Worker 
getState()113*8975f5c5SAndroid Build Coastguard Worker     const egl::DisplayState &getState() const { return mState; }
114*8975f5c5SAndroid Build Coastguard Worker 
115*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error handleGPUSwitch();
116*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error forceGPUSwitch(EGLint gpuIDHigh, EGLint gpuIDLow);
117*8975f5c5SAndroid Build Coastguard Worker 
118*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error waitUntilWorkScheduled();
119*8975f5c5SAndroid Build Coastguard Worker 
120*8975f5c5SAndroid Build Coastguard Worker     virtual angle::NativeWindowSystem getWindowSystem() const;
121*8975f5c5SAndroid Build Coastguard Worker 
122*8975f5c5SAndroid Build Coastguard Worker     virtual bool supportsDmaBufFormat(EGLint format) const;
123*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error queryDmaBufFormats(EGLint max_formats, EGLint *formats, EGLint *num_formats);
124*8975f5c5SAndroid Build Coastguard Worker     virtual egl::Error queryDmaBufModifiers(EGLint format,
125*8975f5c5SAndroid Build Coastguard Worker                                             EGLint max_modifiers,
126*8975f5c5SAndroid Build Coastguard Worker                                             EGLuint64KHR *modifiers,
127*8975f5c5SAndroid Build Coastguard Worker                                             EGLBoolean *external_only,
128*8975f5c5SAndroid Build Coastguard Worker                                             EGLint *num_modifiers);
129*8975f5c5SAndroid Build Coastguard Worker 
130*8975f5c5SAndroid Build Coastguard Worker   protected:
131*8975f5c5SAndroid Build Coastguard Worker     const egl::DisplayState &mState;
132*8975f5c5SAndroid Build Coastguard Worker 
133*8975f5c5SAndroid Build Coastguard Worker   private:
134*8975f5c5SAndroid Build Coastguard Worker     virtual void generateExtensions(egl::DisplayExtensions *outExtensions) const = 0;
135*8975f5c5SAndroid Build Coastguard Worker     virtual void generateCaps(egl::Caps *outCaps) const                          = 0;
136*8975f5c5SAndroid Build Coastguard Worker 
137*8975f5c5SAndroid Build Coastguard Worker     mutable bool mExtensionsInitialized;
138*8975f5c5SAndroid Build Coastguard Worker     mutable egl::DisplayExtensions mExtensions;
139*8975f5c5SAndroid Build Coastguard Worker 
140*8975f5c5SAndroid Build Coastguard Worker     mutable bool mCapsInitialized;
141*8975f5c5SAndroid Build Coastguard Worker     mutable egl::Caps mCaps;
142*8975f5c5SAndroid Build Coastguard Worker 
143*8975f5c5SAndroid Build Coastguard Worker     egl::BlobCache *mBlobCache;
144*8975f5c5SAndroid Build Coastguard Worker };
145*8975f5c5SAndroid Build Coastguard Worker 
146*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
147*8975f5c5SAndroid Build Coastguard Worker 
148*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_RENDERER_DISPLAYIMPL_H_
149