Skip to content

Commit ccb3e00

Browse files
committed
WIP: Add the VK_EXT_external_semaphore_drm_syncobj extension
This extension enables interop between timeline semaphores and Linux DRM synchronization objects (syncobj).
1 parent 6aefabc commit ccb3e00

4 files changed

Lines changed: 57 additions & 0 deletions

File tree

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright 2026 The Khronos Group Inc.
2+
//
3+
// SPDX-License-Identifier: CC-BY-4.0
4+
5+
include::{generated}/meta/{refprefix}VK_EXT_external_semaphore_drm_syncobj.adoc[]
6+
7+
=== Other Extension Metadata
8+
9+
*Last Modified Date*::
10+
2026-03-02
11+
*IP Status*::
12+
No known IP claims.
13+
*Contributors*::
14+
- Julian Orth
15+
16+
=== Description
17+
18+
This extension adds the ability to import and export timeline semaphores as DRM
19+
synchronization objects (syncobj).
20+
21+
include::{generated}/interfaces/VK_EXT_external_semaphore_drm_syncobj.adoc[]
22+
23+
=== Version History
24+
25+
* Revision 1, 2026-03-02 (Julian Orth)
26+
** Initial revision

chapters/capabilities.adoc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,6 +1618,12 @@ ifdef::VK_NV_external_sci_sync[]
16181618
hardware engines including the CPU and software (intra-process and
16191619
inter-process) operating domains and perform signal and wait operations.
16201620
endif::VK_NV_external_sci_sync[]
1621+
ifdef::VK_EXT_external_semaphore_drm_syncobj[]
1622+
* ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT specifies a
1623+
file descriptor handle to a Linux DRM synchronization object (syncobj).
1624+
This type can only be used with timeline semaphores and Vulkan timeline
1625+
semaphore values correspond to syncobj points.
1626+
endif::VK_EXT_external_semaphore_drm_syncobj[]
16211627

16221628
[NOTE]
16231629
====
@@ -1651,6 +1657,9 @@ endif::VK_FUCHSIA_external_semaphore[]
16511657
ifdef::VK_NV_external_sci_sync[]
16521658
| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV | No restriction | No restriction
16531659
endif::VK_NV_external_sci_sync[]
1660+
ifdef::VK_EXT_external_semaphore_drm_syncobj[]
1661+
| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT | No restriction | No restriction
1662+
endif::VK_EXT_external_semaphore_drm_syncobj[]
16541663
|====
16551664
--
16561665

chapters/synchronization.adoc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3740,6 +3740,12 @@ ifdef::VK_NV_external_sci_sync[]
37403740
slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncExport>>
37413741
features must: be enabled
37423742
endif::VK_NV_external_sci_sync[]
3743+
ifdef::VK_EXT_external_semaphore_drm_syncobj[]
3744+
* If pname:handleTypes includes
3745+
ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT, the
3746+
slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field must: be
3747+
ename:VK_SEMAPHORE_TYPE_TIMELINE
3748+
endif::VK_EXT_external_semaphore_drm_syncobj[]
37433749
****
37443750

37453751
include::{generated}/validity/structs/VkExportSemaphoreCreateInfo.adoc[]
@@ -5176,6 +5182,9 @@ The handle types supported by pname:handleType are:
51765182
| Handle Type | Transference | Permanence Supported
51775183
| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT | Reference | Temporary,Permanent
51785184
| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT | Copy | Temporary
5185+
ifdef::VK_EXT_external_semaphore_drm_syncobj[]
5186+
| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT | Reference | Permanent
5187+
endif::VK_EXT_external_semaphore_drm_syncobj[]
51795188
|====
51805189

51815190
.Valid Usage
@@ -5209,6 +5218,12 @@ ifdef::VK_BASE_VERSION_1_2,VK_KHR_timeline_semaphore[]
52095218
semaphore from which pname:fd was exported must: not be
52105219
ename:VK_SEMAPHORE_TYPE_TIMELINE
52115220
endif::VK_BASE_VERSION_1_2,VK_KHR_timeline_semaphore[]
5221+
ifdef::VK_EXT_external_semaphore_drm_syncobj[]
5222+
* If pname:handleType is
5223+
ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT, the
5224+
slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field must: be
5225+
ename:VK_SEMAPHORE_TYPE_TIMELINE
5226+
endif::VK_EXT_external_semaphore_drm_syncobj[]
52125227
****
52135228

52145229
If pname:handleType is ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,

xml/vk.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30347,6 +30347,13 @@ endif::VK_KHR_internally_synchronized_queues[]
3034730347
<enum value="&quot;VK_SEC_extension_675&quot;" name="VK_SEC_EXTENSION_675_EXTENSION_NAME"/>
3034830348
</require>
3034930349
</extension>
30350+
<extension name="VK_EXT_external_semaphore_drm_syncobj" number="100000" type="device" depends="VK_VERSION_1_2" author="EXT" contact="Julian Orth @mahkoh" supported="vulkan" nofeatures="true">
30351+
<require>
30352+
<enum value="1" name="VK_EXT_EXTERNAL_SEMAPHORE_DRM_SYNCOBJ_SPEC_VERSION"/>
30353+
<enum value="&quot;VK_EXT_external_semaphore_drm_syncobj&quot;" name="VK_EXT_EXTERNAL_SEMAPHORE_DRM_SYNCOBJ_EXTENSION_NAME"/>
30354+
<enum bitpos="8" extends="VkExternalSemaphoreHandleTypeFlagBits" name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT"/>
30355+
</require>
30356+
</extension>
3035030357
</extensions>
3035130358
<formats>
3035230359
<format name="VK_FORMAT_R4G4_UNORM_PACK8" class="8-bit" blockSize="1" texelsPerBlock="1" packed="8">

0 commit comments

Comments
 (0)