• 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     EGLContext createContext(EGLConfig config,
50                              EGLContext share_context,
51                              EGLint const *attrib_list) const;
52     EGLSurface createPbufferSurface(EGLConfig config, const EGLint *attrib_list) const;
53     EGLSurface createWindowSurface(EGLConfig config,
54                                    EGLNativeWindowType win,
55                                    const EGLint *attrib_list) const;
56     EGLBoolean destroyContext(EGLContext context) const;
57     EGLBoolean destroySurface(EGLSurface surface) const;
58     EGLBoolean makeCurrent(EGLSurface surface, EGLContext context) const;
59     const char *queryString(EGLint name) const;
60     EGLBoolean querySurface(EGLSurface surface, EGLint attribute, EGLint *value) const;
61     EGLBoolean swapBuffers(EGLSurface surface) const;
62 
63     EGLBoolean bindTexImage(EGLSurface surface, EGLint buffer) const;
64     EGLBoolean releaseTexImage(EGLSurface surface, EGLint buffer) const;
65     EGLBoolean surfaceAttrib(EGLSurface surface, EGLint attribute, EGLint value) const;
66     EGLBoolean swapInterval(EGLint interval) const;
67 
68     EGLImageKHR createImageKHR(EGLContext context,
69                                EGLenum target,
70                                EGLClientBuffer buffer,
71                                const EGLint *attrib_list) const;
72     EGLBoolean destroyImageKHR(EGLImageKHR image) const;
73 
74     EGLSyncKHR createSyncKHR(EGLenum type, const EGLint *attrib_list) const;
75     EGLBoolean destroySyncKHR(EGLSyncKHR sync) const;
76     EGLint clientWaitSyncKHR(EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout) const;
77     EGLBoolean getSyncAttribKHR(EGLSyncKHR sync, EGLint attribute, EGLint *value) const;
78 
79     EGLint waitSyncKHR(EGLSyncKHR sync, EGLint flags) const;
80 
81     EGLBoolean swapBuffersWithDamageKHR(EGLSurface surface, EGLint *rects, EGLint n_rects) const;
82 
83     EGLBoolean presentationTimeANDROID(EGLSurface surface, EGLnsecsANDROID time) const;
84 
85     void setBlobCacheFuncsANDROID(EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get) const;
86 
87     EGLBoolean getCompositorTimingSupportedANDROID(EGLSurface surface, EGLint name) const;
88     EGLBoolean getCompositorTimingANDROID(EGLSurface surface,
89                                           EGLint numTimestamps,
90                                           const EGLint *names,
91                                           EGLnsecsANDROID *values) const;
92     EGLBoolean getNextFrameIdANDROID(EGLSurface surface, EGLuint64KHR *frameId) const;
93     EGLBoolean getFrameTimestampSupportedANDROID(EGLSurface surface, EGLint timestamp) const;
94     EGLBoolean getFrameTimestampsANDROID(EGLSurface surface,
95                                          EGLuint64KHR frameId,
96                                          EGLint numTimestamps,
97                                          const EGLint *timestamps,
98                                          EGLnsecsANDROID *values) const;
99 
100     EGLint dupNativeFenceFDANDROID(EGLSync sync) const;
101 
102   private:
103     // So as to isolate from angle we do not include angleutils.h and cannot
104     // use angle::NonCopyable so we replicated it here instead.
105     FunctionsEGL(const FunctionsEGL &) = delete;
106     void operator=(const FunctionsEGL &) = delete;
107 
108     struct EGLDispatchTable;
109     EGLDispatchTable *mFnPtrs;
110     EGLDisplay mEGLDisplay;
111     std::vector<std::string> mExtensions;
112 };
113 }  // namespace rx
114 
115 #endif  // LIBANGLE_RENDERER_GL_CROS_FUNCTIONSEGL_H_
116