ogl_beamforming

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

beamformer.meta.c (9890B)


      1 /* See LICENSE for license details. */
      2 
      3 // GENERATED CODE
      4 
      5 typedef enum {
      6 	BeamformerDataKind_Int16          = 0,
      7 	BeamformerDataKind_Int16Complex   = 1,
      8 	BeamformerDataKind_Float32        = 2,
      9 	BeamformerDataKind_Float32Complex = 3,
     10 	BeamformerDataKind_Count,
     11 } BeamformerDataKind;
     12 
     13 typedef enum {
     14 	BeamformerDecodeMode_None     = 0,
     15 	BeamformerDecodeMode_Hadamard = 1,
     16 	BeamformerDecodeMode_Count,
     17 } BeamformerDecodeMode;
     18 
     19 typedef enum {
     20 	BeamformerRCAOrientation_Rows    = 0,
     21 	BeamformerRCAOrientation_Columns = 1,
     22 	BeamformerRCAOrientation_Count,
     23 } BeamformerRCAOrientation;
     24 
     25 typedef enum {
     26 	BeamformerSamplingMode_2X = 0,
     27 	BeamformerSamplingMode_4X = 1,
     28 	BeamformerSamplingMode_Count,
     29 } BeamformerSamplingMode;
     30 
     31 typedef enum {
     32 	BeamformerShaderDecodeFlags_DilateOutput = (1 << 0),
     33 } BeamformerShaderDecodeFlags;
     34 
     35 typedef enum {
     36 	BeamformerShaderFilterFlags_MapChannels   = (1 << 0),
     37 	BeamformerShaderFilterFlags_ComplexFilter = (1 << 1),
     38 	BeamformerShaderFilterFlags_Demodulate    = (1 << 2),
     39 } BeamformerShaderFilterFlags;
     40 
     41 typedef enum {
     42 	BeamformerShaderDASFlags_Fast               = (1 << 0),
     43 	BeamformerShaderDASFlags_Sparse             = (1 << 1),
     44 	BeamformerShaderDASFlags_Interpolate        = (1 << 2),
     45 	BeamformerShaderDASFlags_CoherencyWeighting = (1 << 3),
     46 	BeamformerShaderDASFlags_RxColumns          = (1 << 4),
     47 	BeamformerShaderDASFlags_TxColumns          = (1 << 5),
     48 } BeamformerShaderDASFlags;
     49 
     50 typedef enum {
     51 	BeamformerShaderKind_CudaDecode  = 0,
     52 	BeamformerShaderKind_CudaHilbert = 1,
     53 	BeamformerShaderKind_Decode      = 2,
     54 	BeamformerShaderKind_Filter      = 3,
     55 	BeamformerShaderKind_Demodulate  = 4,
     56 	BeamformerShaderKind_DAS         = 5,
     57 	BeamformerShaderKind_MinMax      = 6,
     58 	BeamformerShaderKind_Sum         = 7,
     59 	BeamformerShaderKind_Render3D    = 8,
     60 	BeamformerShaderKind_Count,
     61 
     62 	BeamformerShaderKind_ComputeFirst = BeamformerShaderKind_CudaDecode,
     63 	BeamformerShaderKind_ComputeLast  = BeamformerShaderKind_Sum,
     64 	BeamformerShaderKind_ComputeCount = 8,
     65 	BeamformerShaderKind_RenderFirst  = BeamformerShaderKind_Render3D,
     66 	BeamformerShaderKind_RenderLast   = BeamformerShaderKind_Render3D,
     67 	BeamformerShaderKind_RenderCount  = 1,
     68 } BeamformerShaderKind;
     69 
     70 typedef struct {
     71 	i32 first_match_vector_index;
     72 	i32 one_past_last_match_vector_index;
     73 	i16 match_vector_length;
     74 	i16 header_vector_length;
     75 	b32 has_local_flags;
     76 } BeamformerShaderDescriptor;
     77 
     78 typedef struct {
     79 	BeamformerShaderKind kind;
     80 	i32                  sub_shader_descriptor_index_count;
     81 	i32 *                sub_shader_descriptor_indices;
     82 } BeamformerReloadableShaderInfo;
     83 
     84 read_only global i32 *beamformer_shader_match_vectors[] = {
     85 	// CudaDecode
     86 	0,
     87 	// CudaHilbert
     88 	0,
     89 	// Decode
     90 	(i32 []){BeamformerDataKind_Int16, 0x00},
     91 	(i32 []){BeamformerDataKind_Int16, 0x01},
     92 	(i32 []){BeamformerDataKind_Int16Complex, 0x00},
     93 	(i32 []){BeamformerDataKind_Float32, 0x00},
     94 	(i32 []){BeamformerDataKind_Float32Complex, 0x00},
     95 	// Filter
     96 	(i32 []){BeamformerDataKind_Int16Complex, 0x00},
     97 	(i32 []){BeamformerDataKind_Int16Complex, 0x01},
     98 	(i32 []){BeamformerDataKind_Int16Complex, 0x02},
     99 	(i32 []){BeamformerDataKind_Int16Complex, 0x03},
    100 	(i32 []){BeamformerDataKind_Float32, 0x00},
    101 	(i32 []){BeamformerDataKind_Float32, 0x01},
    102 	(i32 []){BeamformerDataKind_Float32, 0x02},
    103 	(i32 []){BeamformerDataKind_Float32, 0x03},
    104 	(i32 []){BeamformerDataKind_Float32Complex, 0x00},
    105 	(i32 []){BeamformerDataKind_Float32Complex, 0x01},
    106 	(i32 []){BeamformerDataKind_Float32Complex, 0x02},
    107 	(i32 []){BeamformerDataKind_Float32Complex, 0x03},
    108 	// Demodulate
    109 	(i32 []){BeamformerDataKind_Int16, BeamformerSamplingMode_2X, 0x04},
    110 	(i32 []){BeamformerDataKind_Int16, BeamformerSamplingMode_2X, 0x05},
    111 	(i32 []){BeamformerDataKind_Int16, BeamformerSamplingMode_2X, 0x06},
    112 	(i32 []){BeamformerDataKind_Int16, BeamformerSamplingMode_2X, 0x07},
    113 	(i32 []){BeamformerDataKind_Int16, BeamformerSamplingMode_4X, 0x04},
    114 	(i32 []){BeamformerDataKind_Int16, BeamformerSamplingMode_4X, 0x05},
    115 	(i32 []){BeamformerDataKind_Int16, BeamformerSamplingMode_4X, 0x06},
    116 	(i32 []){BeamformerDataKind_Int16, BeamformerSamplingMode_4X, 0x07},
    117 	(i32 []){BeamformerDataKind_Int16, -1, 0x04},
    118 	(i32 []){BeamformerDataKind_Int16, -1, 0x05},
    119 	(i32 []){BeamformerDataKind_Int16, -1, 0x06},
    120 	(i32 []){BeamformerDataKind_Int16, -1, 0x07},
    121 	(i32 []){BeamformerDataKind_Float32, BeamformerSamplingMode_2X, 0x04},
    122 	(i32 []){BeamformerDataKind_Float32, BeamformerSamplingMode_2X, 0x05},
    123 	(i32 []){BeamformerDataKind_Float32, BeamformerSamplingMode_2X, 0x06},
    124 	(i32 []){BeamformerDataKind_Float32, BeamformerSamplingMode_2X, 0x07},
    125 	(i32 []){BeamformerDataKind_Float32, BeamformerSamplingMode_4X, 0x04},
    126 	(i32 []){BeamformerDataKind_Float32, BeamformerSamplingMode_4X, 0x05},
    127 	(i32 []){BeamformerDataKind_Float32, BeamformerSamplingMode_4X, 0x06},
    128 	(i32 []){BeamformerDataKind_Float32, BeamformerSamplingMode_4X, 0x07},
    129 	(i32 []){BeamformerDataKind_Float32, -1, 0x04},
    130 	(i32 []){BeamformerDataKind_Float32, -1, 0x05},
    131 	(i32 []){BeamformerDataKind_Float32, -1, 0x06},
    132 	(i32 []){BeamformerDataKind_Float32, -1, 0x07},
    133 	// DAS
    134 	(i32 []){BeamformerDataKind_Float32, 0x00},
    135 	(i32 []){BeamformerDataKind_Float32, 0x01},
    136 	(i32 []){BeamformerDataKind_Float32, 0x02},
    137 	(i32 []){BeamformerDataKind_Float32, 0x03},
    138 	(i32 []){BeamformerDataKind_Float32, 0x04},
    139 	(i32 []){BeamformerDataKind_Float32, 0x05},
    140 	(i32 []){BeamformerDataKind_Float32, 0x06},
    141 	(i32 []){BeamformerDataKind_Float32, 0x07},
    142 	(i32 []){BeamformerDataKind_Float32Complex, 0x00},
    143 	(i32 []){BeamformerDataKind_Float32Complex, 0x01},
    144 	(i32 []){BeamformerDataKind_Float32Complex, 0x02},
    145 	(i32 []){BeamformerDataKind_Float32Complex, 0x03},
    146 	(i32 []){BeamformerDataKind_Float32Complex, 0x04},
    147 	(i32 []){BeamformerDataKind_Float32Complex, 0x05},
    148 	(i32 []){BeamformerDataKind_Float32Complex, 0x06},
    149 	(i32 []){BeamformerDataKind_Float32Complex, 0x07},
    150 	// MinMax
    151 	0,
    152 	// Sum
    153 	0,
    154 	// Render3D
    155 	0,
    156 };
    157 #define beamformer_match_vectors_count (62)
    158 
    159 read_only global BeamformerShaderDescriptor beamformer_shader_descriptors[] = {
    160 	{0,  1,  0, 0, 0},
    161 	{1,  2,  0, 0, 0},
    162 	{2,  7,  1, 2, 1},
    163 	{7,  19, 1, 1, 1},
    164 	{19, 43, 2, 2, 1},
    165 	{43, 59, 1, 2, 1},
    166 	{59, 60, 0, 0, 0},
    167 	{60, 61, 0, 0, 0},
    168 	{61, 62, 0, 0, 0},
    169 };
    170 
    171 read_only global s8 beamformer_shader_names[] = {
    172 	s8_comp("CudaDecode"),
    173 	s8_comp("CudaHilbert"),
    174 	s8_comp("Decode"),
    175 	s8_comp("Filter"),
    176 	s8_comp("Demodulate"),
    177 	s8_comp("DAS"),
    178 	s8_comp("MinMax"),
    179 	s8_comp("Sum"),
    180 	s8_comp("Render3D"),
    181 };
    182 
    183 read_only global BeamformerReloadableShaderInfo beamformer_reloadable_shader_infos[] = {
    184 	{BeamformerShaderKind_Decode,   0, 0},
    185 	{BeamformerShaderKind_Filter,   1, (i32 []){4}},
    186 	{BeamformerShaderKind_DAS,      0, 0},
    187 	{BeamformerShaderKind_MinMax,   0, 0},
    188 	{BeamformerShaderKind_Sum,      0, 0},
    189 	{BeamformerShaderKind_Render3D, 0, 0},
    190 };
    191 
    192 read_only global s8 beamformer_reloadable_shader_files[] = {
    193 	s8_comp("decode.glsl"),
    194 	s8_comp("filter.glsl"),
    195 	s8_comp("das.glsl"),
    196 	s8_comp("min_max.glsl"),
    197 	s8_comp("sum.glsl"),
    198 	s8_comp("render_3d.frag.glsl"),
    199 };
    200 
    201 read_only global i32 beamformer_reloadable_compute_shader_info_indices[] = {
    202 	0,
    203 	1,
    204 	2,
    205 	3,
    206 	4,
    207 };
    208 
    209 read_only global i32 beamformer_reloadable_render_shader_info_indices[] = {
    210 	5,
    211 };
    212 
    213 read_only global s8 beamformer_shader_global_header_strings[] = {
    214 	s8_comp(""
    215 	"#define DataKind_Int16          0\n"
    216 	"#define DataKind_Int16Complex   1\n"
    217 	"#define DataKind_Float32        2\n"
    218 	"#define DataKind_Float32Complex 3\n"
    219 	"\n"),
    220 	s8_comp(""
    221 	"#define DecodeMode_None     0\n"
    222 	"#define DecodeMode_Hadamard 1\n"
    223 	"\n"),
    224 	s8_comp(""
    225 	"#define RCAOrientation_Rows    0\n"
    226 	"#define RCAOrientation_Columns 1\n"
    227 	"\n"),
    228 	s8_comp(""
    229 	"#define SamplingMode_2X 0\n"
    230 	"#define SamplingMode_4X 1\n"
    231 	"\n"),
    232 };
    233 
    234 read_only global s8 beamformer_shader_local_header_strings[] = {
    235 	s8_comp(""
    236 	"#define ShaderFlags_DilateOutput (1 << 0)\n"
    237 	"\n"),
    238 	s8_comp(""
    239 	"#define ShaderFlags_MapChannels   (1 << 0)\n"
    240 	"#define ShaderFlags_ComplexFilter (1 << 1)\n"
    241 	"#define ShaderFlags_Demodulate    (1 << 2)\n"
    242 	"\n"),
    243 	s8_comp(""
    244 	"#define ShaderFlags_Fast               (1 << 0)\n"
    245 	"#define ShaderFlags_Sparse             (1 << 1)\n"
    246 	"#define ShaderFlags_Interpolate        (1 << 2)\n"
    247 	"#define ShaderFlags_CoherencyWeighting (1 << 3)\n"
    248 	"#define ShaderFlags_RxColumns          (1 << 4)\n"
    249 	"#define ShaderFlags_TxColumns          (1 << 5)\n"
    250 	"\n"),
    251 	{0},
    252 	{0},
    253 	{0},
    254 };
    255 
    256 read_only global s8 beamformer_shader_descriptor_header_strings[] = {
    257 	s8_comp("DataKind"),
    258 	s8_comp("DecodeMode"),
    259 	s8_comp("RCAOrientation"),
    260 	s8_comp("SamplingMode"),
    261 };
    262 
    263 read_only global i32 *beamformer_shader_header_vectors[] = {
    264 	0,
    265 	0,
    266 	(i32 []){0, 1},
    267 	(i32 []){0},
    268 	(i32 []){0, 3},
    269 	(i32 []){0, 2},
    270 	0,
    271 	0,
    272 	0,
    273 };
    274 
    275 function iz
    276 beamformer_shader_match(i32 *match_vector, i32 first_index, i32 one_past_last_index, i32 vector_length)
    277 {
    278 	iz result = first_index;
    279 	i32 best_score = 0;
    280 	for (i32 index = first_index; index < one_past_last_index; index++)
    281 	{
    282 		i32 score = 0;
    283 		i32 *v = beamformer_shader_match_vectors[index];
    284 		for (i32 i = 0; i < vector_length; i++) {
    285 			if (match_vector[i] == v[i]) {
    286 				score++;
    287 			}
    288 		}
    289 		if (best_score < score) {
    290 			result     = index;
    291 			best_score = score;
    292 		}
    293 	}
    294 	return result;
    295 }
    296 
    297 function iz
    298 beamformer_shader_decode_match(BeamformerDataKind a, i32 flags)
    299 {
    300 	iz result = beamformer_shader_match((i32 []){(i32)a, flags}, 2, 7, 2);
    301 	return result;
    302 }
    303 
    304 function iz
    305 beamformer_shader_filter_match(BeamformerDataKind a, i32 flags)
    306 {
    307 	iz result = beamformer_shader_match((i32 []){(i32)a, flags}, 7, 19, 2);
    308 	return result;
    309 }
    310 
    311 function iz
    312 beamformer_shader_demodulate_match(BeamformerDataKind a, BeamformerSamplingMode b, i32 flags)
    313 {
    314 	iz result = beamformer_shader_match((i32 []){(i32)a, (i32)b, flags}, 19, 43, 3);
    315 	return result;
    316 }
    317 
    318 function iz
    319 beamformer_shader_das_match(BeamformerDataKind a, i32 flags)
    320 {
    321 	iz result = beamformer_shader_match((i32 []){(i32)a, flags}, 43, 59, 2);
    322 	return result;
    323 }
    324