diff options
Diffstat (limited to 'include/GL/internal/dri_interface.h')
-rw-r--r-- | include/GL/internal/dri_interface.h | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index d0b1bc66835..c6ea464f185 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -340,12 +340,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; @@ -390,6 +397,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); }; |