On 5 February 2018 at 07:02, Tapani Pälli <tapani.pa...@intel.com> wrote: > v2: cleanup, move callbacks to _egl_display struct (Emil Velikov) > adapt to earlier ctx->screen changes > > v3: remove useless checking, add _eglSetFuncName (Emil Velikov) > > Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> > Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com> (v2) > --- > src/egl/drivers/dri2/egl_dri2.c | 16 ++++++++++++++++ > src/egl/drivers/dri2/egl_dri2.h | 1 + > src/egl/main/eglapi.c | 42 > +++++++++++++++++++++++++++++++++++++++++ > src/egl/main/eglapi.h | 4 ++++ > src/egl/main/egldisplay.h | 4 ++++ > src/egl/main/eglentrypoint.h | 1 + > 6 files changed, 68 insertions(+) > > diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c > index d5a4f72e86..e9b556ec5f 100644 > --- a/src/egl/drivers/dri2/egl_dri2.c > +++ b/src/egl/drivers/dri2/egl_dri2.c > @@ -458,6 +458,7 @@ static const struct dri2_extension_match > optional_core_extensions[] = { > { __DRI2_INTEROP, 1, offsetof(struct dri2_egl_display, interop) }, > { __DRI_IMAGE, 1, offsetof(struct dri2_egl_display, image) }, > { __DRI2_FLUSH_CONTROL, 1, offsetof(struct dri2_egl_display, > flush_control) }, > + { __DRI2_BLOB, 1, offsetof(struct dri2_egl_display, blob) }, > { NULL, 0, 0 } > }; > > @@ -727,6 +728,9 @@ dri2_setup_screen(_EGLDisplay *disp) > } > } > > + if (dri2_dpy->blob) > + disp->Extensions.ANDROID_blob_cache = EGL_TRUE; > + > disp->Extensions.KHR_reusable_sync = EGL_TRUE; > > if (dri2_dpy->image) { > @@ -3016,6 +3020,17 @@ dri2_dup_native_fence_fd(_EGLDriver *drv, _EGLDisplay > *dpy, _EGLSync *sync) > return dup(sync->SyncFd); > } > > +static void > +dri2_set_blob_cache_funcs(_EGLDriver *drv, _EGLDisplay *dpy, > + EGLSetBlobFuncANDROID set, > + EGLGetBlobFuncANDROID get) > +{ > + struct dri2_egl_display *dri2_dpy = dri2_egl_display(dpy); > + dri2_dpy->blob->set_cache_funcs(dri2_dpy->dri_screen, > + dpy->BlobCacheSet, > + dpy->BlobCacheGet); > +} > + > static EGLint > dri2_client_wait_sync(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, > EGLint flags, EGLTime timeout) > @@ -3234,6 +3249,7 @@ _eglBuiltInDriver(void) > dri2_drv->API.GLInteropQueryDeviceInfo = dri2_interop_query_device_info; > dri2_drv->API.GLInteropExportObject = dri2_interop_export_object; > dri2_drv->API.DupNativeFenceFDANDROID = dri2_dup_native_fence_fd; > + dri2_drv->API.SetBlobCacheFuncsANDROID = dri2_set_blob_cache_funcs; > > dri2_drv->Name = "DRI2"; > > diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h > index cc76c73eab..c49156fbb6 100644 > --- a/src/egl/drivers/dri2/egl_dri2.h > +++ b/src/egl/drivers/dri2/egl_dri2.h > @@ -171,6 +171,7 @@ struct dri2_egl_display > const __DRInoErrorExtension *no_error; > const __DRI2configQueryExtension *config; > const __DRI2fenceExtension *fence; > + const __DRI2blobExtension *blob; > const __DRI2rendererQueryExtension *rendererQuery; > const __DRI2interopExtension *interop; > int fd; > diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c > index 5110688f2d..2d2a6bce3f 100644 > --- a/src/egl/main/eglapi.c > +++ b/src/egl/main/eglapi.c > @@ -476,6 +476,7 @@ _eglCreateExtensionsString(_EGLDisplay *dpy) > char *exts = dpy->ExtensionsString; > > /* Please keep these sorted alphabetically. */ > + _EGL_CHECK_EXTENSION(ANDROID_blob_cache); > _EGL_CHECK_EXTENSION(ANDROID_framebuffer_target); > _EGL_CHECK_EXTENSION(ANDROID_image_native_buffer); > _EGL_CHECK_EXTENSION(ANDROID_native_fence_sync); > @@ -2522,6 +2523,47 @@ eglQueryDmaBufModifiersEXT(EGLDisplay dpy, EGLint > format, EGLint max_modifiers, > RETURN_EGL_EVAL(disp, ret); > } > > +static void EGLAPIENTRY > +eglSetBlobCacheFuncsANDROID(EGLDisplay *dpy, EGLSetBlobFuncANDROID set, > + EGLGetBlobFuncANDROID get) > +{ > + /* This function does not return anything so we cannot > + * utilize the helper macros _EGL_FUNC_START or _EGL_CHECK_DISPLAY. > + */ > + _EGLDisplay *disp = _eglLockDisplay(dpy); > + if (!_eglSetFuncName(__func__, disp, EGL_OBJECT_DISPLAY_KHR, NULL)) { > + if (disp) { Nit: fold the two conditionals - if (foo && bar)
> + _eglUnlockDisplay(disp); > + return; > + } > + } > + > + _EGLDriver *drv = _eglCheckDisplay(disp, __func__); > + if (!drv) > + return; > + Missing UnlockDisplay - can happen if we pass valid, yet uninitialized dpy. With the unlock (regardless of the nit) the patch is Reviewed-by: Emil Velikov <emil.veli...@collabora.com> -Emil _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev