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