summaryrefslogtreecommitdiff
path: root/glamor/glamor.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2016-08-23 12:18:56 +0200
committerHans de Goede <hdegoede@redhat.com>2016-09-13 10:26:21 +0200
commita74d553cb97d545148bd2f81b7bd021cca94e076 (patch)
tree3ee6acc9ddcafce773fc18e0c2185d0a9285d3f1 /glamor/glamor.c
parent527c6baa294d17c5eca1d87ac941844872e90dac (diff)
downloadxserver-a74d553cb97d545148bd2f81b7bd021cca94e076.tar.gz
glamor: Add glamor_shareable_fd_from_pixmap()
Add glamor_shareable_fd_from_pixmap function to get dma-buf fds suitable for sharing across GPUs (not using GPU specific tiling). This is necessary for the modesetting driver to correctly implement the DRI2 SharePixmapBacking callback. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'glamor/glamor.c')
-rw-r--r--glamor/glamor.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/glamor/glamor.c b/glamor/glamor.c
index 5ba440c83..903f6bdf6 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -821,6 +821,26 @@ glamor_fd_from_pixmap(ScreenPtr screen,
return -1;
}
+_X_EXPORT int
+glamor_shareable_fd_from_pixmap(ScreenPtr screen,
+ PixmapPtr pixmap, CARD16 *stride, CARD32 *size)
+{
+ unsigned orig_usage_hint = pixmap->usage_hint;
+ int ret;
+
+ /*
+ * The actual difference between a sharable and non sharable buffer
+ * is decided 4 call levels deep in glamor_make_pixmap_exportable()
+ * based on pixmap->usage_hint == CREATE_PIXMAP_USAGE_SHARED
+ * 2 of those calls are also exported API, so we cannot just add a flag.
+ */
+ pixmap->usage_hint = CREATE_PIXMAP_USAGE_SHARED;
+ ret = glamor_fd_from_pixmap(screen, pixmap, stride, size);
+ pixmap->usage_hint = orig_usage_hint;
+
+ return ret;
+}
+
int
glamor_name_from_pixmap(PixmapPtr pixmap, CARD16 *stride, CARD32 *size)
{