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