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>
This commit is contained in:
parent
527c6baa29
commit
a74d553cb9
|
@ -821,6 +821,26 @@ glamor_fd_from_pixmap(ScreenPtr screen,
|
||||||
return -1;
|
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
|
int
|
||||||
glamor_name_from_pixmap(PixmapPtr pixmap, CARD16 *stride, CARD32 *size)
|
glamor_name_from_pixmap(PixmapPtr pixmap, CARD16 *stride, CARD32 *size)
|
||||||
{
|
{
|
||||||
|
|
|
@ -181,6 +181,26 @@ extern _X_EXPORT int glamor_fd_from_pixmap(ScreenPtr screen,
|
||||||
PixmapPtr pixmap,
|
PixmapPtr pixmap,
|
||||||
CARD16 *stride, CARD32 *size);
|
CARD16 *stride, CARD32 *size);
|
||||||
|
|
||||||
|
/* @glamor_shareable_fd_from_pixmap: Get a dma-buf fd suitable for sharing
|
||||||
|
* with other GPUs from a pixmap.
|
||||||
|
*
|
||||||
|
* @screen: Current screen pointer.
|
||||||
|
* @pixmap: The pixmap from which we want the fd.
|
||||||
|
* @stride, @size: Pointers to fill the stride and size of the
|
||||||
|
* buffer associated to the fd.
|
||||||
|
*
|
||||||
|
* The returned fd will point to a buffer which is suitable for sharing
|
||||||
|
* across GPUs (not using GPU specific tiling).
|
||||||
|
* The pixmap and the buffer associated by the fd will share the same
|
||||||
|
* content.
|
||||||
|
* The pixmap's stride may be modified by this function.
|
||||||
|
* Returns the fd on success, -1 on error.
|
||||||
|
* */
|
||||||
|
extern _X_EXPORT int glamor_shareable_fd_from_pixmap(ScreenPtr screen,
|
||||||
|
PixmapPtr pixmap,
|
||||||
|
CARD16 *stride,
|
||||||
|
CARD32 *size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @glamor_name_from_pixmap: Gets a gem name from a pixmap.
|
* @glamor_name_from_pixmap: Gets a gem name from a pixmap.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue
Block a user