beamformer.meta (10908B)
1 @Enumeration(DecodeMode [None Hadamard]) 2 @Enumeration(RCAOrientation [None Rows Columns]) 3 @Enumeration(SamplingMode [2X 4X]) 4 5 @Table([name size elements]) DataKind 6 { 7 [Int16 2 1] 8 [Int16Complex 2 2] 9 [Float32 4 1] 10 [Float32Complex 4 2] 11 } 12 13 @Enumeration(EmissionKind [Sine SineAM Chirp]) 14 15 @Table([type name]) SineParameters 16 { 17 [F32 cycles ] 18 [F32 frequency] 19 } 20 21 @Table([type name]) SineAMParameters 22 { 23 [F32 cycles ] 24 [F32 frequency] 25 [U32 emissions] 26 } 27 28 @Table([type name]) ChirpParameters 29 { 30 [F32 duration ] 31 [F32 min_frequency] 32 [F32 max_frequency] 33 } 34 35 @MUnion(EmissionKind [ 36 SineParameters 37 SineAMParameters 38 ChirpParameters 39 ]) Emission 40 41 @Table([name name_lower]) FilterKind 42 { 43 [Kaiser kaiser] 44 [MatchedChirp matched_chirp] 45 } 46 47 @Table([type name]) KaiserFilterParameters 48 { 49 [F32 cutoff_frequency] 50 [F32 beta] 51 [U32 length] 52 } 53 54 @Table([type name]) ChirpFilterParameters 55 { 56 [F32 duration] 57 [F32 min_frequency] 58 [F32 max_frequency] 59 } 60 61 @MUnion(FilterKind [ 62 KaiserFilterParameters 63 ChirpFilterParameters 64 ]) Filter 65 66 @Table([name pretty_name fixed_transmits]) AcquisitionKind 67 { 68 [FORCES FORCES 1] 69 [UFORCES UFORCES 0] 70 [HERCULES HERCULES 1] 71 [RCA_VLS VLS 0] 72 [RCA_TPW TPW 0] 73 [UHERCULES UHERCULES 0] 74 [RACES RACES 1] 75 [EPIC_FORCES EPIC-FORCES 1] 76 [EPIC_UFORCES EPIC-UFORCES 0] 77 [EPIC_UHERCULES EPIC-UHERCULES 0] 78 [Flash Flash 0] 79 [HERO_PA HERO-PA 0] 80 } 81 82 @Table([name]) InterpolationMode 83 { 84 [Nearest] 85 [Linear] 86 [Cubic] 87 } 88 89 @Table([name type]) ParametersHead 90 { 91 [das_voxel_transform M4] 92 [xdc_transform M4] 93 [xdc_element_pitch V2] 94 [raw_data_dimensions UV2] 95 [focal_vector V2] 96 [transmit_receive_orientation U32] 97 [sample_count U32] 98 [channel_count U32] 99 [acquisition_count U32] 100 [acquisition_kind U32] 101 [time_offset F32] 102 [single_focus U8] 103 [single_orientation U8] 104 [decode_mode U8] 105 [sampling_mode U8] 106 } 107 108 @Table([name type]) ParametersUI 109 { 110 [output_points SV4] 111 [sampling_frequency F32] 112 [demodulation_frequency F32] 113 [speed_of_sound F32] 114 [f_number F32] 115 [interpolation_mode U32] 116 [coherency_weighting U32] 117 [decimation_rate U32] 118 } 119 120 @Table([name c_type m_type m_size]) ParametersExtra 121 { 122 [emission_kind BeamformerEmissionKind uint32 1] 123 [emission_parameters BeamformerEmissionParameters uint8 12] 124 } 125 126 // TODO(rnp): definable constants in meta code (or at least references to enum values) 127 @Table([name type elements]) ParametersSimple 128 { 129 [channel_mapping S16 256] 130 [sparse_elements S16 256] 131 [transmit_receive_orientations U8 256] 132 [steering_angles F32 256] 133 [focal_depths F32 256] 134 [compute_stages S32 16] 135 [compute_stage_parameters S32 16] 136 [compute_stages_count U32 1] 137 [data_kind S32 1] 138 } 139 140 @Expand(AcquisitionKind) @Enumeration(AcquisitionKind `$(name)`) 141 @Expand(DataKind) @Enumeration(DataKind `$(name)`) 142 @Expand(FilterKind) @Enumeration(FilterKind `$(name)`) 143 @Expand(InterpolationMode) @Enumeration(InterpolationMode `$(name)`) 144 145 @Emit 146 { 147 `typedef union {` 148 ` struct {` 149 @Expand(SineParameters) ` $(%type)$(|)$(name);` 150 ` } sine;` 151 ` struct {` 152 @Expand(SineAMParameters) ` $(%type)$(|)$(name);` 153 ` } sine_am;` 154 ` struct {` 155 @Expand(ChirpParameters) ` $(%type)$(|)$(name);` 156 ` } chirp;` 157 `} BeamformerEmissionParameters;` 158 `` 159 `typedef struct {` 160 @Expand(ParametersHead) ` $(%type)$(|)$(name);` 161 @Expand(ParametersUI) ` $(%type)$(|)$(name);` 162 @Expand(ParametersExtra) ` $(c_type)$(|)$(name);` 163 `} BeamformerParameters;` 164 `` 165 `typedef struct {` 166 @Expand(ParametersHead) ` $(%type)$(|)$(name);` 167 `} BeamformerParametersHead;` 168 `` 169 `typedef struct {` 170 @Expand(ParametersUI) ` $(%type)$(|)$(name);` 171 `} BeamformerUIParameters;` 172 `` 173 `typedef struct {` 174 @Expand(ParametersHead) ` $(%type)$(|)$(name);` 175 @Expand(ParametersUI) ` $(%type)$(|)$(name);` 176 @Expand(ParametersExtra) ` $(c_type)$(|)$(name);` 177 @Expand(ParametersSimple) ` $(%type)$(|)$(name)$(elements > 1 -> "[" elements "]");` 178 `} BeamformerSimpleParameters;` 179 `` 180 `typedef struct {` 181 ` BeamformerFilterKind kind;` 182 ` union {` 183 ` struct {` 184 @Expand(KaiserFilterParameters) ` $(%type)$(|)$(name);` 185 ` } kaiser;` 186 ` struct {` 187 @Expand(ChirpFilterParameters) ` $(%type)$(|)$(name);` 188 ` } matched_chirp;` 189 ` };` 190 ` f32 sampling_frequency;` 191 ` b16 complex;` 192 `} BeamformerFilterParameters;` 193 `` 194 `read_only global u8 beamformer_data_kind_element_size[] = {` 195 @Expand(DataKind) ` $(size),` 196 `};` 197 `` 198 `read_only global u8 beamformer_data_kind_element_count[] = {` 199 @Expand(DataKind) ` $(elements),` 200 `};` 201 `` 202 `read_only global u8 beamformer_data_kind_byte_size[] = {` 203 @Expand(DataKind) ` $(size) * $(elements),` 204 `};` 205 `` 206 `read_only global u8 beamformer_acquisition_kind_has_fixed_transmits[] = {` 207 @Expand(AcquisitionKind) ` $(fixed_transmits),` 208 `};` 209 `` 210 `read_only global s8 beamformer_acquisition_kind_strings[] = {` 211 @Expand(AcquisitionKind) ` s8_comp("$(pretty_name)"),` 212 `};` 213 `` 214 `read_only global s8 beamformer_filter_kind_strings[] = {` 215 @Expand(FilterKind) ` s8_comp("$(name)"),` 216 `};` 217 `` 218 `read_only global s8 beamformer_interpolation_mode_strings[] = {` 219 @Expand(InterpolationMode) ` s8_comp("$(name)"),` 220 `};` 221 } 222 223 @ShaderGroup Compute 224 { 225 @Shader CudaDecode 226 @Shader CudaHilbert 227 228 @Shader(decode.glsl) Decode 229 { 230 @Enumeration(DataKind) 231 @Enumeration(DecodeMode) 232 @Flags([DilateOutput UseSharedMemory]) 233 234 @Bake 235 { 236 @BakeInt(DecodeMode decode_mode ) 237 @BakeInt(InputChannelStride input_channel_stride ) 238 @BakeInt(InputSampleStride input_sample_stride ) 239 @BakeInt(InputTransmitStride input_transmit_stride ) 240 @BakeInt(OutputChannelStride output_channel_stride ) 241 @BakeInt(OutputSampleStride output_sample_stride ) 242 @BakeInt(OutputTransmitStride output_transmit_stride) 243 @BakeInt(ToProcess to_process ) 244 @BakeInt(TransmitCount transmit_count ) 245 } 246 } 247 248 @Shader(filter.glsl) Filter 249 { 250 @Enumeration(DataKind) 251 @Flags([ComplexFilter OutputFloats]) 252 253 @Bake 254 { 255 @BakeInt(DecimationRate decimation_rate ) 256 @BakeInt(FilterLength filter_length ) 257 @BakeInt(InputChannelStride input_channel_stride ) 258 @BakeInt(InputSampleStride input_sample_stride ) 259 @BakeInt(InputTransmitStride input_transmit_stride ) 260 @BakeInt(OutputChannelStride output_channel_stride ) 261 @BakeInt(OutputSampleStride output_sample_stride ) 262 @BakeInt(OutputTransmitStride output_transmit_stride) 263 @BakeInt(SampleCount sample_count ) 264 @BakeFloat(DemodulationFrequency demodulation_frequency) 265 @BakeFloat(SamplingFrequency sampling_frequency ) 266 } 267 268 @SubShader Demodulate 269 } 270 271 @Shader(das.glsl) DAS 272 { 273 @Enumeration(AcquisitionKind) 274 @Enumeration(DataKind) 275 @Enumeration(InterpolationMode) 276 @Enumeration(RCAOrientation) 277 @Flags([Fast Sparse CoherencyWeighting SingleFocus SingleOrientation]) 278 279 @Bake 280 { 281 @BakeInt(AcquisitionCount acquisition_count ) 282 @BakeInt(AcquisitionKind acquisition_kind ) 283 @BakeInt(ChannelCount channel_count ) 284 @BakeInt(InterpolationMode interpolation_mode ) 285 @BakeInt(SampleCount sample_count ) 286 @BakeInt(TransmitReceiveOrientation transmit_receive_orientation) 287 288 @BakeFloat(DemodulationFrequency demodulation_frequency) 289 @BakeFloat(FNumber f_number ) 290 @BakeFloat(FocusDepth focus_depth ) 291 @BakeFloat(SamplingFrequency sampling_frequency ) 292 @BakeFloat(SpeedOfSound speed_of_sound ) 293 @BakeFloat(TimeOffset time_offset ) 294 @BakeFloat(TransmitAngle transmit_angle ) 295 } 296 } 297 298 @Shader(min_max.glsl) MinMax 299 @Shader(sum.glsl) Sum 300 } 301 302 @ShaderGroup Render 303 { 304 @Shader(render_3d.frag.glsl) Render3D 305 } 306 307 ///////////////// 308 // NOTE: Library 309 310 @Emit(CLibrary) 311 { 312 `typedef union {` 313 ` struct {` 314 @Expand(SineParameters) ` $(%type)$(|)$(name);` 315 ` } sine;` 316 ` struct {` 317 @Expand(SineAMParameters) ` $(%type)$(|)$(name);` 318 ` } sine_am;` 319 ` struct {` 320 @Expand(ChirpParameters) ` $(%type)$(|)$(name);` 321 ` } chirp;` 322 `} BeamformerEmissionParameters;` 323 `` 324 `typedef struct {` 325 ` BeamformerFilterKind kind;` 326 ` union {` 327 ` struct {` 328 @Expand(KaiserFilterParameters) ` $(%type)$(|)$(name);` 329 ` } kaiser;` 330 ` struct {` 331 @Expand(ChirpFilterParameters) ` $(%type)$(|)$(name);` 332 ` } matched_chirp;` 333 ` };` 334 ` float sampling_frequency;` 335 ` uint16_t complex;` 336 `} BeamformerFilterParameters;` 337 `` 338 `typedef struct {` 339 @Expand(ParametersHead) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 340 @Expand(ParametersUI) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 341 @Expand(ParametersExtra) ` $(c_type)$(|)$(name);` 342 @Expand(ParametersSimple) ` $(%type)$(|)$(name)$(elements > 1 -> "[" elements "]");` 343 `} BeamformerSimpleParameters;` 344 `` 345 `typedef struct {` 346 @Expand(ParametersUI) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 347 `} BeamformerUIParameters;` 348 `` 349 `typedef struct {` 350 @Expand(ParametersHead) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 351 `} BeamformerParametersHead;` 352 `` 353 `typedef struct {` 354 @Expand(ParametersHead) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 355 @Expand(ParametersUI) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 356 @Expand(ParametersExtra) ` $(c_type)$(|)$(name);` 357 `} BeamformerParameters;` 358 `` 359 } 360 361 //////////////// 362 // NOTE: MATLAB 363 364 @Emit(MATLAB) Parameters 365 { 366 `classdef OGLBeamformerParameters` 367 ` properties` 368 @Expand(ParametersHead) ` $(name)(1,$(#type))$(|)$(%type)` 369 ` % UI Parameters` 370 @Expand(ParametersUI) ` $(name)(1,$(#type))$(|)$(%type)` 371 @Expand(ParametersExtra) ` $(name)(1,$(m_size))$(|)$(m_type)` 372 ` end` 373 `end` 374 } 375 376 @Emit(MATLAB) ParametersHead 377 { 378 `classdef OGLBeamformerParametersHead` 379 ` properties` 380 @Expand(ParametersHead) ` $(name)(1,$(#type))$(|)$(%type)` 381 ` end` 382 `end` 383 } 384 385 @Emit(MATLAB) ParametersUI 386 { 387 `classdef OGLBeamformerParametersUI` 388 ` properties` 389 @Expand(ParametersUI) ` $(name)(1,$(#type))$(|)$(%type)` 390 ` end` 391 `end` 392 } 393 394 @Emit(MATLAB) SimpleParameters 395 { 396 `classdef OGLBeamformerSimpleParameters` 397 ` properties` 398 @Expand(ParametersHead) ` $(name)(1,$(#type)) $(%type)` 399 @Expand(ParametersUI) ` $(name)(1,$(#type)) $(%type)` 400 @Expand(ParametersExtra) ` $(name)(1,$(m_size))$(|)$(m_type)` 401 @Expand(ParametersSimple) ` $(name)(1,$(elements)) $(%type)` 402 ` end` 403 `end` 404 }