diff options
author | Qiang Yu <yuq825@gmail.com> | 2021-08-11 16:59:05 +0800 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2021-09-09 01:42:39 +0000 |
commit | 27d91fec0440df1cf92460b88592a454230b3f9c (patch) | |
tree | 8118329b6f44dde4a9ed468e31f4ef81f2aca87a | |
parent | dcf38724c74f0784dce919e48dff0f53938e5560 (diff) |
gbm/dri: implement image lookup extension version 2
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12336>
-rw-r--r-- | src/egl/drivers/dri2/platform_drm.c | 2 | ||||
-rw-r--r-- | src/gbm/backends/dri/gbm_dri.c | 28 | ||||
-rw-r--r-- | 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, |