ogl_beamforming

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

beamformer.meta (4452B)


      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 @Table([name pretty_name fixed_transmits]) AcquisitionKind
     14 {
     15 	[FORCES         FORCES         1]
     16 	[UFORCES        UFORCES        0]
     17 	[HERCULES       HERCULES       1]
     18 	[RCA_VLS        VLS            0]
     19 	[RCA_TPW        TPW            0]
     20 	[UHERCULES      UHERCULES      0]
     21 	[RACES          RACES          1]
     22 	[EPIC_FORCES    EPIC-FORCES    1]
     23 	[EPIC_UFORCES   EPIC-UFORCES   0]
     24 	[EPIC_UHERCULES EPIC-UHERCULES 0]
     25 	[Flash          Flash          0]
     26 	[HERO_PA        HERO-PA        0]
     27 }
     28 
     29 @Table([name]) InterpolationMode
     30 {
     31 	[Nearest]
     32 	[Linear]
     33 	[Cubic]
     34 }
     35 
     36 @Expand(AcquisitionKind)   @Enumeration(AcquisitionKind `$(name)`)
     37 @Expand(DataKind)          @Enumeration(DataKind `$(name)`)
     38 @Expand(InterpolationMode) @Enumeration(InterpolationMode `$(name)`)
     39 
     40 @Emit
     41 {
     42 	`read_only global u8 beamformer_data_kind_element_size[] = {`
     43 	@Expand(DataKind) `	$(size),`
     44 	`};`
     45 	``
     46 	`read_only global u8 beamformer_data_kind_element_count[] = {`
     47 	@Expand(DataKind) `	$(elements),`
     48 	`};`
     49 	``
     50 	`read_only global u8 beamformer_data_kind_byte_size[] = {`
     51 	@Expand(DataKind) `	$(size) * $(elements),`
     52 	`};`
     53 }
     54 
     55 @Emit
     56 {
     57 	`read_only global u8 beamformer_acquisition_kind_has_fixed_transmits[] = {`
     58 	@Expand(AcquisitionKind) `	$(fixed_transmits),`
     59 	`};`
     60 }
     61 
     62 @Emit
     63 {
     64 	`read_only global s8 beamformer_acquisition_kind_strings[] = {`
     65 	@Expand(AcquisitionKind) `	s8_comp("$(pretty_name)"),`
     66 	`};`
     67 }
     68 
     69 @Emit
     70 {
     71 	`read_only global s8 beamformer_interpolation_mode_strings[] = {`
     72 	@Expand(InterpolationMode) `	s8_comp("$(name)"),`
     73 	`};`
     74 }
     75 
     76 @ShaderGroup Compute
     77 {
     78 	@Shader CudaDecode
     79 	@Shader CudaHilbert
     80 
     81 	@Shader(decode.glsl) Decode
     82 	{
     83 		@Enumeration(DataKind)
     84 		@Enumeration(DecodeMode)
     85 		@Flags([DilateOutput UseSharedMemory])
     86 
     87 		@Bake
     88 		{
     89 			@BakeInt(DecodeMode           decode_mode           )
     90 			@BakeInt(InputChannelStride   input_channel_stride  )
     91 			@BakeInt(InputSampleStride    input_sample_stride   )
     92 			@BakeInt(InputTransmitStride  input_transmit_stride )
     93 			@BakeInt(OutputChannelStride  output_channel_stride )
     94 			@BakeInt(OutputSampleStride   output_sample_stride  )
     95 			@BakeInt(OutputTransmitStride output_transmit_stride)
     96 			@BakeInt(ToProcess            to_process            )
     97 			@BakeInt(TransmitCount        transmit_count        )
     98 		}
     99 	}
    100 
    101 	@Shader(filter.glsl) Filter
    102 	{
    103 		@Enumeration(DataKind)
    104 		@Flags([ComplexFilter OutputFloats])
    105 
    106 		@Bake
    107 		{
    108 			@BakeInt(DecimationRate       decimation_rate       )
    109 			@BakeInt(FilterLength         filter_length         )
    110 			@BakeInt(InputChannelStride   input_channel_stride  )
    111 			@BakeInt(InputSampleStride    input_sample_stride   )
    112 			@BakeInt(InputTransmitStride  input_transmit_stride )
    113 			@BakeInt(OutputChannelStride  output_channel_stride )
    114 			@BakeInt(OutputSampleStride   output_sample_stride  )
    115 			@BakeInt(OutputTransmitStride output_transmit_stride)
    116 			@BakeInt(SampleCount          sample_count          )
    117 			@BakeFloat(DemodulationFrequency demodulation_frequency)
    118 			@BakeFloat(SamplingFrequency     sampling_frequency    )
    119 		}
    120 
    121 		@SubShader Demodulate
    122 	}
    123 
    124 	@Shader(das.glsl) DAS
    125 	{
    126 		@Enumeration(AcquisitionKind)
    127 		@Enumeration(DataKind)
    128 		@Enumeration(InterpolationMode)
    129 		@Enumeration(RCAOrientation)
    130 		@Flags([Fast Sparse CoherencyWeighting SingleFocus SingleOrientation])
    131 
    132 		@Bake
    133 		{
    134 			@BakeInt(AcquisitionCount           acquisition_count           )
    135 			@BakeInt(AcquisitionKind            acquisition_kind            )
    136 			@BakeInt(ChannelCount               channel_count               )
    137 			@BakeInt(InterpolationMode          interpolation_mode          )
    138 			@BakeInt(SampleCount                sample_count                )
    139 			@BakeInt(TransmitReceiveOrientation transmit_receive_orientation)
    140 
    141 			@BakeFloat(DemodulationFrequency demodulation_frequency)
    142 			@BakeFloat(FNumber               f_number              )
    143 			@BakeFloat(FocusDepth            focus_depth           )
    144 			@BakeFloat(SamplingFrequency     sampling_frequency    )
    145 			@BakeFloat(SpeedOfSound          speed_of_sound        )
    146 			@BakeFloat(TimeOffset            time_offset           )
    147 			@BakeFloat(TransmitAngle         transmit_angle        )
    148 		}
    149 	}
    150 
    151 	@Shader(min_max.glsl) MinMax
    152 	@Shader(sum.glsl) Sum
    153 }
    154 
    155 @ShaderGroup Render
    156 {
    157 	@Shader(render_3d.frag.glsl) Render3D
    158 }