diff options
author | Marek Olšák <[email protected]> | 2015-04-10 10:43:26 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2015-04-30 14:38:38 +0200 |
commit | b02a5bf3ba04608d50916a4ca00261461280d548 (patch) | |
tree | 95c9383e0d896b2be8cd8296fdc463eb77cecf06 /include/GL/internal/dri_interface.h | |
parent | 396cbabbefaae64deac6d33c79898bb07db8a621 (diff) |
dri_interface: add an interface for fences
Diffstat (limited to 'include/GL/internal/dri_interface.h')
-rw-r--r-- | include/GL/internal/dri_interface.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index eb7da23f7ba..c827bb640f3 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -85,6 +85,7 @@ typedef struct __DRIdri2ExtensionRec __DRIdri2Extension; typedef struct __DRIdri2LoaderExtensionRec __DRIdri2LoaderExtension; typedef struct __DRI2flushExtensionRec __DRI2flushExtension; typedef struct __DRI2throttleExtensionRec __DRI2throttleExtension; +typedef struct __DRI2fenceExtensionRec __DRI2fenceExtension; typedef struct __DRIimageLoaderExtensionRec __DRIimageLoaderExtension; @@ -339,6 +340,65 @@ struct __DRI2throttleExtensionRec { enum __DRI2throttleReason reason); }; + +/** + * Extension for fences / synchronization objects. + */ + +#define __DRI2_FENCE "DRI2_Fence" +#define __DRI2_FENCE_VERSION 1 + +#define __DRI2_FENCE_TIMEOUT_INFINITE 0xffffffffffffffffllu + +#define __DRI2_FENCE_FLAG_FLUSH_COMMANDS (1 << 0) + +struct __DRI2fenceExtensionRec { + __DRIextension base; + + /** + * Create and insert a fence into the command stream of the context. + */ + void *(*create_fence)(__DRIcontext *ctx); + + /** + * Get a fence associated with the OpenCL event object. + * This can be NULL, meaning that OpenCL interoperability is not supported. + */ + void *(*get_fence_from_cl_event)(__DRIscreen *screen, intptr_t cl_event); + + /** + * Destroy a fence. + */ + void (*destroy_fence)(__DRIscreen *screen, void *fence); + + /** + * This function waits and doesn't return until the fence is signalled + * or the timeout expires. It returns true if the fence has been signaled. + * + * \param ctx the context where commands are flushed + * \param fence the fence + * \param flags a combination of __DRI2_FENCE_FLAG_xxx flags + * \param timeout the timeout in ns or __DRI2_FENCE_TIMEOUT_INFINITE + */ + GLboolean (*client_wait_sync)(__DRIcontext *ctx, void *fence, + unsigned flags, uint64_t timeout); + + /** + * This function enqueues a wait command into the command stream of + * the context and then returns. When the execution reaches the wait + * command, no further execution will be done in the context until + * the fence is signaled. This is a no-op if the device doesn't support + * parallel execution of contexts. + * + * \param ctx the context where the waiting is done + * \param fence the fence + * \param flags a combination of __DRI2_FENCE_FLAG_xxx flags that make + * sense with this function (right now there are none) + */ + void (*server_wait_sync)(__DRIcontext *ctx, void *fence, unsigned flags); +}; + + /*@}*/ /** |