| Index: src/gpu/gl/GrGLAssembleInterface.cpp
|
| diff --git a/src/gpu/gl/GrGLAssembleInterface.cpp b/src/gpu/gl/GrGLAssembleInterface.cpp
|
| index ce439ec63f50bd2a3a125951e00e814f5d9c585b..35c8756c302e87ee10ec0b6cd801b8255bc64f41 100644
|
| --- a/src/gpu/gl/GrGLAssembleInterface.cpp
|
| +++ b/src/gpu/gl/GrGLAssembleInterface.cpp
|
| @@ -14,6 +14,8 @@
|
| #define GET_PROC_SUFFIX(F, S) functions->f ## F = (GrGL ## F ## Proc) get(ctx, "gl" #F #S)
|
| #define GET_PROC_LOCAL(F) GrGL ## F ## Proc F = (GrGL ## F ## Proc) get(ctx, "gl" #F)
|
|
|
| +#define GET_EGL_PROC_SUFFIX(F, S) functions->f ## F = (GrEGL ## F ## Proc) get(ctx, "egl" #F #S)
|
| +
|
| const GrGLInterface* GrGLAssembleInterface(void* ctx, GrGLGetProc get) {
|
| GET_PROC_LOCAL(GetString);
|
| if (nullptr == GetString) {
|
| @@ -35,6 +37,21 @@ const GrGLInterface* GrGLAssembleInterface(void* ctx, GrGLGetProc get) {
|
| return nullptr;
|
| }
|
|
|
| +static void get_egl_query_and_display(GrEGLQueryStringProc* queryString, GrEGLDisplay* display,
|
| + void* ctx, GrGLGetProc get) {
|
| + *queryString = (GrEGLQueryStringProc) get(ctx, "eglQueryString");
|
| + *display = GR_EGL_NO_DISPLAY;
|
| + if (*queryString) {
|
| + GrEGLGetCurrentDisplayProc getCurrentDisplay =
|
| + (GrEGLGetCurrentDisplayProc) get(ctx, "eglGetCurrentDisplay");
|
| + if (getCurrentDisplay) {
|
| + *display = getCurrentDisplay();
|
| + } else {
|
| + *queryString = nullptr;
|
| + }
|
| + }
|
| +}
|
| +
|
| const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) {
|
| GET_PROC_LOCAL(GetString);
|
| GET_PROC_LOCAL(GetStringi);
|
| @@ -53,8 +70,12 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) {
|
| return nullptr;
|
| }
|
|
|
| + GrEGLQueryStringProc queryString;
|
| + GrEGLDisplay display;
|
| + get_egl_query_and_display(&queryString, &display, ctx, get);
|
| GrGLExtensions extensions;
|
| - if (!extensions.init(kGL_GrGLStandard, GetString, GetStringi, GetIntegerv)) {
|
| + if (!extensions.init(kGL_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString,
|
| + display)) {
|
| return nullptr;
|
| }
|
|
|
| @@ -470,6 +491,11 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) {
|
| GET_PROC(ObjectLabel);
|
| }
|
|
|
| + if (extensions.has("EGL_KHR_image") || extensions.has("EGL_KHR_image_base")) {
|
| + GET_EGL_PROC_SUFFIX(CreateImage, KHR);
|
| + GET_EGL_PROC_SUFFIX(DestroyImage, KHR);
|
| + }
|
| +
|
| interface->fStandard = kGL_GrGLStandard;
|
| interface->fExtensions.swap(&extensions);
|
|
|
| @@ -491,8 +517,12 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) {
|
|
|
| GET_PROC_LOCAL(GetIntegerv);
|
| GET_PROC_LOCAL(GetStringi);
|
| + GrEGLQueryStringProc queryString;
|
| + GrEGLDisplay display;
|
| + get_egl_query_and_display(&queryString, &display, ctx, get);
|
| GrGLExtensions extensions;
|
| - if (!extensions.init(kGLES_GrGLStandard, GetString, GetStringi, GetIntegerv)) {
|
| + if (!extensions.init(kGLES_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString,
|
| + display)) {
|
| return nullptr;
|
| }
|
|
|
| @@ -779,6 +809,11 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) {
|
| GET_PROC_SUFFIX(BindUniformLocation, CHROMIUM);
|
| }
|
|
|
| + if (extensions.has("EGL_KHR_image") || extensions.has("EGL_KHR_image_base")) {
|
| + GET_EGL_PROC_SUFFIX(CreateImage, KHR);
|
| + GET_EGL_PROC_SUFFIX(DestroyImage, KHR);
|
| + }
|
| +
|
| interface->fStandard = kGLES_GrGLStandard;
|
| interface->fExtensions.swap(&extensions);
|
|
|
|
|