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