Commit: c02ab502868b59bcde040c1ae3ab24a176a9c2df
Parent: ba51d2eaa3468f41aa24be1cb14753561bbb7673
Author: Randy Palamar
Date: Wed, 10 Jul 2024 08:56:25 -0600
send beamforming region in UBO
Diffstat:
4 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/beamformer_parameters.h b/beamformer_parameters.h
@@ -7,6 +7,8 @@ typedef struct {
u32 uforces_channels[128]; /* Channels used for virtual UFORCES elements */
uv4 rf_data_dim; /* Samples * Channels * Acquisitions; last element ignored */
uv4 output_points; /* Width * Height * Depth; last element ignored */
+ v2 output_min_xz; /* [m] Top left corner of output region */
+ v2 output_max_xz; /* [m] Bottom right corner of output region */
u32 channel_data_stride; /* Data points between channels (samples * acq + padding) */
u32 channel_offset; /* Offset into channel_mapping: 0 or 128 (rows or columns) */
f32 speed_of_sound; /* [m/s] */
diff --git a/helpers/ogl_beamformer_lib.h b/helpers/ogl_beamformer_lib.h
@@ -19,6 +19,7 @@ typedef ptrdiff_t size;
#define LIB_FN
#endif
+typedef struct { f32 x, y; } v2;
typedef struct { u32 x, y, z, w; } uv4;
#include "../beamformer_parameters.h"
diff --git a/shaders/hadamard.glsl b/shaders/hadamard.glsl
@@ -19,6 +19,8 @@ layout(std140, binding = 0) uniform parameters {
uvec4 uforces_channels[32]; /* Channels used for virtual UFORCES elements */
uvec4 rf_data_dim; /* Samples * Channels * Acquisitions; last element ignored */
uvec4 output_points; /* Width * Height * Depth; last element ignored */
+ vec2 output_min_xz; /* [m] Top left corner of output region */
+ vec2 output_max_xz; /* [m] Bottom right corner of output region */
uint channel_data_stride; /* Data points between channels (samples * acq + padding) */
uint channel_offset; /* Offset into channel_mapping: 0 or 128 (rows or columns) */
float speed_of_sound; /* [m/s] */
diff --git a/shaders/uforces.glsl b/shaders/uforces.glsl
@@ -11,6 +11,8 @@ layout(std140, binding = 0) uniform parameters {
uvec4 uforces_channels[32]; /* Channels used for virtual UFORCES elements */
uvec4 rf_data_dim; /* Samples * Channels * Acquisitions; last element ignored */
uvec4 output_points; /* Width * Height * Depth; last element ignored */
+ vec2 output_min_xz; /* [m] Top left corner of output region */
+ vec2 output_max_xz; /* [m] Bottom right corner of output region */
uint channel_data_stride; /* Data points between channels (samples * acq + padding) */
uint channel_offset; /* Offset into channel_mapping: 0 or 128 (rows or columns) */
float speed_of_sound; /* [m/s] */
@@ -63,13 +65,14 @@ void main()
vec2 xdc_upper_left = vec2(-0.0096, -0.0096);
vec2 xdc_bottom_right = vec2( 0.0096, 0.0096);
vec2 xdc_size = abs(xdc_upper_left - xdc_bottom_right);
+ vec2 output_size = abs(output_max_xz - output_min_xz);
/* TODO: image extent can be different than xdc_size */
/* TODO: for now assume y-dimension is along transducer center */
vec3 image_point = vec3(
- xdc_upper_left.x + pixel.x * xdc_size.x / out_data_dim.x,
+ output_min_xz.x + pixel.x * output_size.x / out_data_dim.x,
0,
- pixel.y * 60e-3 / out_data_dim.y + 10e-3
+ output_min_xz.y + pixel.y * output_size.y / out_data_dim.y
);
/* TODO: Send this into the GPU */
@@ -80,8 +83,9 @@ void main()
float dzsign = sign(image_point.z - focal_depth);
float sum = 0;
- /* NOTE: skip first acquisition since its garbage */
+
uint ridx = rf_data_dim.y * rf_data_dim.x;
+ /* NOTE: skip first acquisition since its garbage */
for (uint i = 1; i < rf_data_dim.z; i++) {
vec3 focal_point = vec3(sparse_elems[i - 1] * dx, 0, focal_depth);
float transmit_dist = focal_depth + dzsign * distance(image_point, focal_point);