X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fegl%2Fmain%2Feglapi.c;h=7bf70eb53d654ed433306c3a81769927365db9d9;hb=429e936948045d6314235581b79d29755b8bdc8c;hp=7309eb08d1c2b49b0963ea88f4a394a7807be56b;hpb=7f848f9713a954f3caab279c0ff5ad5f81a2d066;p=mesa.git diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index 7309eb08d1c..7bf70eb53d6 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -96,7 +96,6 @@ #include "c11/threads.h" #include "util/macros.h" -#include "eglapi.h" #include "egldefines.h" #include "eglglobals.h" #include "eglcontext.h" @@ -172,7 +171,7 @@ struct _egl_entrypoint { }; -static inline _EGLDriver * +static inline const _EGLDriver * _eglCheckDisplay(_EGLDisplay *disp, const char *msg) { if (!disp) { @@ -187,10 +186,10 @@ _eglCheckDisplay(_EGLDisplay *disp, const char *msg) } -static inline _EGLDriver * +static inline const _EGLDriver * _eglCheckSurface(_EGLDisplay *disp, _EGLSurface *surf, const char *msg) { - _EGLDriver *drv = _eglCheckDisplay(disp, msg); + const _EGLDriver *drv = _eglCheckDisplay(disp, msg); if (!drv) return NULL; if (!surf) { @@ -201,10 +200,10 @@ _eglCheckSurface(_EGLDisplay *disp, _EGLSurface *surf, const char *msg) } -static inline _EGLDriver * +static inline const _EGLDriver * _eglCheckContext(_EGLDisplay *disp, _EGLContext *context, const char *msg) { - _EGLDriver *drv = _eglCheckDisplay(disp, msg); + const _EGLDriver *drv = _eglCheckDisplay(disp, msg); if (!drv) return NULL; if (!context) { @@ -215,10 +214,10 @@ _eglCheckContext(_EGLDisplay *disp, _EGLContext *context, const char *msg) } -static inline _EGLDriver * +static inline const _EGLDriver * _eglCheckConfig(_EGLDisplay *disp, _EGLConfig *conf, const char *msg) { - _EGLDriver *drv = _eglCheckDisplay(disp, msg); + const _EGLDriver *drv = _eglCheckDisplay(disp, msg); if (!drv) return NULL; if (!conf) { @@ -229,10 +228,10 @@ _eglCheckConfig(_EGLDisplay *disp, _EGLConfig *conf, const char *msg) } -static inline _EGLDriver * +static inline const _EGLDriver * _eglCheckSync(_EGLDisplay *disp, _EGLSync *s, const char *msg) { - _EGLDriver *drv = _eglCheckDisplay(disp, msg); + const _EGLDriver *drv = _eglCheckDisplay(disp, msg); if (!drv) return NULL; if (!s) { @@ -401,10 +400,13 @@ _eglGetPlatformDisplayCommon(EGLenum platform, void *native_display, attrib_list); break; #endif -#ifdef HAVE_SURFACELESS_PLATFORM case EGL_PLATFORM_SURFACELESS_MESA: disp = _eglGetSurfacelessDisplay(native_display, attrib_list); break; +#ifdef HAVE_ANDROID_PLATFORM + case EGL_PLATFORM_ANDROID_KHR: + disp = _eglGetAndroidDisplay(native_display, attrib_list); + break; #endif case EGL_PLATFORM_DEVICE_EXT: disp = _eglGetDeviceDisplay(native_display, attrib_list); @@ -592,6 +594,11 @@ _eglComputeVersion(_EGLDisplay *disp) disp->Extensions.KHR_gl_colorspace && disp->Extensions.KHR_surfaceless_context) disp->Version = 15; + + /* For Android P and below limit the EGL version to 1.4 */ +#if defined(ANDROID) && ANDROID_API_LEVEL <= 28 + disp->Version = 14; +#endif } /** @@ -609,7 +616,7 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); if (!disp->Initialized) { - if (!_eglMatchDriver(disp)) + if (!_eglInitializeDisplay(disp)) RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); /* limit to APIs supported by core */ @@ -665,12 +672,14 @@ eglTerminate(EGLDisplay dpy) RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); if (disp->Initialized) { - _EGLDriver *drv = disp->Driver; - - drv->API.Terminate(drv, disp); + disp->Driver->Terminate(disp); /* do not reset disp->Driver */ disp->ClientAPIsString[0] = 0; disp->Initialized = EGL_FALSE; + + /* Reset blob cache funcs on terminate. */ + disp->BlobCacheSet = NULL; + disp->BlobCacheGet = NULL; } RETURN_EGL_SUCCESS(disp, EGL_TRUE); @@ -681,15 +690,13 @@ const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name) { _EGLDisplay *disp; - _EGLDriver *drv; + const _EGLDriver *drv; +#if !USE_LIBGLVND if (dpy == EGL_NO_DISPLAY && name == EGL_EXTENSIONS) { - const char *ret = _eglGetClientExtensionString(); - if (ret != NULL) - RETURN_EGL_SUCCESS(NULL, ret); - else - RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, NULL); + RETURN_EGL_SUCCESS(NULL, _eglGlobal.ClientExtensionString); } +#endif disp = _eglLockDisplay(dpy); _EGL_FUNC_START(disp, EGL_OBJECT_DISPLAY_KHR, NULL, NULL); @@ -715,7 +722,7 @@ eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_DISPLAY_KHR, NULL, EGL_FALSE); @@ -725,10 +732,7 @@ eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, if (!num_config) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - if (drv->API.GetConfigs) - ret = drv->API.GetConfigs(drv, disp, configs, config_size, num_config); - else - ret = _eglGetConfigs(drv, disp, configs, config_size, num_config); + ret = _eglGetConfigs(drv, disp, configs, config_size, num_config); RETURN_EGL_EVAL(disp, ret); } @@ -739,7 +743,7 @@ eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_DISPLAY_KHR, NULL, EGL_FALSE); @@ -749,12 +753,8 @@ eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, if (!num_config) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - if (drv->API.ChooseConfig) - ret = drv->API.ChooseConfig(drv, disp, attrib_list, configs, - config_size, num_config); - else - ret = _eglChooseConfig(drv, disp, attrib_list, configs, - config_size, num_config); + ret = _eglChooseConfig(drv, disp, attrib_list, configs, + config_size, num_config); RETURN_EGL_EVAL(disp, ret); } @@ -766,17 +766,14 @@ eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLConfig *conf = _eglLookupConfig(config, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_DISPLAY_KHR, NULL, EGL_FALSE); _EGL_CHECK_CONFIG(disp, conf, EGL_FALSE, drv); - if (drv->API.GetConfigAttrib) - ret = drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); - else - ret = _eglGetConfigAttrib(drv, disp, conf, attribute, value); + ret = _eglGetConfigAttrib(drv, disp, conf, attribute, value); RETURN_EGL_EVAL(disp, ret); } @@ -789,7 +786,7 @@ eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLConfig *conf = _eglLookupConfig(config, disp); _EGLContext *share = _eglLookupContext(share_list, disp); - _EGLDriver *drv; + const _EGLDriver *drv; _EGLContext *context; EGLContext ret; @@ -805,7 +802,7 @@ eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, if (!share && share_list != EGL_NO_CONTEXT) RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_CONTEXT); - context = drv->API.CreateContext(drv, disp, conf, share, attrib_list); + context = drv->CreateContext(disp, conf, share, attrib_list); ret = (context) ? _eglLinkContext(context) : EGL_NO_CONTEXT; RETURN_EGL_EVAL(disp, ret); @@ -817,14 +814,14 @@ eglDestroyContext(EGLDisplay dpy, EGLContext ctx) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLContext *context = _eglLookupContext(ctx, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_CONTEXT_KHR, context, EGL_FALSE); _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); _eglUnlinkContext(context); - ret = drv->API.DestroyContext(drv, disp, context); + ret = drv->DestroyContext(disp, context); RETURN_EGL_EVAL(disp, ret); } @@ -838,7 +835,7 @@ eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, _EGLContext *context = _eglLookupContext(ctx, disp); _EGLSurface *draw_surf = _eglLookupSurface(draw, disp); _EGLSurface *read_surf = _eglLookupSurface(read, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_CONTEXT_KHR, context, EGL_FALSE); @@ -882,7 +879,7 @@ eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, if (read_surf && read_surf->Lost) RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_WINDOW, EGL_FALSE); - ret = drv->API.MakeCurrent(drv, disp, draw_surf, read_surf, context); + ret = drv->MakeCurrent(disp, draw_surf, read_surf, context); RETURN_EGL_EVAL(disp, ret); } @@ -894,13 +891,14 @@ eglQueryContext(EGLDisplay dpy, EGLContext ctx, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLContext *context = _eglLookupContext(ctx, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_CONTEXT_KHR, context, EGL_FALSE); _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); - ret = drv->API.QueryContext(drv, disp, context, attribute, value); + + ret = _eglQueryContext(drv, disp, context, attribute, value); RETURN_EGL_EVAL(disp, ret); } @@ -937,7 +935,7 @@ _eglCreateWindowSurfaceCommon(_EGLDisplay *disp, EGLConfig config, void *native_window, const EGLint *attrib_list) { _EGLConfig *conf = _eglLookupConfig(config, disp); - _EGLDriver *drv; + const _EGLDriver *drv; _EGLSurface *surf; EGLSurface ret; @@ -970,8 +968,7 @@ _eglCreateWindowSurfaceCommon(_EGLDisplay *disp, EGLConfig config, if (_eglNativeSurfaceAlreadyUsed(disp, native_window)) RETURN_EGL_ERROR(disp, EGL_BAD_ALLOC, EGL_NO_SURFACE); - surf = drv->API.CreateWindowSurface(drv, disp, conf, native_window, - attrib_list); + surf = drv->CreateWindowSurface(disp, conf, native_window, attrib_list); ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; RETURN_EGL_EVAL(disp, ret); @@ -1067,7 +1064,7 @@ _eglCreatePixmapSurfaceCommon(_EGLDisplay *disp, EGLConfig config, void *native_pixmap, const EGLint *attrib_list) { _EGLConfig *conf = _eglLookupConfig(config, disp); - _EGLDriver *drv; + const _EGLDriver *drv; _EGLSurface *surf; EGLSurface ret; @@ -1097,8 +1094,7 @@ _eglCreatePixmapSurfaceCommon(_EGLDisplay *disp, EGLConfig config, if (_eglNativeSurfaceAlreadyUsed(disp, native_pixmap)) RETURN_EGL_ERROR(disp, EGL_BAD_ALLOC, EGL_NO_SURFACE); - surf = drv->API.CreatePixmapSurface(drv, disp, conf, native_pixmap, - attrib_list); + surf = drv->CreatePixmapSurface(disp, conf, native_pixmap, attrib_list); ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; RETURN_EGL_EVAL(disp, ret); @@ -1160,7 +1156,7 @@ eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLConfig *conf = _eglLookupConfig(config, disp); - _EGLDriver *drv; + const _EGLDriver *drv; _EGLSurface *surf; EGLSurface ret; @@ -1170,7 +1166,7 @@ eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, if ((conf->SurfaceType & EGL_PBUFFER_BIT) == 0) RETURN_EGL_ERROR(disp, EGL_BAD_MATCH, EGL_NO_SURFACE); - surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list); + surf = drv->CreatePbufferSurface(disp, conf, attrib_list); ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; RETURN_EGL_EVAL(disp, ret); @@ -1182,13 +1178,13 @@ eglDestroySurface(EGLDisplay dpy, EGLSurface surface) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); _eglUnlinkSurface(surf); - ret = drv->API.DestroySurface(drv, disp, surf); + ret = drv->DestroySurface(disp, surf); RETURN_EGL_EVAL(disp, ret); } @@ -1199,12 +1195,16 @@ eglQuerySurface(EGLDisplay dpy, EGLSurface surface, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); - ret = drv->API.QuerySurface(drv, disp, surf, attribute, value); + + if (drv->QuerySurface) + ret = drv->QuerySurface(disp, surf, attribute, value); + else + ret = _eglQuerySurface(disp, surf, attribute, value); RETURN_EGL_EVAL(disp, ret); } @@ -1215,12 +1215,13 @@ eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); - ret = drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); + + ret = _eglSurfaceAttrib(drv, disp, surf, attribute, value); RETURN_EGL_EVAL(disp, ret); } @@ -1231,12 +1232,12 @@ eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); - ret = drv->API.BindTexImage(drv, disp, surf, buffer); + ret = drv->BindTexImage(disp, surf, buffer); RETURN_EGL_EVAL(disp, ret); } @@ -1247,12 +1248,12 @@ eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); - ret = drv->API.ReleaseTexImage(drv, disp, surf, buffer); + ret = drv->ReleaseTexImage(disp, surf, buffer); RETURN_EGL_EVAL(disp, ret); } @@ -1264,7 +1265,7 @@ eglSwapInterval(EGLDisplay dpy, EGLint interval) _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLContext *ctx = _eglGetCurrentContext(); _EGLSurface *surf = ctx ? ctx->DrawSurface : NULL; - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); @@ -1284,10 +1285,15 @@ eglSwapInterval(EGLDisplay dpy, EGLint interval) surf->Config->MinSwapInterval, surf->Config->MaxSwapInterval); - if (surf->SwapInterval != interval) - ret = drv->API.SwapInterval(drv, disp, surf, interval); - else + if (surf->SwapInterval != interval) { + if (drv->SwapInterval) + ret = drv->SwapInterval(disp, surf, interval); + else + ret = _eglSwapInterval(disp, surf, interval); + } + else { ret = EGL_TRUE; + } if (ret) surf->SwapInterval = interval; @@ -1302,7 +1308,7 @@ eglSwapBuffers(EGLDisplay dpy, EGLSurface surface) _EGLContext *ctx = _eglGetCurrentContext(); _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); @@ -1327,7 +1333,7 @@ eglSwapBuffers(EGLDisplay dpy, EGLSurface surface) if (surf->Lost) RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_WINDOW, EGL_FALSE); - ret = drv->API.SwapBuffers(drv, disp, surf); + ret = drv->SwapBuffers(disp, surf); /* EGL_KHR_partial_update * Frame boundary successfully reached, @@ -1344,10 +1350,10 @@ eglSwapBuffers(EGLDisplay dpy, EGLSurface surface) static EGLBoolean _eglSwapBuffersWithDamageCommon(_EGLDisplay *disp, _EGLSurface *surf, - EGLint *rects, EGLint n_rects) + const EGLint *rects, EGLint n_rects) { _EGLContext *ctx = _eglGetCurrentContext(); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); @@ -1363,7 +1369,7 @@ _eglSwapBuffersWithDamageCommon(_EGLDisplay *disp, _EGLSurface *surf, if ((n_rects > 0 && rects == NULL) || n_rects < 0) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - ret = drv->API.SwapBuffersWithDamageEXT(drv, disp, surf, rects, n_rects); + ret = drv->SwapBuffersWithDamageEXT(disp, surf, rects, n_rects); /* EGL_KHR_partial_update * Frame boundary successfully reached, @@ -1379,7 +1385,7 @@ _eglSwapBuffersWithDamageCommon(_EGLDisplay *disp, _EGLSurface *surf, static EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT(EGLDisplay dpy, EGLSurface surface, - EGLint *rects, EGLint n_rects) + const EGLint *rects, EGLint n_rects) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); @@ -1389,7 +1395,7 @@ eglSwapBuffersWithDamageEXT(EGLDisplay dpy, EGLSurface surface, static EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface surface, - EGLint *rects, EGLint n_rects) + const EGLint *rects, EGLint n_rects) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); @@ -1431,7 +1437,7 @@ eglSetDamageRegionKHR(EGLDisplay dpy, EGLSurface surface, _EGLSurface *surf = _eglLookupSurface(surface, disp); _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); _EGLContext *ctx = _eglGetCurrentContext(); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); @@ -1450,7 +1456,7 @@ eglSetDamageRegionKHR(EGLDisplay dpy, EGLSurface surface, RETURN_EGL_ERROR(disp, EGL_BAD_ACCESS, EGL_FALSE); _eglSetDamageRegionKHRClampRects(disp, surf, rects, n_rects); - ret = drv->API.SetDamageRegion(drv, disp, surf, rects, n_rects); + ret = drv->SetDamageRegion(disp, surf, rects, n_rects); if (ret) surf->SetDamageRegionCalled = EGL_TRUE; @@ -1463,7 +1469,7 @@ eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; void *native_pixmap_ptr; @@ -1472,7 +1478,7 @@ eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target) native_pixmap_ptr = (void*) target; _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); - ret = drv->API.CopyBuffers(drv, disp, surf, native_pixmap_ptr); + ret = drv->CopyBuffers(disp, surf, native_pixmap_ptr); RETURN_EGL_EVAL(disp, ret); } @@ -1483,7 +1489,6 @@ _eglWaitClientCommon(void) { _EGLContext *ctx = _eglGetCurrentContext(); _EGLDisplay *disp; - _EGLDriver *drv; EGLBoolean ret; if (!ctx) @@ -1499,8 +1504,7 @@ _eglWaitClientCommon(void) /* a valid current context implies an initialized current display */ assert(disp->Initialized); - drv = disp->Driver; - ret = drv->API.WaitClient(drv, disp, ctx); + ret = disp->Driver->WaitClient(disp, ctx); RETURN_EGL_EVAL(disp, ret); } @@ -1526,7 +1530,6 @@ eglWaitNative(EGLint engine) { _EGLContext *ctx = _eglGetCurrentContext(); _EGLDisplay *disp; - _EGLDriver *drv; EGLBoolean ret; if (!ctx) @@ -1544,8 +1547,7 @@ eglWaitNative(EGLint engine) /* a valid current context implies an initialized current display */ assert(disp->Initialized); - drv = disp->Driver; - ret = drv->API.WaitNative(drv, disp, engine); + ret = disp->Driver->WaitNative(engine); RETURN_EGL_EVAL(disp, ret); } @@ -1676,19 +1678,14 @@ eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLConfig *conf = _eglLookupConfig(config, disp); - _EGLDriver *drv; - _EGLSurface *surf; - EGLSurface ret; + const _EGLDriver *drv; _EGL_FUNC_START(disp, EGL_OBJECT_DISPLAY_KHR, NULL, EGL_NO_SURFACE); _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); - surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer, - conf, attrib_list); - ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; - - RETURN_EGL_EVAL(disp, ret); + /* OpenVG is not supported */ + RETURN_EGL_ERROR(disp, EGL_BAD_ALLOC, EGL_NO_SURFACE); } @@ -1704,11 +1701,9 @@ eglReleaseThread(void) if (ctx) { _EGLDisplay *disp = ctx->Resource.Display; - _EGLDriver *drv; mtx_lock(&disp->Mutex); - drv = disp->Driver; - (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); + (void) disp->Driver->MakeCurrent(disp, NULL, NULL, NULL); mtx_unlock(&disp->Mutex); } } @@ -1724,7 +1719,7 @@ _eglCreateImageCommon(_EGLDisplay *disp, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attr_list) { _EGLContext *context = _eglLookupContext(ctx, disp); - _EGLDriver *drv; + const _EGLDriver *drv; _EGLImage *img; EGLImage ret; @@ -1739,8 +1734,7 @@ _eglCreateImageCommon(_EGLDisplay *disp, EGLContext ctx, EGLenum target, if (ctx != EGL_NO_CONTEXT && target == EGL_LINUX_DMA_BUF_EXT) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); - img = drv->API.CreateImageKHR(drv, disp, context, target, - buffer, attr_list); + img = drv->CreateImageKHR(disp, context, target, buffer, attr_list); ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; RETURN_EGL_EVAL(disp, ret); @@ -1779,7 +1773,7 @@ eglCreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, static EGLBoolean _eglDestroyImageCommon(_EGLDisplay *disp, _EGLImage *img) { - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); @@ -1789,7 +1783,7 @@ _eglDestroyImageCommon(_EGLDisplay *disp, _EGLImage *img) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); _eglUnlinkImage(img); - ret = drv->API.DestroyImageKHR(drv, disp, img); + ret = drv->DestroyImageKHR(disp, img); RETURN_EGL_EVAL(disp, ret); } @@ -1819,7 +1813,7 @@ _eglCreateSync(_EGLDisplay *disp, EGLenum type, const EGLAttrib *attrib_list, EGLenum invalid_type_error) { _EGLContext *ctx = _eglGetCurrentContext(); - _EGLDriver *drv; + const _EGLDriver *drv; _EGLSync *sync; EGLSync ret; @@ -1846,9 +1840,10 @@ _eglCreateSync(_EGLDisplay *disp, EGLenum type, const EGLAttrib *attrib_list, (type == EGL_SYNC_FENCE_KHR || type == EGL_SYNC_NATIVE_FENCE_ANDROID)) RETURN_EGL_ERROR(disp, EGL_BAD_MATCH, EGL_NO_SYNC_KHR); - /* return an error if the client API doesn't support GL_OES_EGL_sync */ + /* return an error if the client API doesn't support GL_[OES|MESA]_EGL_sync. */ if (ctx && (ctx->Resource.Display != disp || - ctx->ClientAPI != EGL_OPENGL_ES_API)) + (ctx->ClientAPI != EGL_OPENGL_ES_API && + ctx->ClientAPI != EGL_OPENGL_API))) RETURN_EGL_ERROR(disp, EGL_BAD_MATCH, EGL_NO_SYNC_KHR); switch (type) { @@ -1872,7 +1867,7 @@ _eglCreateSync(_EGLDisplay *disp, EGLenum type, const EGLAttrib *attrib_list, RETURN_EGL_ERROR(disp, invalid_type_error, EGL_NO_SYNC_KHR); } - sync = drv->API.CreateSyncKHR(drv, disp, type, attrib_list); + sync = drv->CreateSyncKHR(disp, type, attrib_list); ret = (sync) ? _eglLinkSync(sync) : EGL_NO_SYNC_KHR; RETURN_EGL_EVAL(disp, ret); @@ -1931,7 +1926,7 @@ eglCreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list) static EGLBoolean _eglDestroySync(_EGLDisplay *disp, _EGLSync *s) { - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); @@ -1940,7 +1935,7 @@ _eglDestroySync(_EGLDisplay *disp, _EGLSync *s) disp->Extensions.ANDROID_native_fence_sync); _eglUnlinkSync(s); - ret = drv->API.DestroySyncKHR(drv, disp, s); + ret = drv->DestroySyncKHR(disp, s); RETURN_EGL_EVAL(disp, ret); } @@ -1968,7 +1963,7 @@ static EGLint _eglClientWaitSyncCommon(_EGLDisplay *disp, EGLDisplay dpy, _EGLSync *s, EGLint flags, EGLTime timeout) { - _EGLDriver *drv; + const _EGLDriver *drv; EGLint ret; _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); @@ -1987,7 +1982,7 @@ _eglClientWaitSyncCommon(_EGLDisplay *disp, EGLDisplay dpy, if (s->Type == EGL_SYNC_REUSABLE_KHR) _eglUnlockDisplay(dpy); - ret = drv->API.ClientWaitSyncKHR(drv, disp, s, flags, timeout); + ret = drv->ClientWaitSyncKHR(disp, s, flags, timeout); /* * 'disp' is already unlocked for reusable sync type, @@ -2024,21 +2019,23 @@ static EGLint _eglWaitSyncCommon(_EGLDisplay *disp, _EGLSync *s, EGLint flags) { _EGLContext *ctx = _eglGetCurrentContext(); - _EGLDriver *drv; + const _EGLDriver *drv; EGLint ret; _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); assert(disp->Extensions.KHR_wait_sync); - /* return an error if the client API doesn't support GL_OES_EGL_sync */ - if (ctx == EGL_NO_CONTEXT || ctx->ClientAPI != EGL_OPENGL_ES_API) + /* return an error if the client API doesn't support GL_[OES|MESA]_EGL_sync. */ + if (ctx == EGL_NO_CONTEXT || + (ctx->ClientAPI != EGL_OPENGL_ES_API && + ctx->ClientAPI != EGL_OPENGL_API)) RETURN_EGL_ERROR(disp, EGL_BAD_MATCH, EGL_FALSE); /* the API doesn't allow any flags yet */ if (flags != 0) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - ret = drv->API.WaitSyncKHR(drv, disp, s); + ret = drv->WaitSyncKHR(disp, s); RETURN_EGL_EVAL(disp, ret); } @@ -2072,14 +2069,14 @@ eglSignalSyncKHR(EGLDisplay dpy, EGLSync sync, EGLenum mode) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSync *s = _eglLookupSync(sync, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SYNC_KHR, s, EGL_FALSE); _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); assert(disp->Extensions.KHR_reusable_sync); - ret = drv->API.SignalSyncKHR(drv, disp, s, mode); + ret = drv->SignalSyncKHR(disp, s, mode); RETURN_EGL_EVAL(disp, ret); } @@ -2088,14 +2085,15 @@ eglSignalSyncKHR(EGLDisplay dpy, EGLSync sync, EGLenum mode) static EGLBoolean _eglGetSyncAttribCommon(_EGLDisplay *disp, _EGLSync *s, EGLint attribute, EGLAttrib *value) { - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); assert(disp->Extensions.KHR_reusable_sync || disp->Extensions.KHR_fence_sync || disp->Extensions.ANDROID_native_fence_sync); - ret = drv->API.GetSyncAttrib(drv, disp, s, attribute, value); + + ret = _eglGetSyncAttrib(drv, disp, s, attribute, value); RETURN_EGL_EVAL(disp, ret); } @@ -2106,6 +2104,10 @@ eglGetSyncAttrib(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *valu _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSync *s = _eglLookupSync(sync, disp); _EGL_FUNC_START(disp, EGL_OBJECT_SYNC_KHR, s, EGL_FALSE); + + if (!value) + RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); + return _eglGetSyncAttribCommon(disp, s, attribute, value); } @@ -2142,7 +2144,7 @@ eglDupNativeFenceFDANDROID(EGLDisplay dpy, EGLSync sync) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSync *s = _eglLookupSync(sync, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SYNC_KHR, s, EGL_FALSE); @@ -2156,7 +2158,7 @@ eglDupNativeFenceFDANDROID(EGLDisplay dpy, EGLSync sync) _EGL_CHECK_SYNC(disp, s, EGL_NO_NATIVE_FENCE_FD_ANDROID, drv); assert(disp->Extensions.ANDROID_native_fence_sync); - ret = drv->API.DupNativeFenceFDANDROID(drv, disp, s); + ret = drv->DupNativeFenceFDANDROID(disp, s); RETURN_EGL_EVAL(disp, ret); } @@ -2168,7 +2170,7 @@ eglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface, _EGLContext *ctx = _eglGetCurrentContext(); _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); @@ -2183,7 +2185,7 @@ eglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface, surf != ctx->DrawSurface) RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); - ret = drv->API.SwapBuffersRegionNOK(drv, disp, surf, numRects, rects); + ret = drv->SwapBuffersRegionNOK(disp, surf, numRects, rects); RETURN_EGL_EVAL(disp, ret); } @@ -2193,7 +2195,7 @@ static EGLImage EGLAPIENTRY eglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attr_list) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; _EGLImage *img; EGLImage ret; @@ -2203,7 +2205,7 @@ eglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attr_list) if (!disp->Extensions.MESA_drm_image) RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR); - img = drv->API.CreateDRMImageMESA(drv, disp, attr_list); + img = drv->CreateDRMImageMESA(disp, attr_list); ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; RETURN_EGL_EVAL(disp, ret); @@ -2215,7 +2217,7 @@ eglExportDRMImageMESA(EGLDisplay dpy, EGLImage image, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLImage *img = _eglLookupImage(image, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_IMAGE_KHR, img, EGL_FALSE); @@ -2226,7 +2228,7 @@ eglExportDRMImageMESA(EGLDisplay dpy, EGLImage image, if (!img) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - ret = drv->API.ExportDRMImageMESA(drv, disp, img, name, handle, stride); + ret = drv->ExportDRMImageMESA(disp, img, name, handle, stride); RETURN_EGL_EVAL(disp, ret); } @@ -2238,7 +2240,7 @@ static EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_DISPLAY_KHR, NULL, EGL_FALSE); @@ -2249,7 +2251,7 @@ eglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) if (!display) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - ret = drv->API.BindWaylandDisplayWL(drv, disp, display); + ret = drv->BindWaylandDisplayWL(disp, display); RETURN_EGL_EVAL(disp, ret); } @@ -2258,7 +2260,7 @@ static EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_DISPLAY_KHR, NULL, EGL_FALSE); @@ -2269,7 +2271,7 @@ eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) if (!display) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - ret = drv->API.UnbindWaylandDisplayWL(drv, disp, display); + ret = drv->UnbindWaylandDisplayWL(disp, display); RETURN_EGL_EVAL(disp, ret); } @@ -2279,7 +2281,7 @@ eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_DISPLAY_KHR, NULL, EGL_FALSE); @@ -2290,7 +2292,7 @@ eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer, if (!buffer) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - ret = drv->API.QueryWaylandBufferWL(drv, disp, buffer, attribute, value); + ret = drv->QueryWaylandBufferWL(disp, buffer, attribute, value); RETURN_EGL_EVAL(disp, ret); } @@ -2301,7 +2303,7 @@ eglCreateWaylandBufferFromImageWL(EGLDisplay dpy, EGLImage image) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLImage *img; - _EGLDriver *drv; + const _EGLDriver *drv; struct wl_buffer *ret; _EGL_FUNC_START(disp, EGL_OBJECT_DISPLAY_KHR, NULL, EGL_FALSE); @@ -2315,7 +2317,7 @@ eglCreateWaylandBufferFromImageWL(EGLDisplay dpy, EGLImage image) if (!img) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, NULL); - ret = drv->API.CreateWaylandBufferFromImageWL(drv, disp, img); + ret = drv->CreateWaylandBufferFromImageWL(disp, img); RETURN_EGL_EVAL(disp, ret); } @@ -2326,7 +2328,7 @@ eglPostSubBufferNV(EGLDisplay dpy, EGLSurface surface, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); @@ -2336,7 +2338,7 @@ eglPostSubBufferNV(EGLDisplay dpy, EGLSurface surface, if (!disp->Extensions.NV_post_sub_buffer) RETURN_EGL_EVAL(disp, EGL_FALSE); - ret = drv->API.PostSubBufferNV(drv, disp, surf, x, y, width, height); + ret = drv->PostSubBufferNV(disp, surf, x, y, width, height); RETURN_EGL_EVAL(disp, ret); } @@ -2348,7 +2350,7 @@ eglGetSyncValuesCHROMIUM(EGLDisplay dpy, EGLSurface surface, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSurface *surf = _eglLookupSurface(surface, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); @@ -2360,7 +2362,7 @@ eglGetSyncValuesCHROMIUM(EGLDisplay dpy, EGLSurface surface, if (!ust || !msc || !sbc) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - ret = drv->API.GetSyncValuesCHROMIUM(disp, surf, ust, msc, sbc); + ret = drv->GetSyncValuesCHROMIUM(disp, surf, ust, msc, sbc); RETURN_EGL_EVAL(disp, ret); } @@ -2372,7 +2374,7 @@ eglExportDMABUFImageQueryMESA(EGLDisplay dpy, EGLImage image, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLImage *img = _eglLookupImage(image, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_IMAGE_KHR, img, EGL_FALSE); @@ -2383,7 +2385,7 @@ eglExportDMABUFImageQueryMESA(EGLDisplay dpy, EGLImage image, if (!img) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - ret = drv->API.ExportDMABUFImageQueryMESA(drv, disp, img, fourcc, nplanes, + ret = drv->ExportDMABUFImageQueryMESA(drv, disp, img, fourcc, nplanes, modifiers); RETURN_EGL_EVAL(disp, ret); @@ -2395,7 +2397,7 @@ eglExportDMABUFImageMESA(EGLDisplay dpy, EGLImage image, { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLImage *img = _eglLookupImage(image, disp); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(disp, EGL_OBJECT_IMAGE_KHR, img, EGL_FALSE); @@ -2406,7 +2408,7 @@ eglExportDMABUFImageMESA(EGLDisplay dpy, EGLImage image, if (!img) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - ret = drv->API.ExportDMABUFImageMESA(drv, disp, img, fds, strides, offsets); + ret = drv->ExportDMABUFImageMESA(drv, disp, img, fds, strides, offsets); RETURN_EGL_EVAL(disp, ret); } @@ -2563,14 +2565,14 @@ eglQueryDmaBufFormatsEXT(EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(NULL, EGL_NONE, NULL, EGL_FALSE); _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); - ret = drv->API.QueryDmaBufFormatsEXT(drv, disp, max_formats, formats, + ret = drv->QueryDmaBufFormatsEXT(drv, disp, max_formats, formats, num_formats); RETURN_EGL_EVAL(disp, ret); @@ -2582,14 +2584,14 @@ eglQueryDmaBufModifiersEXT(EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLint *num_modifiers) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; EGLBoolean ret; _EGL_FUNC_START(NULL, EGL_NONE, NULL, EGL_FALSE); _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); - ret = drv->API.QueryDmaBufModifiersEXT(drv, disp, format, max_modifiers, + ret = drv->QueryDmaBufModifiersEXT(drv, disp, format, max_modifiers, modifiers, external_only, num_modifiers); @@ -2610,7 +2612,7 @@ eglSetBlobCacheFuncsANDROID(EGLDisplay *dpy, EGLSetBlobFuncANDROID set, return; } - _EGLDriver *drv = _eglCheckDisplay(disp, __func__); + const _EGLDriver *drv = _eglCheckDisplay(disp, __func__); if (!drv) { if (disp) _eglUnlockDisplay(disp); @@ -2634,7 +2636,7 @@ eglSetBlobCacheFuncsANDROID(EGLDisplay *dpy, EGLSetBlobFuncANDROID set, disp->BlobCacheSet = set; disp->BlobCacheGet = get; - drv->API.SetBlobCacheFuncsANDROID(drv, disp, set, get); + drv->SetBlobCacheFuncsANDROID(drv, disp, set, get); _eglUnlockDisplay(disp); } @@ -2687,7 +2689,7 @@ eglQueryDisplayAttribEXT(EGLDisplay dpy, EGLAttrib *value) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; _EGL_FUNC_START(NULL, EGL_NONE, NULL, EGL_FALSE); _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); @@ -2706,7 +2708,7 @@ static char * EGLAPIENTRY eglGetDisplayDriverConfig(EGLDisplay dpy) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; char *ret; _EGL_FUNC_START(disp, EGL_NONE, NULL, NULL); @@ -2714,7 +2716,7 @@ eglGetDisplayDriverConfig(EGLDisplay dpy) assert(disp->Extensions.MESA_query_driver); - ret = drv->API.QueryDriverConfig(disp); + ret = drv->QueryDriverConfig(disp); RETURN_EGL_EVAL(disp, ret); } @@ -2722,7 +2724,7 @@ static const char * EGLAPIENTRY eglGetDisplayDriverName(EGLDisplay dpy) { _EGLDisplay *disp = _eglLockDisplay(dpy); - _EGLDriver *drv; + const _EGLDriver *drv; const char *ret; _EGL_FUNC_START(disp, EGL_NONE, NULL, NULL); @@ -2730,7 +2732,7 @@ eglGetDisplayDriverName(EGLDisplay dpy) assert(disp->Extensions.MESA_query_driver); - ret = drv->API.QueryDriverName(disp); + ret = drv->QueryDriverName(disp); RETURN_EGL_EVAL(disp, ret); } @@ -2767,7 +2769,7 @@ eglGetProcAddress(const char *procname) static int _eglLockDisplayInterop(EGLDisplay dpy, EGLContext context, - _EGLDisplay **disp, _EGLDriver **drv, + _EGLDisplay **disp, const _EGLDriver **drv, _EGLContext **ctx) { @@ -2796,7 +2798,7 @@ MesaGLInteropEGLQueryDeviceInfo(EGLDisplay dpy, EGLContext context, struct mesa_glinterop_device_info *out) { _EGLDisplay *disp; - _EGLDriver *drv; + const _EGLDriver *drv; _EGLContext *ctx; int ret; @@ -2804,8 +2806,8 @@ MesaGLInteropEGLQueryDeviceInfo(EGLDisplay dpy, EGLContext context, if (ret != MESA_GLINTEROP_SUCCESS) return ret; - if (drv->API.GLInteropQueryDeviceInfo) - ret = drv->API.GLInteropQueryDeviceInfo(disp, ctx, out); + if (drv->GLInteropQueryDeviceInfo) + ret = drv->GLInteropQueryDeviceInfo(disp, ctx, out); else ret = MESA_GLINTEROP_UNSUPPORTED; @@ -2819,7 +2821,7 @@ MesaGLInteropEGLExportObject(EGLDisplay dpy, EGLContext context, struct mesa_glinterop_export_out *out) { _EGLDisplay *disp; - _EGLDriver *drv; + const _EGLDriver *drv; _EGLContext *ctx; int ret; @@ -2827,8 +2829,8 @@ MesaGLInteropEGLExportObject(EGLDisplay dpy, EGLContext context, if (ret != MESA_GLINTEROP_SUCCESS) return ret; - if (drv->API.GLInteropExportObject) - ret = drv->API.GLInteropExportObject(disp, ctx, in, out); + if (drv->GLInteropExportObject) + ret = drv->GLInteropExportObject(disp, ctx, in, out); else ret = MESA_GLINTEROP_UNSUPPORTED;