Loading opengl/libs/EGL/eglApi.cpp +93 −88 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ #include <utils/KeyedVector.h> #include <utils/SortedVector.h> #include <utils/String8.h> #include <utils/Trace.h> Loading Loading @@ -84,6 +83,11 @@ struct extention_map_t { * * NOTE: Both strings MUST have a single space as the last character. */ // CLion mistakenly warns about the extern keyword below. #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wextern-initializer" extern char const * const gBuiltinExtensionString = "EGL_KHR_get_all_proc_addresses " "EGL_ANDROID_presentation_time " Loading Loading @@ -233,6 +237,8 @@ static const extention_map_t sExtensionMap[] = { (__eglMustCastToProperFunctionPointerType)&eglGetFrameTimestampSupportedANDROID }, }; #pragma clang diagnostic pop /* * These extensions entry-points should not be exposed to applications. * They're used internally by the Android EGL layer. Loading Loading @@ -304,7 +310,7 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) clearError(); egl_display_ptr dp = get_display(dpy); if (!dp) return setError(EGL_BAD_DISPLAY, EGL_FALSE); if (!dp) return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); EGLBoolean res = dp->initialize(major, minor); Loading @@ -320,7 +326,7 @@ EGLBoolean eglTerminate(EGLDisplay dpy) clearError(); egl_display_ptr dp = get_display(dpy); if (!dp) return setError(EGL_BAD_DISPLAY, EGL_FALSE); if (!dp) return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); EGLBoolean res = dp->terminate(); Loading @@ -341,7 +347,7 @@ EGLBoolean eglGetConfigs( EGLDisplay dpy, if (!dp) return EGL_FALSE; if (num_config==0) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } EGLBoolean res = EGL_FALSE; Loading @@ -366,7 +372,7 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list, if (!dp) return EGL_FALSE; if (num_config==0) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } EGLBoolean res = EGL_FALSE; Loading Loading @@ -398,6 +404,8 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list, case EGL_CONFIG_CAVEAT: attribCaveat = &attrib_list[attribCount]; break; default: break; } attribCount++; } Loading Loading @@ -627,7 +635,7 @@ EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface) SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t * const s = get_surface(surface); EGLBoolean result = s->cnx->egl.eglDestroySurface(dp->disp.dpy, s->surface); Loading @@ -647,7 +655,7 @@ EGLBoolean eglQuerySurface( EGLDisplay dpy, EGLSurface surface, SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); return s->cnx->egl.eglQuerySurface( Loading @@ -666,7 +674,6 @@ void EGLAPI eglBeginFrame(EGLDisplay dpy, EGLSurface surface) { SurfaceRef _s(dp.get(), surface); if (!_s.get()) { setError(EGL_BAD_SURFACE, EGL_FALSE); return; } } Loading Loading @@ -725,7 +732,7 @@ EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext ctx) ContextRef _c(dp.get(), ctx); if (!_c.get()) return setError(EGL_BAD_CONTEXT, EGL_FALSE); return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); egl_context_t * const c = get_context(ctx); EGLBoolean result = c->cnx->egl.eglDestroyContext(dp->disp.dpy, c->context); Loading @@ -741,14 +748,14 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, clearError(); egl_display_ptr dp = validate_display(dpy); if (!dp) return setError(EGL_BAD_DISPLAY, EGL_FALSE); if (!dp) return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); // If ctx is not EGL_NO_CONTEXT, read is not EGL_NO_SURFACE, or draw is not // EGL_NO_SURFACE, then an EGL_NOT_INITIALIZED error is generated if dpy is // a valid but uninitialized display. if ( (ctx != EGL_NO_CONTEXT) || (read != EGL_NO_SURFACE) || (draw != EGL_NO_SURFACE) ) { if (!dp->isReady()) return setError(EGL_NOT_INITIALIZED, EGL_FALSE); if (!dp->isReady()) return setError(EGL_NOT_INITIALIZED, (EGLBoolean)EGL_FALSE); } // get a reference to the object passed in Loading @@ -759,7 +766,7 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, // validate the context (if not EGL_NO_CONTEXT) if ((ctx != EGL_NO_CONTEXT) && !_c.get()) { // EGL_NO_CONTEXT is valid return setError(EGL_BAD_CONTEXT, EGL_FALSE); return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); } // these are the underlying implementation's object Loading @@ -782,7 +789,7 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, // no context given, use the implementation of the current context if (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE) { // calling eglMakeCurrent( ..., !=0, !=0, EGL_NO_CONTEXT); return setError(EGL_BAD_MATCH, EGL_FALSE); return setError(EGL_BAD_MATCH, (EGLBoolean)EGL_FALSE); } if (cur_c == NULL) { // no current context Loading @@ -793,14 +800,14 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, // retrieve the underlying implementation's draw EGLSurface if (draw != EGL_NO_SURFACE) { if (!_d.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); if (!_d.get()) return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); d = get_surface(draw); impl_draw = d->surface; } // retrieve the underlying implementation's read EGLSurface if (read != EGL_NO_SURFACE) { if (!_r.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); if (!_r.get()) return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); r = get_surface(read); impl_read = r->surface; } Loading @@ -824,7 +831,7 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, } else { // this will ALOGE the error egl_connection_t* const cnx = &gEGLImpl; result = setError(cnx->egl.eglGetError(), EGL_FALSE); result = setError(cnx->egl.eglGetError(), (EGLBoolean)EGL_FALSE); } return result; } Loading @@ -839,7 +846,7 @@ EGLBoolean eglQueryContext( EGLDisplay dpy, EGLContext ctx, if (!dp) return EGL_FALSE; ContextRef _c(dp.get(), ctx); if (!_c.get()) return setError(EGL_BAD_CONTEXT, EGL_FALSE); if (!_c.get()) return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); egl_context_t * const c = get_context(ctx); return c->cnx->egl.eglQueryContext( Loading Loading @@ -900,7 +907,7 @@ EGLBoolean eglWaitGL(void) egl_connection_t* const cnx = &gEGLImpl; if (!cnx->dso) return setError(EGL_BAD_CONTEXT, EGL_FALSE); return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); return cnx->egl.eglWaitGL(); } Loading @@ -911,7 +918,7 @@ EGLBoolean eglWaitNative(EGLint engine) egl_connection_t* const cnx = &gEGLImpl; if (!cnx->dso) return setError(EGL_BAD_CONTEXT, EGL_FALSE); return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); return cnx->egl.eglWaitNative(engine); } Loading Loading @@ -1039,7 +1046,7 @@ public: thread->mQueue.push_back(sync); thread->mCondition.signal(); thread->mFramesQueued++; ATRACE_INT("GPU Frames Outstanding", thread->mQueue.size()); ATRACE_INT("GPU Frames Outstanding", int32_t(thread->mQueue.size())); } } Loading Loading @@ -1073,7 +1080,7 @@ private: Mutex::Autolock lock(mMutex); mQueue.removeAt(0); mFramesCompleted++; ATRACE_INT("GPU Frames Outstanding", mQueue.size()); ATRACE_INT("GPU Frames Outstanding", int32_t(mQueue.size())); } return true; } Loading @@ -1096,7 +1103,7 @@ EGLBoolean eglSwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface draw, SurfaceRef _s(dp.get(), draw); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(draw); Loading Loading @@ -1161,7 +1168,7 @@ EGLBoolean eglCopyBuffers( EGLDisplay dpy, EGLSurface surface, SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); return s->cnx->egl.eglCopyBuffers(dp->disp.dpy, s->surface, target); Loading @@ -1179,7 +1186,7 @@ const char* eglQueryString(EGLDisplay dpy, EGLint name) // If we want to support EGL_EXT_client_extensions later, we can return // the client extension string here instead. if (dpy == EGL_NO_DISPLAY && name == EGL_EXTENSIONS) return setErrorQuiet(EGL_BAD_DISPLAY, nullptr); return setErrorQuiet(EGL_BAD_DISPLAY, (const char*)0); const egl_display_ptr dp = validate_display(dpy); if (!dp) return (const char *) NULL; Loading @@ -1193,6 +1200,8 @@ const char* eglQueryString(EGLDisplay dpy, EGLint name) return dp->getExtensionString(); case EGL_CLIENT_APIS: return dp->getClientApiString(); default: break; } return setError(EGL_BAD_PARAMETER, (const char *)0); } Loading @@ -1213,6 +1222,8 @@ EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint na return dp->disp.queryString.extensions; case EGL_CLIENT_APIS: return dp->disp.queryString.clientApi; default: break; } return setError(EGL_BAD_PARAMETER, (const char *)0); } Loading @@ -1231,7 +1242,7 @@ EGLBoolean eglSurfaceAttrib( SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t * const s = get_surface(surface); Loading @@ -1239,27 +1250,23 @@ EGLBoolean eglSurfaceAttrib( if (!s->win.get()) { setError(EGL_BAD_SURFACE, EGL_FALSE); } int err = native_window_set_auto_refresh(s->win.get(), value ? true : false); return (err == NO_ERROR) ? EGL_TRUE : setError(EGL_BAD_SURFACE, EGL_FALSE); int err = native_window_set_auto_refresh(s->win.get(), value ? true : false); return (err == NO_ERROR) ? EGL_TRUE : setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } if (attribute == EGL_TIMESTAMPS_ANDROID) { if (!s->win.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } int err = native_window_enable_frame_timestamps( s->win.get(), value ? true : false); return (err == NO_ERROR) ? EGL_TRUE : setError(EGL_BAD_SURFACE, EGL_FALSE); int err = native_window_enable_frame_timestamps(s->win.get(), value ? true : false); return (err == NO_ERROR) ? EGL_TRUE : setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } if (s->cnx->egl.eglSurfaceAttrib) { return s->cnx->egl.eglSurfaceAttrib( dp->disp.dpy, s->surface, attribute, value); } return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } EGLBoolean eglBindTexImage( Loading @@ -1272,14 +1279,14 @@ EGLBoolean eglBindTexImage( SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); if (s->cnx->egl.eglBindTexImage) { return s->cnx->egl.eglBindTexImage( dp->disp.dpy, s->surface, buffer); } return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } EGLBoolean eglReleaseTexImage( Loading @@ -1292,14 +1299,14 @@ EGLBoolean eglReleaseTexImage( SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); if (s->cnx->egl.eglReleaseTexImage) { return s->cnx->egl.eglReleaseTexImage( dp->disp.dpy, s->surface, buffer); } return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint interval) Loading Loading @@ -1329,7 +1336,7 @@ EGLBoolean eglWaitClient(void) egl_connection_t* const cnx = &gEGLImpl; if (!cnx->dso) return setError(EGL_BAD_CONTEXT, EGL_FALSE); return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); EGLBoolean res; if (cnx->egl.eglWaitClient) { Loading @@ -1345,7 +1352,7 @@ EGLBoolean eglBindAPI(EGLenum api) clearError(); if (egl_init_drivers() == EGL_FALSE) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } // bind this API on all EGLs Loading @@ -1362,7 +1369,7 @@ EGLenum eglQueryAPI(void) clearError(); if (egl_init_drivers() == EGL_FALSE) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } egl_connection_t* const cnx = &gEGLImpl; Loading Loading @@ -1420,14 +1427,14 @@ EGLBoolean eglLockSurfaceKHR(EGLDisplay dpy, EGLSurface surface, SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); if (s->cnx->egl.eglLockSurfaceKHR) { return s->cnx->egl.eglLockSurfaceKHR( dp->disp.dpy, s->surface, attrib_list); } return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } EGLBoolean eglUnlockSurfaceKHR(EGLDisplay dpy, EGLSurface surface) Loading @@ -1439,13 +1446,13 @@ EGLBoolean eglUnlockSurfaceKHR(EGLDisplay dpy, EGLSurface surface) SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); if (s->cnx->egl.eglUnlockSurfaceKHR) { return s->cnx->egl.eglUnlockSurfaceKHR(dp->disp.dpy, s->surface); } return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, Loading Loading @@ -1543,7 +1550,7 @@ EGLint eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, const egl_display_ptr dp = validate_display(dpy); if (!dp) return EGL_FALSE; EGLBoolean result = EGL_FALSE; EGLint result = EGL_FALSE; egl_connection_t* const cnx = &gEGLImpl; if (cnx->dso && cnx->egl.eglClientWaitSyncKHR) { result = cnx->egl.eglClientWaitSyncKHR( Loading Loading @@ -2000,7 +2007,7 @@ EGLuint64NV eglGetSystemTimeFrequencyNV() clearError(); if (egl_init_drivers() == EGL_FALSE) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLuint64NV)EGL_FALSE); } EGLuint64NV ret = 0; Loading @@ -2010,7 +2017,7 @@ EGLuint64NV eglGetSystemTimeFrequencyNV() return cnx->egl.eglGetSystemTimeFrequencyNV(); } return setErrorQuiet(EGL_BAD_DISPLAY, 0); return setErrorQuiet(EGL_BAD_DISPLAY, (EGLuint64NV)0); } EGLuint64NV eglGetSystemTimeNV() Loading @@ -2018,7 +2025,7 @@ EGLuint64NV eglGetSystemTimeNV() clearError(); if (egl_init_drivers() == EGL_FALSE) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLuint64NV)EGL_FALSE); } EGLuint64NV ret = 0; Loading @@ -2028,7 +2035,7 @@ EGLuint64NV eglGetSystemTimeNV() return cnx->egl.eglGetSystemTimeNV(); } return setErrorQuiet(EGL_BAD_DISPLAY, 0); return setErrorQuiet(EGL_BAD_DISPLAY, (EGLuint64NV)0); } // ---------------------------------------------------------------------------- Loading Loading @@ -2066,18 +2073,18 @@ EGLBoolean eglGetNextFrameIdANDROID(EGLDisplay dpy, EGLSurface surface, const egl_display_ptr dp = validate_display(dpy); if (!dp) { return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } SurfaceRef _s(dp.get(), surface); if (!_s.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } egl_surface_t const * const s = get_surface(surface); if (!s->win.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } uint64_t nextFrameId = 0; Loading @@ -2087,7 +2094,7 @@ EGLBoolean eglGetNextFrameIdANDROID(EGLDisplay dpy, EGLSurface surface, // This should not happen. Return an error that is not in the spec // so it's obvious something is very wrong. ALOGE("eglGetNextFrameId: Unexpected error."); return setError(EGL_NOT_INITIALIZED, EGL_FALSE); return setError(EGL_NOT_INITIALIZED, (EGLBoolean)EGL_FALSE); } *frameId = nextFrameId; Loading @@ -2101,18 +2108,18 @@ EGLBoolean eglGetCompositorTimingANDROID(EGLDisplay dpy, EGLSurface surface, const egl_display_ptr dp = validate_display(dpy); if (!dp) { return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } SurfaceRef _s(dp.get(), surface); if (!_s.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } egl_surface_t const * const s = get_surface(surface); if (!s->win.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } nsecs_t* compositeDeadline = nullptr; Loading @@ -2131,7 +2138,7 @@ EGLBoolean eglGetCompositorTimingANDROID(EGLDisplay dpy, EGLSurface surface, compositeToPresentLatency = &values[i]; break; default: return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } } Loading @@ -2142,12 +2149,12 @@ EGLBoolean eglGetCompositorTimingANDROID(EGLDisplay dpy, EGLSurface surface, case NO_ERROR: return EGL_TRUE; case INVALID_OPERATION: return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); default: // This should not happen. Return an error that is not in the spec // so it's obvious something is very wrong. ALOGE("eglGetCompositorTiming: Unexpected error."); return setError(EGL_NOT_INITIALIZED, EGL_FALSE); return setError(EGL_NOT_INITIALIZED, (EGLBoolean)EGL_FALSE); } } Loading @@ -2158,19 +2165,19 @@ EGLBoolean eglGetCompositorTimingSupportedANDROID( const egl_display_ptr dp = validate_display(dpy); if (!dp) { return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } SurfaceRef _s(dp.get(), surface); if (!_s.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } egl_surface_t const * const s = get_surface(surface); ANativeWindow* window = s->win.get(); if (!window) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } switch (name) { Loading @@ -2191,18 +2198,18 @@ EGLBoolean eglGetFrameTimestampsANDROID(EGLDisplay dpy, EGLSurface surface, const egl_display_ptr dp = validate_display(dpy); if (!dp) { return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } SurfaceRef _s(dp.get(), surface); if (!_s.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } egl_surface_t const * const s = get_surface(surface); if (!s->win.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } nsecs_t* requestedPresentTime = nullptr; Loading Loading @@ -2249,7 +2256,7 @@ EGLBoolean eglGetFrameTimestampsANDROID(EGLDisplay dpy, EGLSurface surface, releaseTime = &values[i]; break; default: return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } } Loading @@ -2262,16 +2269,16 @@ EGLBoolean eglGetFrameTimestampsANDROID(EGLDisplay dpy, EGLSurface surface, case NO_ERROR: return EGL_TRUE; case NAME_NOT_FOUND: return setError(EGL_BAD_ACCESS, EGL_FALSE); return setError(EGL_BAD_ACCESS, (EGLBoolean)EGL_FALSE); case INVALID_OPERATION: return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); case BAD_VALUE: return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); default: // This should not happen. Return an error that is not in the spec // so it's obvious something is very wrong. ALOGE("eglGetFrameTimestamps: Unexpected error."); return setError(EGL_NOT_INITIALIZED, EGL_FALSE); return setError(EGL_NOT_INITIALIZED, (EGLBoolean)EGL_FALSE); } } Loading @@ -2282,19 +2289,19 @@ EGLBoolean eglGetFrameTimestampSupportedANDROID( const egl_display_ptr dp = validate_display(dpy); if (!dp) { return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } SurfaceRef _s(dp.get(), surface); if (!_s.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } egl_surface_t const * const s = get_surface(surface); ANativeWindow* window = s->win.get(); if (!window) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } switch (timestamp) { Loading @@ -2312,14 +2319,12 @@ EGLBoolean eglGetFrameTimestampSupportedANDROID( return EGL_TRUE; case EGL_DISPLAY_PRESENT_TIME_ANDROID: { int value = 0; window->query(window, NATIVE_WINDOW_FRAME_TIMESTAMPS_SUPPORTS_PRESENT, &value); window->query(window, NATIVE_WINDOW_FRAME_TIMESTAMPS_SUPPORTS_PRESENT, &value); return value == 0 ? EGL_FALSE : EGL_TRUE; } case EGL_DISPLAY_RETIRE_TIME_ANDROID: { int value = 0; window->query(window, NATIVE_WINDOW_FRAME_TIMESTAMPS_SUPPORTS_RETIRE, &value); window->query(window, NATIVE_WINDOW_FRAME_TIMESTAMPS_SUPPORTS_RETIRE, &value); return value == 0 ? EGL_FALSE : EGL_TRUE; } default: Loading Loading
opengl/libs/EGL/eglApi.cpp +93 −88 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ #include <utils/KeyedVector.h> #include <utils/SortedVector.h> #include <utils/String8.h> #include <utils/Trace.h> Loading Loading @@ -84,6 +83,11 @@ struct extention_map_t { * * NOTE: Both strings MUST have a single space as the last character. */ // CLion mistakenly warns about the extern keyword below. #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wextern-initializer" extern char const * const gBuiltinExtensionString = "EGL_KHR_get_all_proc_addresses " "EGL_ANDROID_presentation_time " Loading Loading @@ -233,6 +237,8 @@ static const extention_map_t sExtensionMap[] = { (__eglMustCastToProperFunctionPointerType)&eglGetFrameTimestampSupportedANDROID }, }; #pragma clang diagnostic pop /* * These extensions entry-points should not be exposed to applications. * They're used internally by the Android EGL layer. Loading Loading @@ -304,7 +310,7 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) clearError(); egl_display_ptr dp = get_display(dpy); if (!dp) return setError(EGL_BAD_DISPLAY, EGL_FALSE); if (!dp) return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); EGLBoolean res = dp->initialize(major, minor); Loading @@ -320,7 +326,7 @@ EGLBoolean eglTerminate(EGLDisplay dpy) clearError(); egl_display_ptr dp = get_display(dpy); if (!dp) return setError(EGL_BAD_DISPLAY, EGL_FALSE); if (!dp) return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); EGLBoolean res = dp->terminate(); Loading @@ -341,7 +347,7 @@ EGLBoolean eglGetConfigs( EGLDisplay dpy, if (!dp) return EGL_FALSE; if (num_config==0) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } EGLBoolean res = EGL_FALSE; Loading @@ -366,7 +372,7 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list, if (!dp) return EGL_FALSE; if (num_config==0) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } EGLBoolean res = EGL_FALSE; Loading Loading @@ -398,6 +404,8 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list, case EGL_CONFIG_CAVEAT: attribCaveat = &attrib_list[attribCount]; break; default: break; } attribCount++; } Loading Loading @@ -627,7 +635,7 @@ EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface) SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t * const s = get_surface(surface); EGLBoolean result = s->cnx->egl.eglDestroySurface(dp->disp.dpy, s->surface); Loading @@ -647,7 +655,7 @@ EGLBoolean eglQuerySurface( EGLDisplay dpy, EGLSurface surface, SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); return s->cnx->egl.eglQuerySurface( Loading @@ -666,7 +674,6 @@ void EGLAPI eglBeginFrame(EGLDisplay dpy, EGLSurface surface) { SurfaceRef _s(dp.get(), surface); if (!_s.get()) { setError(EGL_BAD_SURFACE, EGL_FALSE); return; } } Loading Loading @@ -725,7 +732,7 @@ EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext ctx) ContextRef _c(dp.get(), ctx); if (!_c.get()) return setError(EGL_BAD_CONTEXT, EGL_FALSE); return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); egl_context_t * const c = get_context(ctx); EGLBoolean result = c->cnx->egl.eglDestroyContext(dp->disp.dpy, c->context); Loading @@ -741,14 +748,14 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, clearError(); egl_display_ptr dp = validate_display(dpy); if (!dp) return setError(EGL_BAD_DISPLAY, EGL_FALSE); if (!dp) return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); // If ctx is not EGL_NO_CONTEXT, read is not EGL_NO_SURFACE, or draw is not // EGL_NO_SURFACE, then an EGL_NOT_INITIALIZED error is generated if dpy is // a valid but uninitialized display. if ( (ctx != EGL_NO_CONTEXT) || (read != EGL_NO_SURFACE) || (draw != EGL_NO_SURFACE) ) { if (!dp->isReady()) return setError(EGL_NOT_INITIALIZED, EGL_FALSE); if (!dp->isReady()) return setError(EGL_NOT_INITIALIZED, (EGLBoolean)EGL_FALSE); } // get a reference to the object passed in Loading @@ -759,7 +766,7 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, // validate the context (if not EGL_NO_CONTEXT) if ((ctx != EGL_NO_CONTEXT) && !_c.get()) { // EGL_NO_CONTEXT is valid return setError(EGL_BAD_CONTEXT, EGL_FALSE); return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); } // these are the underlying implementation's object Loading @@ -782,7 +789,7 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, // no context given, use the implementation of the current context if (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE) { // calling eglMakeCurrent( ..., !=0, !=0, EGL_NO_CONTEXT); return setError(EGL_BAD_MATCH, EGL_FALSE); return setError(EGL_BAD_MATCH, (EGLBoolean)EGL_FALSE); } if (cur_c == NULL) { // no current context Loading @@ -793,14 +800,14 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, // retrieve the underlying implementation's draw EGLSurface if (draw != EGL_NO_SURFACE) { if (!_d.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); if (!_d.get()) return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); d = get_surface(draw); impl_draw = d->surface; } // retrieve the underlying implementation's read EGLSurface if (read != EGL_NO_SURFACE) { if (!_r.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); if (!_r.get()) return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); r = get_surface(read); impl_read = r->surface; } Loading @@ -824,7 +831,7 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, } else { // this will ALOGE the error egl_connection_t* const cnx = &gEGLImpl; result = setError(cnx->egl.eglGetError(), EGL_FALSE); result = setError(cnx->egl.eglGetError(), (EGLBoolean)EGL_FALSE); } return result; } Loading @@ -839,7 +846,7 @@ EGLBoolean eglQueryContext( EGLDisplay dpy, EGLContext ctx, if (!dp) return EGL_FALSE; ContextRef _c(dp.get(), ctx); if (!_c.get()) return setError(EGL_BAD_CONTEXT, EGL_FALSE); if (!_c.get()) return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); egl_context_t * const c = get_context(ctx); return c->cnx->egl.eglQueryContext( Loading Loading @@ -900,7 +907,7 @@ EGLBoolean eglWaitGL(void) egl_connection_t* const cnx = &gEGLImpl; if (!cnx->dso) return setError(EGL_BAD_CONTEXT, EGL_FALSE); return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); return cnx->egl.eglWaitGL(); } Loading @@ -911,7 +918,7 @@ EGLBoolean eglWaitNative(EGLint engine) egl_connection_t* const cnx = &gEGLImpl; if (!cnx->dso) return setError(EGL_BAD_CONTEXT, EGL_FALSE); return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); return cnx->egl.eglWaitNative(engine); } Loading Loading @@ -1039,7 +1046,7 @@ public: thread->mQueue.push_back(sync); thread->mCondition.signal(); thread->mFramesQueued++; ATRACE_INT("GPU Frames Outstanding", thread->mQueue.size()); ATRACE_INT("GPU Frames Outstanding", int32_t(thread->mQueue.size())); } } Loading Loading @@ -1073,7 +1080,7 @@ private: Mutex::Autolock lock(mMutex); mQueue.removeAt(0); mFramesCompleted++; ATRACE_INT("GPU Frames Outstanding", mQueue.size()); ATRACE_INT("GPU Frames Outstanding", int32_t(mQueue.size())); } return true; } Loading @@ -1096,7 +1103,7 @@ EGLBoolean eglSwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface draw, SurfaceRef _s(dp.get(), draw); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(draw); Loading Loading @@ -1161,7 +1168,7 @@ EGLBoolean eglCopyBuffers( EGLDisplay dpy, EGLSurface surface, SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); return s->cnx->egl.eglCopyBuffers(dp->disp.dpy, s->surface, target); Loading @@ -1179,7 +1186,7 @@ const char* eglQueryString(EGLDisplay dpy, EGLint name) // If we want to support EGL_EXT_client_extensions later, we can return // the client extension string here instead. if (dpy == EGL_NO_DISPLAY && name == EGL_EXTENSIONS) return setErrorQuiet(EGL_BAD_DISPLAY, nullptr); return setErrorQuiet(EGL_BAD_DISPLAY, (const char*)0); const egl_display_ptr dp = validate_display(dpy); if (!dp) return (const char *) NULL; Loading @@ -1193,6 +1200,8 @@ const char* eglQueryString(EGLDisplay dpy, EGLint name) return dp->getExtensionString(); case EGL_CLIENT_APIS: return dp->getClientApiString(); default: break; } return setError(EGL_BAD_PARAMETER, (const char *)0); } Loading @@ -1213,6 +1222,8 @@ EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint na return dp->disp.queryString.extensions; case EGL_CLIENT_APIS: return dp->disp.queryString.clientApi; default: break; } return setError(EGL_BAD_PARAMETER, (const char *)0); } Loading @@ -1231,7 +1242,7 @@ EGLBoolean eglSurfaceAttrib( SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t * const s = get_surface(surface); Loading @@ -1239,27 +1250,23 @@ EGLBoolean eglSurfaceAttrib( if (!s->win.get()) { setError(EGL_BAD_SURFACE, EGL_FALSE); } int err = native_window_set_auto_refresh(s->win.get(), value ? true : false); return (err == NO_ERROR) ? EGL_TRUE : setError(EGL_BAD_SURFACE, EGL_FALSE); int err = native_window_set_auto_refresh(s->win.get(), value ? true : false); return (err == NO_ERROR) ? EGL_TRUE : setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } if (attribute == EGL_TIMESTAMPS_ANDROID) { if (!s->win.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } int err = native_window_enable_frame_timestamps( s->win.get(), value ? true : false); return (err == NO_ERROR) ? EGL_TRUE : setError(EGL_BAD_SURFACE, EGL_FALSE); int err = native_window_enable_frame_timestamps(s->win.get(), value ? true : false); return (err == NO_ERROR) ? EGL_TRUE : setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } if (s->cnx->egl.eglSurfaceAttrib) { return s->cnx->egl.eglSurfaceAttrib( dp->disp.dpy, s->surface, attribute, value); } return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } EGLBoolean eglBindTexImage( Loading @@ -1272,14 +1279,14 @@ EGLBoolean eglBindTexImage( SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); if (s->cnx->egl.eglBindTexImage) { return s->cnx->egl.eglBindTexImage( dp->disp.dpy, s->surface, buffer); } return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } EGLBoolean eglReleaseTexImage( Loading @@ -1292,14 +1299,14 @@ EGLBoolean eglReleaseTexImage( SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); if (s->cnx->egl.eglReleaseTexImage) { return s->cnx->egl.eglReleaseTexImage( dp->disp.dpy, s->surface, buffer); } return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint interval) Loading Loading @@ -1329,7 +1336,7 @@ EGLBoolean eglWaitClient(void) egl_connection_t* const cnx = &gEGLImpl; if (!cnx->dso) return setError(EGL_BAD_CONTEXT, EGL_FALSE); return setError(EGL_BAD_CONTEXT, (EGLBoolean)EGL_FALSE); EGLBoolean res; if (cnx->egl.eglWaitClient) { Loading @@ -1345,7 +1352,7 @@ EGLBoolean eglBindAPI(EGLenum api) clearError(); if (egl_init_drivers() == EGL_FALSE) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } // bind this API on all EGLs Loading @@ -1362,7 +1369,7 @@ EGLenum eglQueryAPI(void) clearError(); if (egl_init_drivers() == EGL_FALSE) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } egl_connection_t* const cnx = &gEGLImpl; Loading Loading @@ -1420,14 +1427,14 @@ EGLBoolean eglLockSurfaceKHR(EGLDisplay dpy, EGLSurface surface, SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); if (s->cnx->egl.eglLockSurfaceKHR) { return s->cnx->egl.eglLockSurfaceKHR( dp->disp.dpy, s->surface, attrib_list); } return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } EGLBoolean eglUnlockSurfaceKHR(EGLDisplay dpy, EGLSurface surface) Loading @@ -1439,13 +1446,13 @@ EGLBoolean eglUnlockSurfaceKHR(EGLDisplay dpy, EGLSurface surface) SurfaceRef _s(dp.get(), surface); if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); if (s->cnx->egl.eglUnlockSurfaceKHR) { return s->cnx->egl.eglUnlockSurfaceKHR(dp->disp.dpy, s->surface); } return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, Loading Loading @@ -1543,7 +1550,7 @@ EGLint eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, const egl_display_ptr dp = validate_display(dpy); if (!dp) return EGL_FALSE; EGLBoolean result = EGL_FALSE; EGLint result = EGL_FALSE; egl_connection_t* const cnx = &gEGLImpl; if (cnx->dso && cnx->egl.eglClientWaitSyncKHR) { result = cnx->egl.eglClientWaitSyncKHR( Loading Loading @@ -2000,7 +2007,7 @@ EGLuint64NV eglGetSystemTimeFrequencyNV() clearError(); if (egl_init_drivers() == EGL_FALSE) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLuint64NV)EGL_FALSE); } EGLuint64NV ret = 0; Loading @@ -2010,7 +2017,7 @@ EGLuint64NV eglGetSystemTimeFrequencyNV() return cnx->egl.eglGetSystemTimeFrequencyNV(); } return setErrorQuiet(EGL_BAD_DISPLAY, 0); return setErrorQuiet(EGL_BAD_DISPLAY, (EGLuint64NV)0); } EGLuint64NV eglGetSystemTimeNV() Loading @@ -2018,7 +2025,7 @@ EGLuint64NV eglGetSystemTimeNV() clearError(); if (egl_init_drivers() == EGL_FALSE) { return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLuint64NV)EGL_FALSE); } EGLuint64NV ret = 0; Loading @@ -2028,7 +2035,7 @@ EGLuint64NV eglGetSystemTimeNV() return cnx->egl.eglGetSystemTimeNV(); } return setErrorQuiet(EGL_BAD_DISPLAY, 0); return setErrorQuiet(EGL_BAD_DISPLAY, (EGLuint64NV)0); } // ---------------------------------------------------------------------------- Loading Loading @@ -2066,18 +2073,18 @@ EGLBoolean eglGetNextFrameIdANDROID(EGLDisplay dpy, EGLSurface surface, const egl_display_ptr dp = validate_display(dpy); if (!dp) { return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } SurfaceRef _s(dp.get(), surface); if (!_s.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } egl_surface_t const * const s = get_surface(surface); if (!s->win.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } uint64_t nextFrameId = 0; Loading @@ -2087,7 +2094,7 @@ EGLBoolean eglGetNextFrameIdANDROID(EGLDisplay dpy, EGLSurface surface, // This should not happen. Return an error that is not in the spec // so it's obvious something is very wrong. ALOGE("eglGetNextFrameId: Unexpected error."); return setError(EGL_NOT_INITIALIZED, EGL_FALSE); return setError(EGL_NOT_INITIALIZED, (EGLBoolean)EGL_FALSE); } *frameId = nextFrameId; Loading @@ -2101,18 +2108,18 @@ EGLBoolean eglGetCompositorTimingANDROID(EGLDisplay dpy, EGLSurface surface, const egl_display_ptr dp = validate_display(dpy); if (!dp) { return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } SurfaceRef _s(dp.get(), surface); if (!_s.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } egl_surface_t const * const s = get_surface(surface); if (!s->win.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } nsecs_t* compositeDeadline = nullptr; Loading @@ -2131,7 +2138,7 @@ EGLBoolean eglGetCompositorTimingANDROID(EGLDisplay dpy, EGLSurface surface, compositeToPresentLatency = &values[i]; break; default: return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } } Loading @@ -2142,12 +2149,12 @@ EGLBoolean eglGetCompositorTimingANDROID(EGLDisplay dpy, EGLSurface surface, case NO_ERROR: return EGL_TRUE; case INVALID_OPERATION: return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); default: // This should not happen. Return an error that is not in the spec // so it's obvious something is very wrong. ALOGE("eglGetCompositorTiming: Unexpected error."); return setError(EGL_NOT_INITIALIZED, EGL_FALSE); return setError(EGL_NOT_INITIALIZED, (EGLBoolean)EGL_FALSE); } } Loading @@ -2158,19 +2165,19 @@ EGLBoolean eglGetCompositorTimingSupportedANDROID( const egl_display_ptr dp = validate_display(dpy); if (!dp) { return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } SurfaceRef _s(dp.get(), surface); if (!_s.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } egl_surface_t const * const s = get_surface(surface); ANativeWindow* window = s->win.get(); if (!window) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } switch (name) { Loading @@ -2191,18 +2198,18 @@ EGLBoolean eglGetFrameTimestampsANDROID(EGLDisplay dpy, EGLSurface surface, const egl_display_ptr dp = validate_display(dpy); if (!dp) { return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } SurfaceRef _s(dp.get(), surface); if (!_s.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } egl_surface_t const * const s = get_surface(surface); if (!s->win.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } nsecs_t* requestedPresentTime = nullptr; Loading Loading @@ -2249,7 +2256,7 @@ EGLBoolean eglGetFrameTimestampsANDROID(EGLDisplay dpy, EGLSurface surface, releaseTime = &values[i]; break; default: return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); } } Loading @@ -2262,16 +2269,16 @@ EGLBoolean eglGetFrameTimestampsANDROID(EGLDisplay dpy, EGLSurface surface, case NO_ERROR: return EGL_TRUE; case NAME_NOT_FOUND: return setError(EGL_BAD_ACCESS, EGL_FALSE); return setError(EGL_BAD_ACCESS, (EGLBoolean)EGL_FALSE); case INVALID_OPERATION: return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); case BAD_VALUE: return setError(EGL_BAD_PARAMETER, EGL_FALSE); return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE); default: // This should not happen. Return an error that is not in the spec // so it's obvious something is very wrong. ALOGE("eglGetFrameTimestamps: Unexpected error."); return setError(EGL_NOT_INITIALIZED, EGL_FALSE); return setError(EGL_NOT_INITIALIZED, (EGLBoolean)EGL_FALSE); } } Loading @@ -2282,19 +2289,19 @@ EGLBoolean eglGetFrameTimestampSupportedANDROID( const egl_display_ptr dp = validate_display(dpy); if (!dp) { return setError(EGL_BAD_DISPLAY, EGL_FALSE); return setError(EGL_BAD_DISPLAY, (EGLBoolean)EGL_FALSE); } SurfaceRef _s(dp.get(), surface); if (!_s.get()) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } egl_surface_t const * const s = get_surface(surface); ANativeWindow* window = s->win.get(); if (!window) { return setError(EGL_BAD_SURFACE, EGL_FALSE); return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } switch (timestamp) { Loading @@ -2312,14 +2319,12 @@ EGLBoolean eglGetFrameTimestampSupportedANDROID( return EGL_TRUE; case EGL_DISPLAY_PRESENT_TIME_ANDROID: { int value = 0; window->query(window, NATIVE_WINDOW_FRAME_TIMESTAMPS_SUPPORTS_PRESENT, &value); window->query(window, NATIVE_WINDOW_FRAME_TIMESTAMPS_SUPPORTS_PRESENT, &value); return value == 0 ? EGL_FALSE : EGL_TRUE; } case EGL_DISPLAY_RETIRE_TIME_ANDROID: { int value = 0; window->query(window, NATIVE_WINDOW_FRAME_TIMESTAMPS_SUPPORTS_RETIRE, &value); window->query(window, NATIVE_WINDOW_FRAME_TIMESTAMPS_SUPPORTS_RETIRE, &value); return value == 0 ? EGL_FALSE : EGL_TRUE; } default: Loading