summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQiang Yu <yuq825@gmail.com>2021-08-11 16:59:05 +0800
committerMarge Bot <eric+marge@anholt.net>2021-09-09 01:42:39 +0000
commit27d91fec0440df1cf92460b88592a454230b3f9c (patch)
tree8118329b6f44dde4a9ed468e31f4ef81f2aca87a
parentdcf38724c74f0784dce919e48dff0f53938e5560 (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.c2
-rw-r--r--src/gbm/backends/dri/gbm_dri.c28
-rw-r--r--src/gbm/backends/dri/gbm_driint.h2
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,