[Mesa-dev] [PATCH 4/4] st/dri: implement __DRIimageExtension::validateUsage properly
Marek Olšák
maraeo at gmail.com
Mon Oct 9 17:05:06 UTC 2017
From: Marek Olšák <marek.olsak at amd.com>
---
src/gallium/state_trackers/dri/dri2.c | 30 ++++++++++++++++++++++--------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
index 8672174..e972528 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -1265,29 +1265,43 @@ dri2_dup_image(__DRIimage *image, void *loaderPrivate)
/* This should be 0 for sub images, but dup is also used for base images. */
img->dri_components = image->dri_components;
img->loader_private = loaderPrivate;
return img;
}
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 *
dri2_from_names(__DRIscreen *screen, int width, int height, int format,
int *names, int num_names, int *strides, int *offsets,
void *loaderPrivate)
{
__DRIimage *img;
int dri_components;
struct winsys_handle whandle;
--
2.7.4
More information about the mesa-dev
mailing list