Mesa (main): gbm/dri: implement image lookup extension version 2

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Sep 9 05:37:15 UTC 2021


Module: Mesa
Branch: main
Commit: 27d91fec0440df1cf92460b88592a454230b3f9c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=27d91fec0440df1cf92460b88592a454230b3f9c

Author: Qiang Yu <yuq825 at gmail.com>
Date:   Wed Aug 11 16:59:05 2021 +0800

gbm/dri: implement image lookup extension version 2

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Emil Velikov <emil.l.velikov at gmail.com>
Signed-off-by: Qiang Yu <yuq825 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12336>

---

 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,



More information about the mesa-commit mailing list