On Fri, Apr 1, 2016 at 10:29 PM, Rob Clark <robdcl...@gmail.com> wrote: > From: Rob Clark <robcl...@freedesktop.org> > > Required to implement EGL_ANDROID_native_fence_sync. > > Signed-off-by: Rob Clark <robcl...@freedesktop.org> > --- > include/GL/internal/dri_interface.h | 44 > ++++++++++++++++++++++++++++++++++++- > 1 file changed, 43 insertions(+), 1 deletion(-) > > diff --git a/include/GL/internal/dri_interface.h > b/include/GL/internal/dri_interface.h > index 2b49a29..8b0dadc 100644 > --- a/include/GL/internal/dri_interface.h > +++ b/include/GL/internal/dri_interface.h > @@ -339,12 +339,19 @@ struct __DRI2throttleExtensionRec { > */ > > #define __DRI2_FENCE "DRI2_Fence" > -#define __DRI2_FENCE_VERSION 1 > +#define __DRI2_FENCE_VERSION 2 > > #define __DRI2_FENCE_TIMEOUT_INFINITE 0xffffffffffffffffllu > > #define __DRI2_FENCE_FLAG_FLUSH_COMMANDS (1 << 0) > > +/** > + * \name Capabilities that might be returned by > __DRI2fenceExtensionRec::get_capabilities > + */ > +/*@{*/ > +#define __DRI_FENCE_CAP_NATIVE_FD 1 > +/*@}*/ > + > struct __DRI2fenceExtensionRec { > __DRIextension base; > > @@ -389,6 +396,41 @@ struct __DRI2fenceExtensionRec { > * sense with this function (right now there are none) > */ > void (*server_wait_sync)(__DRIcontext *ctx, void *fence, unsigned flags); > + > + /** > + * Query for general capabilities of the driver that concern fences. > + * Returns a bitmask of __DRI_FENCE_CAP_x > + * > + * \since 2 > + */ > + unsigned (*get_capabilities)(__DRIscreen *screen); > + > + /** > + * Create an fd (file descriptor) associated fence. If the fence fd > + * is -1, this behaves similarly to create_fence() except that when > + * rendering is flushed the driver creates a fence fd. Otherwise, > + * the driver wraps an existing fence fd. > + * > + * This is used to implement the EGL_ANDROID_native_fence_sync extension. > + * > + * \since 2 > + * > + * \param ctx the context associated with the fence > + * \param fd the fence fd or -1 > + */ > + void *(*create_fence_fd)(__DRIcontext *ctx, int fd); > + > + /** > + * For fences created with create_fence_fd(), after rendering is flushed, > + * this retrieves the native fence fd. Caller takes ownership of the > + * fd and will close() it when it is no longer needed. > + * > + * \since 2 > + * > + * \param screen the screen associated with the fence > + * \param fence the fence > + */ > + int (*get_fence_fd)(__DRIscreen *screen, void *fence);
This can be even more generic. If you add a requirement that get_fence_fd must work with any fence, create_fence_fd() essentially becomes import_fence_fd() and create_fence() can be used if fd is -1. The reason is that we may be interested in adding support for cl_khr_gl_event in the future (MesaGL + HSA/OpenCL), which allows sharing any GL fence with CL, and we will most likely use fd fences. Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev