ogl_beamforming

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

Commit: e73757c36e0d0c8fb3acf3b25be1879c4d6a3260
Parent: c351e5c5591138ae76618a3b00a3286838918fa5
Author: Randy Palamar
Date:   Sun,  7 Sep 2025 20:49:19 -0600

meta/core: combine Transmit/RecieveMode and move into meta code

Diffstat:
Mbeamformer.c | 4++--
Mbeamformer.meta | 3+++
Mbeamformer_parameters.h | 16----------------
Mbuild.c | 14--------------
Mgenerated/beamformer.meta.c | 21++++++++++++++++-----
5 files changed, 21 insertions(+), 37 deletions(-)

diff --git a/beamformer.c b/beamformer.c @@ -431,9 +431,9 @@ das_ubo_from_beamformer_parameters(BeamformerDASUBO *du, BeamformerParameters *b du->shader_flags = 0; if (bp->interpolate) du->shader_flags |= BeamformerShaderDASFlags_Interpolate; if (bp->coherency_weighting) du->shader_flags |= BeamformerShaderDASFlags_CoherencyWeighting; - if (bp->transmit_mode == BeamformerTransmitMode_Columns) + if (bp->transmit_mode == BeamformerRCAOrientation_Columns) du->shader_flags |= BeamformerShaderDASFlags_TxColumns; - if (bp->receive_mode == BeamformerReceiveMode_Columns) + if (bp->receive_mode == BeamformerRCAOrientation_Columns) du->shader_flags |= BeamformerShaderDASFlags_RxColumns; } diff --git a/beamformer.meta b/beamformer.meta @@ -1,4 +1,5 @@ @Enumeration(DecodeMode [None Hadamard]) +@Enumeration(RCAOrientation [Rows Columns]) @ShaderGroup Compute { @@ -37,6 +38,8 @@ @PermuteFlags([Fast Sparse]) } + @Enumeration(RCAOrientation) + @Flags([Interpolate CoherencyWeighting RxColumns TxColumns]) } diff --git a/beamformer_parameters.h b/beamformer_parameters.h @@ -17,22 +17,6 @@ typedef struct { float rf_time_deltas[32]; } BeamformerComputeStatsTable; -#define TRANSMIT_MODES_LIST \ - X(Rows) \ - X(Columns) - -#define RECEIVE_MODES_LIST \ - X(Rows) \ - X(Columns) - -#define X(k, ...) BeamformerTransmitMode_## k, -typedef enum {TRANSMIT_MODES_LIST} BeamformerTransmitModes; -#undef X - -#define X(k, ...) BeamformerReceiveMode_## k, -typedef enum {RECEIVE_MODES_LIST} BeamformerReceiveModes; -#undef X - /* TODO(rnp): this is an absolute abuse of the preprocessor, but now is * not a good time to write a full metaprogram */ #define BEAMFORMER_FILTER_KIND_LIST(type, _) \ diff --git a/build.c b/build.c @@ -2194,20 +2194,6 @@ metagen_emit_matlab_code(MetaContext *ctx, Arena arena) result &= meta_end_and_write_matlab(m, OUTPUT("matlab/OGLBeamformerFilterKind.m")); #undef X - #define X(kind, ...) meta_push_matlab_enum_with_value(m, s8(#kind), BeamformerTransmitMode_## kind); - meta_begin_matlab_class(m, "OGLBeamformerTransmitModes", "int32"); - meta_begin_scope(m, s8("enumeration")); - TRANSMIT_MODES_LIST - result &= meta_end_and_write_matlab(m, OUTPUT("matlab/OGLBeamformerTransmitModes.m")); - #undef X - - #define X(kind, ...) meta_push_matlab_enum_with_value(m, s8(#kind), BeamformerReceiveMode_## kind); - meta_begin_matlab_class(m, "OGLBeamformerReceiveModes", "int32"); - meta_begin_scope(m, s8("enumeration")); - RECEIVE_MODES_LIST - result &= meta_end_and_write_matlab(m, OUTPUT("matlab/OGLBeamformerReceiveModes.m")); - #undef X - os_make_directory(OUTPUT("matlab/+OGLBeamformerFilter")); #define X(kind, ...) {OUTPUT("matlab/+OGLBeamformerFilter/" #kind ".m"), s8_comp(#kind), s8_comp(#__VA_ARGS__)}, read_only local_persist struct {char *out; s8 class, args;} filter_table[] = { diff --git a/generated/beamformer.meta.c b/generated/beamformer.meta.c @@ -9,6 +9,12 @@ typedef enum { } BeamformerDecodeMode; typedef enum { + BeamformerRCAOrientation_Rows = 0, + BeamformerRCAOrientation_Columns = 1, + BeamformerRCAOrientation_Count, +} BeamformerRCAOrientation; + +typedef enum { BeamformerDataKind_Int16 = 0, BeamformerDataKind_Int16Complex = 1, BeamformerDataKind_Float32 = 2, @@ -143,7 +149,7 @@ read_only global BeamformerShaderDescriptor beamformer_shader_descriptors[] = { {2, 6, 1, 2, 0}, {6, 18, 1, 1, 1}, {18, 42, 2, 2, 1}, - {42, 50, 1, 1, 1}, + {42, 50, 1, 2, 1}, {50, 51, 0, 0, 0}, {51, 52, 0, 0, 0}, {52, 53, 0, 0, 0}, @@ -197,6 +203,10 @@ read_only global s8 beamformer_shader_global_header_strings[] = { "#define DecodeMode_Hadamard 1\n" "\n"), s8_comp("" + "#define RCAOrientation_Rows 0\n" + "#define RCAOrientation_Columns 1\n" + "\n"), + s8_comp("" "#define DataKind_Int16 0\n" "#define DataKind_Int16Complex 1\n" "#define DataKind_Float32 2\n" @@ -230,6 +240,7 @@ read_only global s8 beamformer_shader_local_header_strings[] = { read_only global s8 beamformer_shader_descriptor_header_strings[] = { s8_comp("DecodeMode"), + s8_comp("RCAOrientation"), s8_comp("DataKind"), s8_comp("SamplingMode"), }; @@ -237,10 +248,10 @@ read_only global s8 beamformer_shader_descriptor_header_strings[] = { read_only global i32 *beamformer_shader_header_vectors[] = { 0, 0, - (i32 []){1, 0}, - (i32 []){1}, - (i32 []){1, 2}, - (i32 []){1}, + (i32 []){2, 0}, + (i32 []){2}, + (i32 []){2, 3}, + (i32 []){2, 1}, 0, 0, 0,