ogl_beamforming

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

beamformer.meta (9890B)


      1 @Constant(4)    FilterSlots
      2 @Constant(16)   MaxBacklogFrames
      3 @Constant(256)  MaxChannelCount
      4 @Constant(256)  MaxEmissionsCount
      5 @Constant(16)   MaxComputeShaderStages
      6 @Constant(16)   MaxParameterBlocks
      7 @Constant(3)    MaxRawDataFramesInFlight
      8 
      9 @Enumeration DecodeMode
     10 {
     11 	None
     12 	Hadamard
     13 }
     14 
     15 @Enumeration RCAOrientation
     16 {
     17 	None
     18 	Rows
     19 	Columns
     20 }
     21 
     22 @Enumeration SamplingMode
     23 {
     24 	2X
     25 	4X
     26 }
     27 
     28 @Table([name size elements complex]) DataKindTable
     29 {
     30 	[Int16          2 1 0]
     31 	[Int16Complex   2 2 1]
     32 	[Float32        4 1 0]
     33 	[Float32Complex 4 2 1]
     34 	[Float16        2 1 0]
     35 	[Float16Complex 2 2 1]
     36 }
     37 @Expand(DataKindTable) @Enumeration(`$(name)`) DataKind
     38 
     39 @Table([name samples]) ContrastModeTable
     40 {
     41 	[None 1]
     42 	[A1S2 3]
     43 }
     44 @Expand(ContrastModeTable) @Enumeration(`$(name)`) ContrastMode
     45 
     46 @Enumeration EmissionKind
     47 {
     48 	Sine
     49 	Chirp
     50 }
     51 
     52 @Enumeration InterpolationMode
     53 {
     54 	Nearest
     55 	Linear
     56 	Cubic
     57 }
     58 
     59 @Struct SineParameters
     60 {
     61 	[cycles    F32]
     62 	[frequency F32]
     63 }
     64 @Library @Struct SineParameters
     65 
     66 @Struct ChirpParameters
     67 {
     68 	[duration      F32]
     69 	[min_frequency F32]
     70 	[max_frequency F32]
     71 }
     72 @Library @Struct ChirpParameters
     73 
     74 @Table([type c_member m_member]) EmissionParametersTable
     75 {
     76 	[SineParameters  sine  Sine ]
     77 	[ChirpParameters chirp Chirp]
     78 }
     79 @Expand(EmissionParametersTable) @Union([`$(c_member)` `$(type)`]) EmissionParametersUnion
     80 @Expand(EmissionParametersTable) @Union([`$(m_member)` `$(type)`]) EmissionParametersUnionMATLAB
     81 @MATLAB(EmissionParameters)      @Union EmissionParametersUnionMATLAB
     82 
     83 @Struct EmissionParameters
     84 {
     85 	[kind EmissionKind           ]
     86 	[``   EmissionParametersUnion]
     87 }
     88 @Library          @Struct EmissionParameters
     89 @MATLAB(Emission) @Struct EmissionParameters
     90 
     91 @Table([name name_lower]) FilterKindTable
     92 {
     93 	[Kaiser       kaiser       ]
     94 	[MatchedChirp matched_chirp]
     95 }
     96 @Expand(FilterKindTable) @Enumeration(`$(name)`) FilterKind
     97 
     98 @Struct KaiserFilterParameters
     99 {
    100 	[cutoff_frequency F32]
    101 	[beta             F32]
    102 	[length           U32]
    103 }
    104 @Library @Struct KaiserFilterParameters
    105 
    106 @Struct MatchedChirpFilterParameters
    107 {
    108 	[duration      F32]
    109 	[min_frequency F32]
    110 	[max_frequency F32]
    111 }
    112 @Library @Struct MatchedChirpFilterParameters
    113 
    114 @Table([type c_member m_member]) FilterParametersTable
    115 {
    116 	[KaiserFilterParameters       kaiser        Kaiser      ]
    117 	[MatchedChirpFilterParameters matched_chirp MatchedChirp]
    118 }
    119 @Expand(FilterParametersTable) @Union([`$(c_member)` `$(type)`]) FilterParametersUnion
    120 @Expand(FilterParametersTable) @Union([`$(m_member)` `$(type)`]) FilterParametersUnionMATLAB
    121 @MATLAB(FilterParameters)      @Union FilterParametersUnionMATLAB
    122 
    123 @Struct FilterParameters
    124 {
    125 	[kind               FilterKind           ]
    126 	[sampling_frequency F32                  ]
    127 	[complex            B32                  ]
    128 	[``                 FilterParametersUnion]
    129 }
    130 @Library        @Struct FilterParameters
    131 @MATLAB(Filter) @Struct FilterParameters
    132 
    133 @Table([name pretty_name fixed_transmits]) AcquisitionKindTable
    134 {
    135 	[FORCES         FORCES         1]
    136 	[UFORCES        UFORCES        0]
    137 	[HERCULES       HERCULES       1]
    138 	[RCA_VLS        VLS            0]
    139 	[RCA_TPW        TPW            0]
    140 	[UHERCULES      UHERCULES      0]
    141 	[RACES          RACES          1]
    142 	[EPIC_FORCES    EPIC-FORCES    1]
    143 	[EPIC_UFORCES   EPIC-UFORCES   0]
    144 	[EPIC_UHERCULES EPIC-UHERCULES 0]
    145 	[Flash          Flash          0]
    146 	[HERO_PA        HERO-PA        0]
    147 }
    148 @Expand(AcquisitionKindTable) @Enumeration(`$(name)`) AcquisitionKind
    149 
    150 @Struct ParametersHead
    151 {
    152 	[das_voxel_transform          M4             ]
    153 	[xdc_transform                M4             ]
    154 	[xdc_element_pitch            V2             ]
    155 	[raw_data_dimensions          UV2            ]
    156 	[focal_vector                 V2             ]
    157 	[transmit_receive_orientation U32            ]
    158 	[sample_count                 U32            ]
    159 	[channel_count                U32            ]
    160 	[acquisition_count            U32            ]
    161 	[acquisition_kind             AcquisitionKind]
    162 	[decode_mode                  DecodeMode     ]
    163 	[sampling_mode                SamplingMode   ]
    164 	[time_offset                  F32            ]
    165 	[single_focus                 B32            ]
    166 	[single_orientation           B32            ]
    167 }
    168 
    169 @Struct UIParameters
    170 {
    171 	[output_points          SV4]
    172 	[sampling_frequency     F32]
    173 	[demodulation_frequency F32]
    174 	[speed_of_sound         F32]
    175 	[f_number               F32]
    176 	[interpolation_mode     InterpolationMode]
    177 	[coherency_weighting    B32]
    178 	[decimation_rate        U32]
    179 }
    180 
    181 @Struct ExtraParameters
    182 {
    183 	[contrast_mode       ContrastMode      ]
    184 	[emission_parameters EmissionParameters]
    185 }
    186 
    187 @Struct Parameters
    188 {
    189 	[`` ParametersHead ]
    190 	[`` UIParameters   ]
    191 	[`` ExtraParameters]
    192 }
    193 @Library @Struct Parameters
    194 @MATLAB  @Struct Parameters
    195 
    196 @Struct SimpleParameters
    197 {
    198 
    199 	[``                            Parameters 1                     ]
    200 	[channel_mapping               S16        MaxChannelCount       ]
    201 	[sparse_elements               S16        MaxEmissionsCount     ]
    202 	[transmit_receive_orientations U8         MaxEmissionsCount     ]
    203 	[steering_angles               F32        MaxEmissionsCount     ]
    204 	[focal_depths                  F32        MaxEmissionsCount     ]
    205 	[compute_stages                S32        MaxComputeShaderStages]
    206 	[compute_stage_parameters      S32        MaxComputeShaderStages]
    207 	[compute_stages_count          U32        1                     ]
    208 	[data_kind                     DataKind   1                     ]
    209 }
    210 @Library @Struct SimpleParameters
    211 @MATLAB  @Struct SimpleParameters
    212 
    213 @Emit
    214 {
    215 	`read_only global u8 beamformer_data_kind_element_size[] = {`
    216 	@Expand(DataKindTable) `	$(size),`
    217 	`};`
    218 	``
    219 	`read_only global u8 beamformer_data_kind_element_count[] = {`
    220 	@Expand(DataKindTable) `	$(elements),`
    221 	`};`
    222 	``
    223 	`read_only global u8 beamformer_data_kind_byte_size[] = {`
    224 	@Expand(DataKindTable) `	$(size) * $(elements),`
    225 	`};`
    226 	``
    227 	`read_only global b8 beamformer_data_kind_complex[] = {`
    228 	@Expand(DataKindTable) `	$(complex),`
    229 	`};`
    230 	``
    231 	`read_only global u8 beamformer_contrast_mode_samples[] = {`
    232 	@Expand(ContrastModeTable) `	$(samples),`
    233 	`};`
    234 	``
    235 	`read_only global u8 beamformer_acquisition_kind_has_fixed_transmits[] = {`
    236 	@Expand(AcquisitionKindTable) `	$(fixed_transmits),`
    237 	`};`
    238 	``
    239 	`read_only global s8 beamformer_acquisition_kind_strings[] = {`
    240 	@Expand(AcquisitionKindTable) `	s8_comp("$(pretty_name)"),`
    241 	`};`
    242 	``
    243 	`read_only global s8 beamformer_filter_kind_strings[] = {`
    244 	@Expand(FilterKindTable) `	s8_comp("$(name)"),`
    245 	`};`
    246 	``
    247 	`read_only global s8 beamformer_interpolation_mode_strings[] = {`
    248 	@Expand(InterpolationMode) `	s8_comp("$(name)"),`
    249 	`};`
    250 }
    251 
    252 @ShaderGroup Compute
    253 {
    254 	@Shader CudaDecode
    255 	@Shader CudaHilbert
    256 
    257 	@Shader(decode.glsl) Decode
    258 	{
    259 		@Enumeration DataKind
    260 		@Enumeration DecodeMode
    261 
    262 		@Bake
    263 		{
    264 			[DataKind             data_kind              U32]
    265 			[DilateOutput         dilate_output          U32]
    266 			[UseSharedMemory      use_shared_memory      U32]
    267 			[DecodeMode           decode_mode            U32]
    268 			[InputChannelStride   input_channel_stride   U32]
    269 			[InputSampleStride    input_sample_stride    U32]
    270 			[InputTransmitStride  input_transmit_stride  U32]
    271 			[OutputChannelStride  output_channel_stride  U32]
    272 			[OutputSampleStride   output_sample_stride   U32]
    273 			[OutputTransmitStride output_transmit_stride U32]
    274 			[ToProcess            to_process             U32]
    275 			[TransmitCount        transmit_count         U32]
    276 		}
    277 	}
    278 
    279 	@Shader(filter.glsl) Filter
    280 	{
    281 		@Enumeration DataKind
    282 
    283 		@ShaderAlias Demodulate
    284 
    285 		@Bake
    286 		{
    287 			[DataKind              data_kind              U32]
    288 			[Demodulate            demodulate             U32]
    289 			[ComplexFilter         complex_filter         U32]
    290 			[OutputFloats          output_floats          U32]
    291 			[DecimationRate        decimation_rate        U32]
    292 			[FilterLength          filter_length          U32]
    293 			[InputChannelStride    input_channel_stride   U32]
    294 			[InputSampleStride     input_sample_stride    U32]
    295 			[InputTransmitStride   input_transmit_stride  U32]
    296 			[OutputChannelStride   output_channel_stride  U32]
    297 			[OutputSampleStride    output_sample_stride   U32]
    298 			[OutputTransmitStride  output_transmit_stride U32]
    299 			[SampleCount           sample_count           U32]
    300 
    301 			[DemodulationFrequency demodulation_frequency F32]
    302 			[SamplingFrequency     sampling_frequency     F32]
    303 		}
    304 	}
    305 
    306 	@Shader(das.glsl) DAS
    307 	{
    308 		@Enumeration AcquisitionKind
    309 		@Enumeration DataKind
    310 		@Enumeration InterpolationMode
    311 		@Enumeration RCAOrientation
    312 
    313 		@Bake
    314 		{
    315 			[DataKind                   data_kind                    U32]
    316 			[CoherencyWeighting         coherency_weighting          U32]
    317 			[SingleFocus                single_focus                 U32]
    318 			[SingleOrientation          single_orientation           U32]
    319 			[Fast                       fast                         U32]
    320 			[Sparse                     sparse                       U32]
    321 			[AcquisitionCount           acquisition_count            U32]
    322 			[AcquisitionKind            acquisition_kind             U32]
    323 			[ChannelCount               channel_count                U32]
    324 			[InterpolationMode          interpolation_mode           U32]
    325 			[SampleCount                sample_count                 U32]
    326 			[TransmitReceiveOrientation transmit_receive_orientation U32]
    327 
    328 			[DemodulationFrequency      demodulation_frequency       F32]
    329 			[FNumber                    f_number                     F32]
    330 			[FocusDepth                 focus_depth                  F32]
    331 			[SamplingFrequency          sampling_frequency           F32]
    332 			[SpeedOfSound               speed_of_sound               F32]
    333 			[TimeOffset                 time_offset                  F32]
    334 			[TransmitAngle              transmit_angle               F32]
    335 		}
    336 
    337 		@PushConstants
    338 		{
    339 			[xdc_transform     M4]
    340 			[voxel_transform   M4]
    341 			[xdc_element_pitch V2]
    342 		}
    343 	}
    344 
    345 	@Shader(min_max.glsl) MinMax
    346 	@Shader(sum.glsl) Sum
    347 }
    348 
    349 @ShaderGroup Render
    350 {
    351 	@Shader(render_3d.frag.glsl) Render3D
    352 }