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