ogl_beamforming

Ultrasound Beamforming Implemented with OpenGL
git clone anongit@rnpnr.xyz:ogl_beamforming.git
Log | Files | Refs | Feed | Submodules | README | LICENSE

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, &current, 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