util_os.c (1157B)
1 /* See LICENSE for license details. */ 2 3 // NOTE(rnp): functions which require platform layer support but 4 // otherwise share implementation 5 6 function b32 7 take_lock(i32 *lock, i32 timeout_ms) 8 { 9 b32 result = 0; 10 for (;;) { 11 i32 current = 0; 12 if (atomic_cas_u32(lock, ¤t, 1)) 13 result = 1; 14 if (result || !timeout_ms || (!os_wait_on_address(lock, current, (u32)timeout_ms) && timeout_ms != -1)) 15 break; 16 } 17 return result; 18 } 19 20 function void 21 release_lock(i32 *lock) 22 { 23 assert(atomic_load_u32(lock)); 24 atomic_store_u32(lock, 0); 25 os_wake_all_waiters(lock); 26 } 27 28 #if BEAMFORMER_RENDERDOC_HOOKS 29 function void 30 load_renderdoc_functions(BeamformerInput *input, OSLibrary rdoc) 31 { 32 if ValidHandle(rdoc) { 33 renderdoc_get_api_fn *get_api = os_lookup_symbol(rdoc, "RENDERDOC_GetAPI"); 34 if (get_api) { 35 RenderDocAPI *api = 0; 36 if (get_api(10600, (void **)&api)) { 37 input->renderdoc_start_frame_capture = RENDERDOC_START_FRAME_CAPTURE(api); 38 input->renderdoc_end_frame_capture = RENDERDOC_END_FRAME_CAPTURE(api); 39 input->renderdoc_set_capture_file_path_template = RENDERDOC_SET_CAPTURE_PATH_TEMPLATE(api); 40 } 41 } 42 } 43 } 44 #endif