@@ -2529,12 +2529,9 @@ impl crate::Device for super::Device {
25292529 self . counters . fences . add ( 1 ) ;
25302530
25312531 Ok ( if self . shared . private_caps . timeline_semaphores {
2532- let mut sem_type_info =
2533- vk:: SemaphoreTypeCreateInfo :: default ( ) . semaphore_type ( vk:: SemaphoreType :: TIMELINE ) ;
2534- let vk_info = vk:: SemaphoreCreateInfo :: default ( ) . push_next ( & mut sem_type_info) ;
2535- let raw = unsafe { self . shared . raw . create_semaphore ( & vk_info, None ) }
2536- . map_err ( super :: map_host_device_oom_err) ?;
2537-
2532+ let raw = self
2533+ . shared
2534+ . new_timeline_semaphore ( 0 , "wgpu-hal device fence" ) ?;
25382535 super :: Fence :: TimelineSemaphore ( raw)
25392536 } else {
25402537 super :: Fence :: FencePool ( RwLock :: new ( super :: FencePool {
@@ -3042,6 +3039,22 @@ impl super::DeviceShared {
30423039 }
30433040 }
30443041
3042+ /// Creates a timeline semaphore with the given initial value.
3043+ pub ( super ) fn new_timeline_semaphore (
3044+ & self ,
3045+ initial_value : u64 ,
3046+ name : & str ,
3047+ ) -> Result < vk:: Semaphore , crate :: DeviceError > {
3048+ let mut type_info = vk:: SemaphoreTypeCreateInfo :: default ( )
3049+ . semaphore_type ( vk:: SemaphoreType :: TIMELINE )
3050+ . initial_value ( initial_value) ;
3051+ let info = vk:: SemaphoreCreateInfo :: default ( ) . push_next ( & mut type_info) ;
3052+ let semaphore = unsafe { self . raw . create_semaphore ( & info, None ) }
3053+ . map_err ( super :: map_host_device_oom_err) ?;
3054+ unsafe { self . set_object_name ( semaphore, name) } ;
3055+ Ok ( semaphore)
3056+ }
3057+
30453058 pub ( super ) fn wait_for_fence (
30463059 & self ,
30473060 fence : & super :: Fence ,
0 commit comments