gallium/dri: add dri_screen egl image validate hooks

For being used by EGLImage import in the following commits.

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>
This commit is contained in:
Qiang Yu 2021-08-10 16:52:12 +08:00 committed by Marge Bot
parent 27d91fec04
commit d45d749e8b
5 changed files with 51 additions and 0 deletions

View File

@ -2350,6 +2350,15 @@ dri2_init_screen(__DRIscreen * sPriv)
screen->broken_invalidate = !sPriv->dri2.useInvalidate;
screen->lookup_egl_image = dri2_lookup_egl_image;
const __DRIimageLookupExtension *loader = sPriv->dri2.image;
if (loader &&
loader->base.version >= 2 &&
loader->validateEGLImage &&
loader->lookupEGLImageValidated) {
screen->validate_egl_image = dri2_validate_egl_image;
screen->lookup_egl_image_validated = dri2_lookup_egl_image_validated;
}
return configs;
destroy_screen:
@ -2404,6 +2413,15 @@ dri_kms_init_screen(__DRIscreen * sPriv)
screen->broken_invalidate = !sPriv->dri2.useInvalidate;
screen->lookup_egl_image = dri2_lookup_egl_image;
const __DRIimageLookupExtension *loader = sPriv->dri2.image;
if (loader &&
loader->base.version >= 2 &&
loader->validateEGLImage &&
loader->lookupEGLImageValidated) {
screen->validate_egl_image = dri2_validate_egl_image;
screen->lookup_egl_image_validated = dri2_lookup_egl_image_validated;
}
return configs;
destroy_screen:

View File

@ -253,6 +253,22 @@ dri2_lookup_egl_image(struct dri_screen *screen, void *handle)
return img;
}
boolean
dri2_validate_egl_image(struct dri_screen *screen, void *handle)
{
const __DRIimageLookupExtension *loader = screen->sPriv->dri2.image;
return loader->validateEGLImage(handle, screen->sPriv->loaderPrivate);
}
__DRIimage *
dri2_lookup_egl_image_validated(struct dri_screen *screen, void *handle)
{
const __DRIimageLookupExtension *loader = screen->sPriv->dri2.image;
return loader->lookupEGLImageValidated(handle, screen->sPriv->loaderPrivate);
}
__DRIimage *
dri2_create_image_from_renderbuffer2(__DRIcontext *context,
int renderbuffer, void *loaderPrivate,

View File

@ -62,6 +62,12 @@ dri2_yuv_dma_buf_supported(struct dri_screen *screen,
__DRIimage *
dri2_lookup_egl_image(struct dri_screen *screen, void *handle);
boolean
dri2_validate_egl_image(struct dri_screen *screen, void *handle);
__DRIimage *
dri2_lookup_egl_image_validated(struct dri_screen *screen, void *handle);
__DRIimage *
dri2_create_image_from_renderbuffer(__DRIcontext *context,
int renderbuffer, void *loaderPrivate);

View File

@ -81,6 +81,8 @@ struct dri_screen
/* hooks filled in by dri2 & drisw */
__DRIimage * (*lookup_egl_image)(struct dri_screen *ctx, void *handle);
boolean (*validate_egl_image)(struct dri_screen *ctx, void *handle);
__DRIimage * (*lookup_egl_image_validated)(struct dri_screen *ctx, void *handle);
/* DRI exts that vary based on gallium pipe_screen caps. */
__DRIimageExtension image_extension;

View File

@ -541,6 +541,15 @@ drisw_init_screen(__DRIscreen * sPriv)
sPriv->extensions = drisw_screen_extensions;
screen->lookup_egl_image = dri2_lookup_egl_image;
const __DRIimageLookupExtension *image = sPriv->dri2.image;
if (image &&
image->base.version >= 2 &&
image->validateEGLImage &&
image->lookupEGLImageValidated) {
screen->validate_egl_image = dri2_validate_egl_image;
screen->lookup_egl_image_validated = dri2_lookup_egl_image_validated;
}
return configs;
fail:
dri_destroy_screen_helper(screen);