ogl_beamforming

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

Commit: 349bb27a6c672772a1148e859299bac79f5e218c
Parent: 68d08191462ef969f191ac7f8b46ff8b78d23a2e
Author: Randy Palamar
Date:   Tue, 18 Mar 2025 17:17:00 -0600

util: add stream_reset and stream_commit helpers

Diffstat:
Mbeamformer.c | 6+++---
Mmain_linux.c | 4++--
Mmain_w32.c | 6+++---
Mos_win32.c | 4++--
Mstatic.c | 20++++++++------------
Mutil.c | 16++++++++++++++++
6 files changed, 34 insertions(+), 22 deletions(-)

diff --git a/beamformer.c b/beamformer.c @@ -158,7 +158,7 @@ alloc_shader_storage(BeamformerCtx *ctx, Arena a) stream_append_u64(&label, i); s8 rf_label = stream_to_s8(&label); LABEL_GL_OBJECT(GL_BUFFER, cs->rf_data_ssbos[i], rf_label); - label.widx = s_widx; + stream_reset(&label, s_widx); } i32 map_flags = GL_MAP_WRITE_BIT|GL_MAP_PERSISTENT_BIT|GL_MAP_UNSYNCHRONIZED_BIT; @@ -461,7 +461,7 @@ compile_shader(Platform *platform, Arena a, u32 type, s8 shader, s8 name) i32 len = 0, out_len = 0; glGetShaderiv(sid, GL_INFO_LOG_LENGTH, &len); glGetShaderInfoLog(sid, len, &out_len, (char *)(buf.data + buf.widx)); - buf.widx += out_len; + stream_commit(&buf, out_len); glDeleteShader(sid); platform->write_file(platform->error_file_handle, stream_to_s8(&buf)); @@ -484,7 +484,7 @@ link_program(Platform *platform, Arena a, u32 shader_id) Stream buf = arena_stream(&a); stream_append_s8(&buf, s8("shader link error: ")); glGetProgramInfoLog(result, buf.cap - buf.widx, &len, (c8 *)(buf.data + buf.widx)); - buf.widx = len; + stream_reset(&buf, len); stream_append_byte(&buf, '\n'); platform->write_file(platform->error_file_handle, stream_to_s8(&buf)); glDeleteProgram(result); diff --git a/main_linux.c b/main_linux.c @@ -48,10 +48,10 @@ dispatch_file_watch_events(Platform *platform, Arena arena) stream_append_byte(&path, '/'); stream_append_s8(&path, file); stream_append_byte(&path, 0); - path.widx--; + stream_commit(&path, -1); fw->callback(platform, stream_to_s8(&path), fw->user_data, arena); - path.widx = 0; + stream_reset(&path, 0); break; } } diff --git a/main_w32.c b/main_w32.c @@ -49,7 +49,7 @@ dispatch_file_watch(Platform *platform, FileWatchDirectory *fw_dir, u8 *buf, Are Stream path = {.data = arena_commit(&arena, KB(1)), .cap = KB(1)}; if (fni->action != FILE_ACTION_MODIFIED) { - path.widx = 0; + stream_reset(&path, 0); stream_append_s8(&path, s8("unknown file watch event: ")); stream_append_u64(&path, fni->action); stream_append_byte(&path, '\n'); @@ -63,7 +63,7 @@ dispatch_file_watch(Platform *platform, FileWatchDirectory *fw_dir, u8 *buf, Are .len = fni->filename_size / 2}); stream_append_s8(&path, file_name); stream_append_byte(&path, 0); - path.widx--; + stream_commit(&path, -1); u64 hash = s8_hash(file_name); for (u32 i = 0; i < fw_dir->file_watch_count; i++) { @@ -126,7 +126,7 @@ poll_pipe(Pipe *p, Stream *e) stream_append_i64(e, GetLastError()); stream_append_byte(e, '\n'); os_write_err_msg(stream_to_s8(e)); - e->widx = 0; + stream_reset(e, 0); } } } diff --git a/os_win32.c b/os_win32.c @@ -132,8 +132,8 @@ os_get_module(char *name, Stream *e) static PLATFORM_WRITE_FILE_FN(os_write_file) { - i32 wlen; - WriteFile(file, raw.data, raw.len, &wlen, 0); + i32 wlen = 0; + if (raw.len) WriteFile(file, raw.data, raw.len, &wlen, 0); return raw.len == wlen; } diff --git a/static.c b/static.c @@ -33,10 +33,9 @@ static FILE_WATCH_CALLBACK_FN(debug_reload) DEBUG_ENTRY_POINTS #undef X - if (err.widx) - os_write_err_msg(stream_to_s8(&err)); + stream_append_s8(&err, s8("Reloaded Main Executable\n")); + os_write_err_msg(stream_to_s8(&err)); - os_write_err_msg(s8("Reloaded Main Executable\n")); input->executable_reloaded = 1; return 1; @@ -63,8 +62,7 @@ debug_init(Platform *p, iptr input, Arena *arena) } } - if (err.widx) - os_write_err_msg(stream_to_s8(&err)); + os_write_err_msg(stream_to_s8(&err)); } #endif /* _DEBUG */ @@ -88,7 +86,7 @@ gl_debug_logger(u32 src, u32 type, u32 id, u32 lvl, i32 len, const char *msg, co stream_append(e, (char *)msg, len); stream_append_byte(e, '\n'); os_write_err_msg(stream_to_s8(e)); - e->widx = 0; + stream_reset(e, 0); } static void @@ -176,8 +174,7 @@ dump_gl_params(GLParams *gl, Arena a) stream_append_s8(&s, s8("\nMax Server Wait Time [ns]: ")); stream_append_i64(&s, gl->max_server_wait_time); stream_append_s8(&s, s8("\n-----------------------\n")); - if (!s.errors) - os_write_err_msg(stream_to_s8(&s)); + os_write_err_msg(stream_to_s8(&s)); #endif } @@ -231,17 +228,16 @@ static FILE_WATCH_CALLBACK_FN(load_cuda_lib) CudaLib *cl = (CudaLib *)user_data; b32 result = os_file_exists((c8 *)path.data); if (result) { - os_write_err_msg(s8("loading CUDA lib: " OS_CUDA_LIB_NAME "\n")); - Stream err = arena_stream(&tmp); + + stream_append_s8(&err, s8("loading CUDA lib: " OS_CUDA_LIB_NAME "\n")); os_unload_library(cl->lib); cl->lib = os_load_library((c8 *)path.data, OS_CUDA_LIB_TEMP_NAME, &err); #define X(name) cl->name = os_lookup_dynamic_symbol(cl->lib, #name, &err); CUDA_LIB_FNS #undef X - if (err.widx) - os_write_err_msg(stream_to_s8(&err)); + os_write_err_msg(stream_to_s8(&err)); } #define X(name) if (!cl->name) cl->name = name ## _stub; diff --git a/util.c b/util.c @@ -190,6 +190,22 @@ stream_to_s8(Stream *s) } static void +stream_reset(Stream *s, size index) +{ + s->errors = s->cap <= index; + if (!s->errors) + s->widx = index; +} + +static void +stream_commit(Stream *s, size count) +{ + s->errors |= BETWEEN(s->widx + count, 0, s->cap); + if (!s->errors) + s->widx += count; +} + +static void stream_append(Stream *s, void *data, size count) { s->errors |= (s->cap - s->widx) < count;