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