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:
parent
27d91fec04
commit
d45d749e8b
|
@ -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:
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue