• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2016 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // FunctionsEGL.h: Defines the FunctionsEGL class to load functions and data from EGL
8 
9 #ifndef LIBANGLE_RENDERER_GL_CROS_FUNCTIONSEGL_H_
10 #define LIBANGLE_RENDERER_GL_CROS_FUNCTIONSEGL_H_
11 
12 #include <EGL/egl.h>
13 #include <EGL/eglext.h>
14 
15 #include <string>
16 #include <vector>
17 
18 #include "libANGLE/Error.h"
19 
20 namespace rx
21 {
22 
23 class FunctionsGL;
24 
25 class FunctionsEGL
26 {
27   public:
28     FunctionsEGL();
29     virtual ~FunctionsEGL();
30 
31     int majorVersion;
32     int minorVersion;
33 
34     egl::Error initialize(EGLNativeDisplayType nativeDisplay);
35     egl::Error terminate();
36 
37     virtual void *getProcAddress(const char *name) const = 0;
38 
39     FunctionsGL *makeFunctionsGL() const;
40     bool hasExtension(const char *extension) const;
41     EGLDisplay getDisplay() const;
42     EGLint getError() const;
43 
44     EGLBoolean chooseConfig(EGLint const *attrib_list,
45                             EGLConfig *configs,
46                             EGLint config_size,
47                             EGLint *num_config) const;
48     EGLBoolean getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value) const;
49     EGLSurface getCurrentSurface(EGLint readdraw) const;
50     EGLContext createContext(EGLConfig config,
51                              EGLContext share_context,
52                              EGLint const *attrib_list) const;
53     EGLSurface createPbufferSurface(EGLConfig config, const EGLint *attrib_list) const;
54     EGLSurface createWindowSurface(EGLConfig config,
55                                    EGLNativeWindowType win,
56                                    const EGLint *attrib_list) const;
57     EGLBoolean destroyContext(EGLContext context) const;
58     EGLBoolean destroySurface(EGLSurface surface) const;
59     EGLBoolean makeCurrent(EGLSurface surface, EGLContext context) const;
60     const char *queryString(EGLint name) const;
61     EGLBoolean querySurface(EGLSurface surface, EGLint attribute, EGLint *value) const;
62     EGLBoolean swapBuffers(EGLSurface surface) const;
63 
64     EGLBoolean bindTexImage(EGLSurface surface, EGLint buffer) const;
65     EGLBoolean releaseTexImage(EGLSurface surface, EGLint buffer) const;
66     EGLBoolean surfaceAttrib(EGLSurface surface, EGLint attribute, EGLint value) const;
67     EGLBoolean swapInterval(EGLint interval) const;
68 
69     EGLContext getCurrentContext() const;
70 
71     EGLImageKHR createImageKHR(EGLContext context,
72                                EGLenum target,
73                                EGLClientBuffer buffer,
74                                const EGLint *attrib_list) const;
75     EGLBoolean destroyImageKHR(EGLImageKHR image) const;
76 
77     EGLSyncKHR createSyncKHR(EGLenum type, const EGLint *attrib_list) const;
78     EGLBoolean destroySyncKHR(EGLSyncKHR sync) const;
79     EGLint clientWaitSyncKHR(EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout) const;
80     EGLBoolean getSyncAttribKHR(EGLSyncKHR sync, EGLint attribute, EGLint *value) const;
81 
82     EGLint waitSyncKHR(EGLSyncKHR sync, EGLint flags) const;
83 
84     EGLBoolean swapBuffersWithDamageKHR(EGLSurface surface,
85                                         const EGLint *rects,
86                                         EGLint n_rects) const;
87 
88     EGLBoolean presentationTimeANDROID(EGLSurface surface, EGLnsecsANDROID time) const;
89 
90     void setBlobCacheFuncsANDROID(EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get) const;
91 
92     EGLBoolean getCompositorTimingSupportedANDROID(EGLSurface surface, EGLint name) const;
93     EGLBoolean getCompositorTimingANDROID(EGLSurface surface,
94                                           EGLint numTimestamps,
95                                           const EGLint *names,
96                                           EGLnsecsANDROID *values) const;
97     EGLBoolean getNextFrameIdANDROID(EGLSurface surface, EGLuint64KHR *frameId) const;
98     EGLBoolean getFrameTimestampSupportedANDROID(EGLSurface surface, EGLint timestamp) const;
99     EGLBoolean getFrameTimestampsANDROID(EGLSurface surface,
100                                          EGLuint64KHR frameId,
101                                          EGLint numTimestamps,
102                                          const EGLint *timestamps,
103                                          EGLnsecsANDROID *values) const;
104 
105     EGLint dupNativeFenceFDANDROID(EGLSync sync) const;
106 
107   private:
108     // So as to isolate from angle we do not include angleutils.h and cannot
109     // use angle::NonCopyable so we replicated it here instead.
110     FunctionsEGL(const FunctionsEGL &) = delete;
111     void operator=(const FunctionsEGL &) = delete;
112 
113     struct EGLDispatchTable;
114     EGLDispatchTable *mFnPtrs;
115     EGLDisplay mEGLDisplay;
116     std::vector<std::string> mExtensions;
117 };
118 }  // namespace rx
119 
120 #endif  // LIBANGLE_RENDERER_GL_CROS_FUNCTIONSEGL_H_
121