st/dri: implement __DRIimageExtension::validateUsage properly

Reviewed-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Marek Olšák 2017-10-09 18:56:22 +02:00
parent 07fdc0a09c
commit 255573996c
1 changed files with 22 additions and 8 deletions

View File

@ -1272,15 +1272,29 @@ dri2_dup_image(__DRIimage *image, void *loaderPrivate)
static GLboolean
dri2_validate_usage(__DRIimage *image, unsigned int use)
{
/*
* Gallium drivers are bad at adding usages to the resources
* once opened again in another process, which is the main use
* case for this, so we have to lie.
if (!image || !image->texture)
return false;
struct pipe_screen *screen = image->texture->screen;
if (!screen->check_resource_capability)
return true;
/* We don't want to check these:
* __DRI_IMAGE_USE_SHARE (all images are shareable)
* __DRI_IMAGE_USE_BACKBUFFER (all images support this)
*/
if (image != NULL)
return GL_TRUE;
else
return GL_FALSE;
unsigned bind = 0;
if (use & __DRI_IMAGE_USE_SCANOUT)
bind |= PIPE_BIND_SCANOUT;
if (use & __DRI_IMAGE_USE_LINEAR)
bind |= PIPE_BIND_LINEAR;
if (use & __DRI_IMAGE_USE_CURSOR)
bind |= PIPE_BIND_CURSOR;
if (!bind)
return true;
return screen->check_resource_capability(screen, image->texture, bind);
}
static __DRIimage *