From 27d91fec0440df1cf92460b88592a454230b3f9c Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Wed, 11 Aug 2021 16:59:05 +0800 Subject: gbm/dri: implement image lookup extension version 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák Reviewed-by: Emil Velikov Signed-off-by: Qiang Yu Part-of: --- src/egl/drivers/dri2/platform_drm.c | 2 ++ src/gbm/backends/dri/gbm_dri.c | 28 ++++++++++++++++++++++++++-- src/gbm/backends/dri/gbm_driint.h | 2 ++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c index 2b329437f88..6aada724a54 100644 --- a/src/egl/drivers/dri2/platform_drm.c +++ b/src/egl/drivers/dri2/platform_drm.c @@ -752,6 +752,8 @@ dri2_initialize_drm(_EGLDisplay *disp) dri2_dpy->driver_configs = dri2_dpy->gbm_dri->driver_configs; dri2_dpy->gbm_dri->lookup_image = dri2_lookup_egl_image; + dri2_dpy->gbm_dri->validate_image = dri2_validate_egl_image; + dri2_dpy->gbm_dri->lookup_image_validated = dri2_lookup_egl_image_validated; dri2_dpy->gbm_dri->lookup_user_data = disp; dri2_dpy->gbm_dri->get_buffers = dri2_drm_get_buffers; diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index c3d9cdefa3f..1c2b9898716 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -68,6 +68,28 @@ dri_lookup_egl_image(__DRIscreen *screen, void *image, void *data) return dri->lookup_image(screen, image, dri->lookup_user_data); } +static GLboolean +dri_validate_egl_image(void *image, void *data) +{ + struct gbm_dri_device *dri = data; + + if (dri->validate_image == NULL) + return false; + + return dri->validate_image(image, dri->lookup_user_data); +} + +static __DRIimage * +dri_lookup_egl_image_validated(void *image, void *data) +{ + struct gbm_dri_device *dri = data; + + if (dri->lookup_image_validated == NULL) + return NULL; + + return dri->lookup_image_validated(image, dri->lookup_user_data); +} + static __DRIbuffer * dri_get_buffers(__DRIdrawable * driDrawable, int *width, int *height, @@ -214,9 +236,11 @@ static const __DRIuseInvalidateExtension use_invalidate = { }; static const __DRIimageLookupExtension image_lookup_extension = { - .base = { __DRI_IMAGE_LOOKUP, 1 }, + .base = { __DRI_IMAGE_LOOKUP, 2 }, - .lookupEGLImage = dri_lookup_egl_image + .lookupEGLImage = dri_lookup_egl_image, + .validateEGLImage = dri_validate_egl_image, + .lookupEGLImageValidated = dri_lookup_egl_image_validated, }; static const __DRIdri2LoaderExtension dri2_loader_extension = { diff --git a/src/gbm/backends/dri/gbm_driint.h b/src/gbm/backends/dri/gbm_driint.h index 9e77ba5887c..dcca35476d5 100644 --- a/src/gbm/backends/dri/gbm_driint.h +++ b/src/gbm/backends/dri/gbm_driint.h @@ -81,6 +81,8 @@ struct gbm_dri_device { const __DRIextension **driver_extensions; __DRIimage *(*lookup_image)(__DRIscreen *screen, void *image, void *data); + GLboolean (*validate_image)(void *image, void *data); + __DRIimage *(*lookup_image_validated)(void *image, void *data); void *lookup_user_data; __DRIbuffer *(*get_buffers)(__DRIdrawable * driDrawable, -- cgit v1.2.3