beamformer.meta (10643B)
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 [xdc_transform M4] 92 [xdc_element_pitch V2] 93 [raw_data_dimensions UV2] 94 [focal_vector V2] 95 [transmit_receive_orientation U32] 96 [sample_count U32] 97 [channel_count U32] 98 [acquisition_count U32] 99 [das_shader_id U32] 100 [time_offset F32] 101 [single_focus U8] 102 [single_orientation U8] 103 [decode_mode U8] 104 [sampling_mode U8] 105 } 106 107 @Table([name type]) ParametersUI 108 { 109 [output_min_coordinate V3] 110 [output_max_coordinate V3] 111 [output_points SV4] 112 [sampling_frequency F32] 113 [demodulation_frequency F32] 114 [speed_of_sound F32] 115 [f_number F32] 116 [off_axis_pos F32] 117 [interpolation_mode U32] 118 [coherency_weighting U32] 119 [beamform_plane U32] 120 [decimation_rate U32] 121 } 122 123 @Table([name c_type m_type m_size]) ParametersExtra 124 { 125 [emission_kind BeamformerEmissionKind uint32 1] 126 [emission_parameters BeamformerEmissionParameters uint8 12] 127 } 128 129 // TODO(rnp): definable constants in meta code (or at least references to enum values) 130 @Table([name type elements]) ParametersSimple 131 { 132 [channel_mapping S16 256] 133 [sparse_elements S16 256] 134 [transmit_receive_orientations U8 256] 135 [steering_angles F32 256] 136 [focal_depths F32 256] 137 [compute_stages S32 16] 138 [compute_stage_parameters S32 16] 139 [compute_stages_count U32 1] 140 [data_kind S32 1] 141 } 142 143 @Expand(AcquisitionKind) @Enumeration(AcquisitionKind `$(name)`) 144 @Expand(DataKind) @Enumeration(DataKind `$(name)`) 145 @Expand(FilterKind) @Enumeration(FilterKind `$(name)`) 146 @Expand(InterpolationMode) @Enumeration(InterpolationMode `$(name)`) 147 148 @Emit 149 { 150 `typedef union {` 151 ` struct {` 152 @Expand(SineParameters) ` $(%type)$(|)$(name);` 153 ` } sine;` 154 ` struct {` 155 @Expand(SineAMParameters) ` $(%type)$(|)$(name);` 156 ` } sine_am;` 157 ` struct {` 158 @Expand(ChirpParameters) ` $(%type)$(|)$(name);` 159 ` } chirp;` 160 `} BeamformerEmissionParameters;` 161 `` 162 `typedef struct {` 163 @Expand(ParametersHead) ` $(%type)$(|)$(name);` 164 @Expand(ParametersUI) ` $(%type)$(|)$(name);` 165 @Expand(ParametersExtra) ` $(c_type)$(|)$(name);` 166 `} BeamformerParameters;` 167 `` 168 `typedef struct {` 169 @Expand(ParametersHead) ` $(%type)$(|)$(name);` 170 `} BeamformerParametersHead;` 171 `` 172 `typedef struct {` 173 @Expand(ParametersUI) ` $(%type)$(|)$(name);` 174 `} BeamformerUIParameters;` 175 `` 176 `typedef struct {` 177 @Expand(ParametersHead) ` $(%type)$(|)$(name);` 178 @Expand(ParametersUI) ` $(%type)$(|)$(name);` 179 @Expand(ParametersExtra) ` $(c_type)$(|)$(name);` 180 @Expand(ParametersSimple) ` $(%type)$(|)$(name)$(elements > 1 -> "[" elements "]");` 181 `} BeamformerSimpleParameters;` 182 `` 183 `typedef struct {` 184 ` BeamformerFilterKind kind;` 185 ` union {` 186 ` struct {` 187 @Expand(KaiserFilterParameters) ` $(%type)$(|)$(name);` 188 ` } kaiser;` 189 ` struct {` 190 @Expand(ChirpFilterParameters) ` $(%type)$(|)$(name);` 191 ` } matched_chirp;` 192 ` };` 193 ` f32 sampling_frequency;` 194 ` b16 complex;` 195 `} BeamformerFilterParameters;` 196 `` 197 `read_only global u8 beamformer_data_kind_element_size[] = {` 198 @Expand(DataKind) ` $(size),` 199 `};` 200 `` 201 `read_only global u8 beamformer_data_kind_element_count[] = {` 202 @Expand(DataKind) ` $(elements),` 203 `};` 204 `` 205 `read_only global u8 beamformer_data_kind_byte_size[] = {` 206 @Expand(DataKind) ` $(size) * $(elements),` 207 `};` 208 `` 209 `read_only global u8 beamformer_acquisition_kind_has_fixed_transmits[] = {` 210 @Expand(AcquisitionKind) ` $(fixed_transmits),` 211 `};` 212 `` 213 `read_only global s8 beamformer_acquisition_kind_strings[] = {` 214 @Expand(AcquisitionKind) ` s8_comp("$(pretty_name)"),` 215 `};` 216 `` 217 `read_only global s8 beamformer_filter_kind_strings[] = {` 218 @Expand(FilterKind) ` s8_comp("$(name)"),` 219 `};` 220 `` 221 `read_only global s8 beamformer_interpolation_mode_strings[] = {` 222 @Expand(InterpolationMode) ` s8_comp("$(name)"),` 223 `};` 224 } 225 226 @ShaderGroup Compute 227 { 228 @Shader CudaDecode 229 @Shader CudaHilbert 230 231 @Shader(decode.glsl) Decode 232 { 233 @Enumeration(DataKind) 234 @Enumeration(DecodeMode) 235 @Flags([DilateOutput UseSharedMemory]) 236 237 @Bake 238 { 239 @BakeInt(DecodeMode decode_mode ) 240 @BakeInt(InputChannelStride input_channel_stride ) 241 @BakeInt(InputSampleStride input_sample_stride ) 242 @BakeInt(InputTransmitStride input_transmit_stride ) 243 @BakeInt(OutputChannelStride output_channel_stride ) 244 @BakeInt(OutputSampleStride output_sample_stride ) 245 @BakeInt(OutputTransmitStride output_transmit_stride) 246 @BakeInt(ToProcess to_process ) 247 @BakeInt(TransmitCount transmit_count ) 248 } 249 } 250 251 @Shader(filter.glsl) Filter 252 { 253 @Enumeration(DataKind) 254 @Flags([ComplexFilter OutputFloats]) 255 256 @Bake 257 { 258 @BakeInt(DecimationRate decimation_rate ) 259 @BakeInt(FilterLength filter_length ) 260 @BakeInt(InputChannelStride input_channel_stride ) 261 @BakeInt(InputSampleStride input_sample_stride ) 262 @BakeInt(InputTransmitStride input_transmit_stride ) 263 @BakeInt(OutputChannelStride output_channel_stride ) 264 @BakeInt(OutputSampleStride output_sample_stride ) 265 @BakeInt(OutputTransmitStride output_transmit_stride) 266 @BakeInt(SampleCount sample_count ) 267 @BakeFloat(DemodulationFrequency demodulation_frequency) 268 @BakeFloat(SamplingFrequency sampling_frequency ) 269 } 270 271 @SubShader Demodulate 272 } 273 274 @Shader(das.glsl) DAS 275 { 276 @Enumeration(AcquisitionKind) 277 @Enumeration(DataKind) 278 @Enumeration(InterpolationMode) 279 @Enumeration(RCAOrientation) 280 @Flags([Fast Sparse CoherencyWeighting SingleFocus SingleOrientation]) 281 282 @Bake 283 { 284 @BakeInt(AcquisitionCount acquisition_count ) 285 @BakeInt(AcquisitionKind acquisition_kind ) 286 @BakeInt(ChannelCount channel_count ) 287 @BakeInt(InterpolationMode interpolation_mode ) 288 @BakeInt(SampleCount sample_count ) 289 @BakeInt(TransmitReceiveOrientation transmit_receive_orientation) 290 291 @BakeFloat(DemodulationFrequency demodulation_frequency) 292 @BakeFloat(FNumber f_number ) 293 @BakeFloat(FocusDepth focus_depth ) 294 @BakeFloat(SamplingFrequency sampling_frequency ) 295 @BakeFloat(SpeedOfSound speed_of_sound ) 296 @BakeFloat(TimeOffset time_offset ) 297 @BakeFloat(TransmitAngle transmit_angle ) 298 } 299 } 300 301 @Shader(min_max.glsl) MinMax 302 @Shader(sum.glsl) Sum 303 } 304 305 @ShaderGroup Render 306 { 307 @Shader(render_3d.frag.glsl) Render3D 308 } 309 310 ///////////////// 311 // NOTE: Library 312 313 @Emit(CLibrary) 314 { 315 `typedef union {` 316 ` struct {` 317 @Expand(SineParameters) ` $(%type)$(|)$(name);` 318 ` } sine;` 319 ` struct {` 320 @Expand(SineAMParameters) ` $(%type)$(|)$(name);` 321 ` } sine_am;` 322 ` struct {` 323 @Expand(ChirpParameters) ` $(%type)$(|)$(name);` 324 ` } chirp;` 325 `} BeamformerEmissionParameters;` 326 `` 327 `typedef struct {` 328 @Expand(ParametersHead) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 329 @Expand(ParametersUI) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 330 @Expand(ParametersExtra) ` $(c_type)$(|)$(name);` 331 @Expand(ParametersSimple) ` $(%type)$(|)$(name)$(elements > 1 -> "[" elements "]");` 332 `} BeamformerSimpleParameters;` 333 `` 334 `typedef struct {` 335 @Expand(ParametersUI) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 336 `} BeamformerUIParameters;` 337 `` 338 `typedef struct {` 339 @Expand(ParametersHead) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 340 `} BeamformerParametersHead;` 341 `` 342 `typedef struct {` 343 @Expand(ParametersHead) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 344 @Expand(ParametersUI) ` $(%type)$(|)$(name)$(#type > 1 -> "[" #type "]");` 345 @Expand(ParametersExtra) ` $(c_type)$(|)$(name);` 346 `} BeamformerParameters;` 347 `` 348 } 349 350 //////////////// 351 // NOTE: MATLAB 352 353 @Emit(MATLAB) Parameters 354 { 355 `classdef OGLBeamformerParameters` 356 ` properties` 357 @Expand(ParametersHead) ` $(name)(1,$(#type))$(|)$(%type)` 358 ` % UI Parameters` 359 @Expand(ParametersUI) ` $(name)(1,$(#type))$(|)$(%type)` 360 @Expand(ParametersExtra) ` $(name)(1,$(m_size))$(|)$(m_type)` 361 ` end` 362 `end` 363 } 364 365 @Emit(MATLAB) ParametersHead 366 { 367 `classdef OGLBeamformerParametersHead` 368 ` properties` 369 @Expand(ParametersHead) ` $(name)(1,$(#type))$(|)$(%type)` 370 ` end` 371 `end` 372 } 373 374 @Emit(MATLAB) ParametersUI 375 { 376 `classdef OGLBeamformerParametersUI` 377 ` properties` 378 @Expand(ParametersUI) ` $(name)(1,$(#type))$(|)$(%type)` 379 ` end` 380 `end` 381 } 382 383 @Emit(MATLAB) SimpleParameters 384 { 385 `classdef OGLBeamformerSimpleParameters` 386 ` properties` 387 @Expand(ParametersHead) ` $(name)(1,$(#type)) $(%type)` 388 @Expand(ParametersUI) ` $(name)(1,$(#type)) $(%type)` 389 @Expand(ParametersExtra) ` $(name)(1,$(m_size))$(|)$(m_type)` 390 @Expand(ParametersSimple) ` $(name)(1,$(elements)) $(%type)` 391 ` end` 392 `end` 393 }