From 82db518f1519cec9e3842f23455a105e2006afbd Mon Sep 17 00:00:00 2001 From: Marek Olšák Date: Wed, 24 Feb 2016 18:51:15 +0100 Subject: gallium: add external usage flags to resource_from(get)_handle (v2) This will allow drivers to make better decisions about texture sharing for DRI2, DRI3, Wayland, and OpenCL. v2: add read/write flags, take advantage of __DRI_IMAGE_USE_BACKBUFFER Reviewed-by: Axel Davy --- src/gallium/include/pipe/p_defines.h | 11 +++++++++++ src/gallium/include/pipe/p_screen.h | 10 ++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) (limited to 'src/gallium/include/pipe') diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index a91e6e55055..c9149bea309 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -529,6 +529,17 @@ enum pipe_reset_status }; +/** + * resource_get_handle flags. + */ +/* Requires pipe_context::flush_resource before external use. */ +#define PIPE_HANDLE_USAGE_EXPLICIT_FLUSH (1 << 0) +/* Expected external use of the resource: */ +#define PIPE_HANDLE_USAGE_READ (1 << 1) +#define PIPE_HANDLE_USAGE_WRITE (1 << 2) +#define PIPE_HANDLE_USAGE_READ_WRITE (PIPE_HANDLE_USAGE_READ | \ + PIPE_HANDLE_USAGE_WRITE) + /** * Implementation capabilities/limits which are queried through * pipe_screen::get_param() diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h index 211bc2440f9..4f30e75ab49 100644 --- a/src/gallium/include/pipe/p_screen.h +++ b/src/gallium/include/pipe/p_screen.h @@ -182,10 +182,13 @@ struct pipe_screen { * NOTE: in the case of DRM_API_HANDLE_TYPE_FD handles, the caller * retains ownership of the FD. (This is consistent with * EGL_EXT_image_dma_buf_import) + * + * \param usage A combination of PIPE_HANDLE_USAGE_* flags. */ struct pipe_resource * (*resource_from_handle)(struct pipe_screen *, const struct pipe_resource *templat, - struct winsys_handle *handle); + struct winsys_handle *handle, + unsigned usage); /** * Create a resource from user memory. This maps the user memory into @@ -203,10 +206,13 @@ struct pipe_screen { * NOTE: in the case of DRM_API_HANDLE_TYPE_FD handles, the caller * takes ownership of the FD. (This is consistent with * EGL_MESA_image_dma_buf_export) + * + * \param usage A combination of PIPE_HANDLE_USAGE_* flags. */ boolean (*resource_get_handle)(struct pipe_screen *, struct pipe_resource *tex, - struct winsys_handle *handle); + struct winsys_handle *handle, + unsigned usage); void (*resource_destroy)(struct pipe_screen *, -- cgit v1.2.3