ogl_beamforming

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

Commit: e0bd75572cdba7626c8dcf6d2fb87f8aa77660f7
Parent: ad11111303575137d78ca4118bb1601bcc11b69d
Author: Randy Palamar
Date:   Tue,  3 Mar 2026 10:13:45 -0700

decode/filter: use f16 as intermediate exchange type

This gives ~20% speed up for the decoding.

Diffstat:
Mbeamformer_core.c | 2+-
Mshaders/decode.glsl | 6++++++
Mshaders/filter.glsl | 13+++++++------
3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/beamformer_core.c b/beamformer_core.c @@ -365,7 +365,7 @@ plan_compute_pipeline(BeamformerComputePlan *cp, BeamformerParameterBlock *pb) db->data_kind = data_kind; if (!first) { if (data_kind == BeamformerDataKind_Int16) { - db->data_kind = BeamformerDataKind_Int16Complex; + db->data_kind = BeamformerDataKind_Float16Complex; } else { db->data_kind = BeamformerDataKind_Float32Complex; } diff --git a/shaders/decode.glsl b/shaders/decode.glsl @@ -14,6 +14,12 @@ #elif DataKind == DataKind_Float32Complex #define INPUT_DATA_TYPE vec2 #define SAMPLE_DATA_TYPE vec2 +#elif DataKind == DataKind_Float16Complex + #define INPUT_DATA_TYPE f16vec2 + #define SAMPLE_DATA_TYPE vec2 +#elif DataKind == DataKind_Float16 + #define INPUT_DATA_TYPE float16_t + #define SAMPLE_DATA_TYPE float #elif DataKind == DataKind_Int16Complex #define INPUT_DATA_TYPE i16vec2 #define SAMPLE_DATA_TYPE vec2 diff --git a/shaders/filter.glsl b/shaders/filter.glsl @@ -1,18 +1,19 @@ /* See LICENSE for license details. */ /* TODO(rnp): bug: this won't filter RF data correctly */ -#define SAMPLE_TYPE vec2 +#define SAMPLE_TYPE f32vec2 #if DataKind == DataKind_Float32 - #define DATA_TYPE vec2 + #define DATA_TYPE f32vec2 #define RESULT_TYPE_CAST(v) (v) #define SAMPLE_TYPE_CAST(v) (v) #else - #define DATA_TYPE uint - #define SAMPLE_TYPE_CAST(v) unpackSnorm2x16(v) + #define DATA_TYPE i16vec2 + #define SAMPLE_TYPE_CAST(v) (v) #if OutputFloats - #define OUT_DATA_TYPE vec2 + #define OUT_DATA_TYPE f32vec2 #define RESULT_TYPE_CAST(v) (clamp((v), -1.0, 1.0) * 32767.0f) #else - #define RESULT_TYPE_CAST(v) packSnorm2x16(v) + #define OUT_DATA_TYPE f16vec2 + #define RESULT_TYPE_CAST(v) f16vec2(v) #endif #endif