Name EXT_win32_keyed_mutex Name Strings GL_EXT_win32_keyed_mutex Contributors Carsten Rohde, NVIDIA James Jones, NVIDIA Contact James Jones, NVIDIA (jajones 'at' nvidia.com) Status Complete Version Last Modified Date: June 6, 2017 Revision: 2 Number 506 OpenGL ES Extension #283 Dependencies Written against the OpenGL 4.5 and OpenGL ES 3.2 specifications. Requires GL_EXT_memory_object. Overview Direct3D image objects may have a built-in synchronization primitive associated with them that can be used to synchronize access to their contents across process and API boundaries. This extension provides access to that synchronization primitive via two new commands that operate on GL memory objects. New Procedures and Functions boolean AcquireKeyedMutexWin32EXT(uint memory, uint64 key, uint timeout); boolean ReleaseKeyedMutexWin32EXT(uint memory, uint64 key); New Tokens Additions to Chapter 4 of the OpenGL 4.5 Specification (Event Model) Add a new section between sections 4.1, "Sync Objects and Fences" and section 4.2, "Query Objects and Asynchronous Queries" 4.2 Memory Object Keyed Mutexes Memory objects imported with the handle types HANDLE_TYPE_D3D11_IMAGE_EXT and HANDLE_TYPE_D3D11_KMT_IMAGE_EXT may have a synchronization object known as a keyed mutex associated with them. The exact behavior and conditions governing availability of these objects is beyond the scope of this specification, but their state can be manipulated by performing operations on the memory object with which they are associated. To block GL command processing until a keyed mutex is acquired, call boolean AcquireKeyedMutexWin32EXT(uint memory, uint64 key, uint timeout); where identifies which keyed mutex to acquire, is the mutex value to wait for, and is the time, in milliseconds, to wait before failing the acquire operation. FALSE is returned if the acquire operation timed out or failed. No error is generated if the operation failed because it timed out. TRUE is returned if the wait succeeded. To release a keyed mutex after all prior GL command processing has completed, call boolean ReleaseKeyedMutexWin32EXT(uint memory, uint64 key); where identifies the keyed mutex to release, and is the mutex value set by the release operation. FALSE is returned if the release operation failed. TRUE is returned if the release operation succeeded. Errors INVALID_VALUE is generated by AcquireKeyedMutexWin32EXT and ReleaseKeyedMutexWin32EXT if is not a valid memory object associated memory. INVALID_VALUE is generated by AcquireKeyedMutexWin32EXT and ReleaseKeyedMutexWin32EXT if the memory resource referred to by has no associated keyed mutex. INVALID_OPERATION is generated by AcquireKeyedMutexWin32EXT and ReleaseKeyedMutexWin32EXT if the acquire or release operation failed for operating-system-specific reasons. New State Issues None. Revision History Revision 2, 2016-06-06 (James Jones) - Added extension numbers. - Marked complete. Revision 1, 2017-03-31 (James Jones) - Initial draft.