gbm: Validate usage flags in gbm_bo_create_from_egl_image()
The entry point is supposed to validate that the EGLImage is suitable for the passed in usage flags, but that was never implemented.
This commit is contained in:
parent
2f868f1ddd
commit
221c678329
|
@ -894,7 +894,7 @@ struct __DRIdri2ExtensionRec {
|
|||
* extensions.
|
||||
*/
|
||||
#define __DRI_IMAGE "DRI_IMAGE"
|
||||
#define __DRI_IMAGE_VERSION 1
|
||||
#define __DRI_IMAGE_VERSION 2
|
||||
|
||||
/**
|
||||
* These formats correspond to the similarly named MESA_FORMAT_*
|
||||
|
@ -946,6 +946,13 @@ struct __DRIimageExtensionRec {
|
|||
* The new __DRIimage will share the content with the old one, see dup(2).
|
||||
*/
|
||||
__DRIimage *(*dupImage)(__DRIimage *image, void *loaderPrivate);
|
||||
|
||||
/**
|
||||
* Validate that a __DRIimage can be used a certain way.
|
||||
*
|
||||
* \since 2
|
||||
*/
|
||||
GLboolean (*validateUsage)(__DRIimage *image, unsigned int use);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -626,7 +626,7 @@ dri2_destroy_image(__DRIimage *img)
|
|||
}
|
||||
|
||||
static struct __DRIimageExtensionRec dri2ImageExtension = {
|
||||
{ __DRI_IMAGE, __DRI_IMAGE_VERSION },
|
||||
{ __DRI_IMAGE, 1 },
|
||||
dri2_create_image_from_name,
|
||||
dri2_create_image_from_renderbuffer,
|
||||
dri2_destroy_image,
|
||||
|
|
|
@ -255,6 +255,7 @@ gbm_dri_bo_create_from_egl_image(struct gbm_device *gbm,
|
|||
{
|
||||
struct gbm_dri_device *dri = gbm_dri_device(gbm);
|
||||
struct gbm_dri_bo *bo;
|
||||
unsigned dri_use = 0;
|
||||
|
||||
(void) egl_dpy;
|
||||
|
||||
|
@ -276,6 +277,16 @@ gbm_dri_bo_create_from_egl_image(struct gbm_device *gbm,
|
|||
if (bo->image == NULL)
|
||||
return NULL;
|
||||
|
||||
if (usage & GBM_BO_USE_SCANOUT)
|
||||
dri_use |= __DRI_IMAGE_USE_SCANOUT;
|
||||
if (usage & GBM_BO_USE_CURSOR_64X64)
|
||||
dri_use |= __DRI_IMAGE_USE_CURSOR;
|
||||
if (dri->image->base.version >= 2 &&
|
||||
!dri->image->validateUsage(bo->image, dri_use)) {
|
||||
free(bo);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_HANDLE,
|
||||
&bo->base.base.handle.s32);
|
||||
dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_STRIDE,
|
||||
|
|
|
@ -324,14 +324,26 @@ intel_dup_image(__DRIimage *orig_image, void *loaderPrivate)
|
|||
return image;
|
||||
}
|
||||
|
||||
static GLboolean
|
||||
intel_validate_usage(__DRIimage *image, unsigned int use)
|
||||
{
|
||||
if (use & __DRI_IMAGE_USE_CURSOR) {
|
||||
if (image->region->width != 64 || image->region->height != 64)
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
static struct __DRIimageExtensionRec intelImageExtension = {
|
||||
{ __DRI_IMAGE, __DRI_IMAGE_VERSION },
|
||||
{ __DRI_IMAGE, 2 },
|
||||
intel_create_image_from_name,
|
||||
intel_create_image_from_renderbuffer,
|
||||
intel_destroy_image,
|
||||
intel_create_image,
|
||||
intel_query_image,
|
||||
intel_dup_image
|
||||
intel_dup_image,
|
||||
intel_validate_usage
|
||||
};
|
||||
|
||||
static const __DRIextension *intelScreenExtensions[] = {
|
||||
|
|
|
@ -375,7 +375,7 @@ radeon_query_image(__DRIimage *image, int attrib, int *value)
|
|||
}
|
||||
|
||||
static struct __DRIimageExtensionRec radeonImageExtension = {
|
||||
{ __DRI_IMAGE, __DRI_IMAGE_VERSION },
|
||||
{ __DRI_IMAGE, 1 },
|
||||
radeon_create_image_from_name,
|
||||
radeon_create_image_from_renderbuffer,
|
||||
radeon_destroy_image,
|
||||
|
|
Loading…
Reference in New Issue