authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-07-01 10:19:26+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-07-01 10:19:26+02:00
log426de8e4b21676599fbdbb0cae6f724718a8a076
tree0f307740120d36f28a1a8a7c0f8cd6b3dd289706
parent15f00d1756f1503da29151cef5213858f6667f4f
parentae4fc20de3543370e8a27989c5957e34f4638676

Merge pull request 'SPIR-V: miscellaneous changes' (#35974) from spirv-fixes into master

Reviewed-on: https://codeberg.org/ziglang/zig/pulls/35974 Reviewed-by: Ali Cheraghi <alichraghi@noreply.codeberg.org>

11 files changed, 593 insertions(+), 446 deletions(-)

lib/std/Target/spirv.zig+228-276
...@@ -6,7 +6,6 @@ const CpuModel = std.Target.Cpu.Model;...@@ -6,7 +6,6 @@ const CpuModel = std.Target.Cpu.Model;
66
7pub const Feature = enum {7pub const Feature = enum {
8 abort_khr,8 abort_khr,
9 addresses,
10 arithmetic_fence_ext,9 arithmetic_fence_ext,
11 atomic_float16add_ext,10 atomic_float16add_ext,
12 atomic_float16min_max_ext,11 atomic_float16min_max_ext,
...@@ -87,8 +86,6 @@ pub const Feature = enum {...@@ -87,8 +86,6 @@ pub const Feature = enum {
87 int64image_ext,86 int64image_ext,
88 int8,87 int8,
89 interpolation_function,88 interpolation_function,
90 kernel,
91 linkage,
92 literal_sampler,89 literal_sampler,
93 long_vector_ext,90 long_vector_ext,
94 matrix,91 matrix,
...@@ -98,7 +95,6 @@ pub const Feature = enum {...@@ -98,7 +95,6 @@ pub const Feature = enum {
98 multi_viewport,95 multi_viewport,
99 named_barrier,96 named_barrier,
100 opt_none_ext,97 opt_none_ext,
101 physical_storage_buffer_addresses,
102 pipe_storage,98 pipe_storage,
103 pipes,99 pipes,
104 poison_freeze_khr,100 poison_freeze_khr,
...@@ -121,7 +117,6 @@ pub const Feature = enum {...@@ -121,7 +117,6 @@ pub const Feature = enum {
121 sampled_image_array_dynamic_indexing,117 sampled_image_array_dynamic_indexing,
122 sampled_image_array_non_uniform_indexing,118 sampled_image_array_non_uniform_indexing,
123 sampled_rect,119 sampled_rect,
124 shader,
125 shader64bit_indexing_ext,120 shader64bit_indexing_ext,
126 shader_clock_khr,121 shader_clock_khr,
127 shader_invocation_reorder_ext,122 shader_invocation_reorder_ext,
...@@ -172,7 +167,6 @@ pub const Feature = enum {...@@ -172,7 +167,6 @@ pub const Feature = enum {
172 SPV_KHR_fragment_shading_rate,167 SPV_KHR_fragment_shading_rate,
173 SPV_KHR_integer_dot_product,168 SPV_KHR_integer_dot_product,
174 SPV_KHR_multiview,169 SPV_KHR_multiview,
175 SPV_KHR_physical_storage_buffer,
176 SPV_KHR_poison_freeze,170 SPV_KHR_poison_freeze,
177 SPV_KHR_post_depth_coverage,171 SPV_KHR_post_depth_coverage,
178 SPV_KHR_quad_control,172 SPV_KHR_quad_control,
...@@ -253,22 +247,15 @@ pub const all_features = blk: {...@@ -253,22 +247,15 @@ pub const all_features = blk: {
253 var result: [len]CpuFeature = undefined;247 var result: [len]CpuFeature = undefined;
254 result[@intFromEnum(Feature.abort_khr)] = .{248 result[@intFromEnum(Feature.abort_khr)] = .{
255 .llvm_name = null,249 .llvm_name = null,
256 .description = "Enable abort_khr Capability.",250 .description = "Enable abort_khr capability",
257 .dependencies = featureSet(&[_]Feature{251 .dependencies = featureSet(&[_]Feature{
258 .SPV_KHR_abort,252 .SPV_KHR_abort,
259 .v1_0,253 .v1_0,
260 }),254 }),
261 };255 };
262 result[@intFromEnum(Feature.addresses)] = .{
263 .llvm_name = null,
264 .description = "Enable addresses Capability.",
265 .dependencies = featureSet(&[_]Feature{
266 .v1_0,
267 }),
268 };
269 result[@intFromEnum(Feature.arithmetic_fence_ext)] = .{256 result[@intFromEnum(Feature.arithmetic_fence_ext)] = .{
270 .llvm_name = null,257 .llvm_name = null,
271 .description = "Enable arithmetic_fence_ext Capability.",258 .description = "Enable arithmetic_fence_ext capability",
272 .dependencies = featureSet(&[_]Feature{259 .dependencies = featureSet(&[_]Feature{
273 .SPV_EXT_arithmetic_fence,260 .SPV_EXT_arithmetic_fence,
274 .v1_0,261 .v1_0,
...@@ -276,7 +263,7 @@ pub const all_features = blk: {...@@ -276,7 +263,7 @@ pub const all_features = blk: {
276 };263 };
277 result[@intFromEnum(Feature.atomic_float16add_ext)] = .{264 result[@intFromEnum(Feature.atomic_float16add_ext)] = .{
278 .llvm_name = null,265 .llvm_name = null,
279 .description = "Enable atomic_float16add_ext Capability.",266 .description = "Enable atomic_float16add_ext capability",
280 .dependencies = featureSet(&[_]Feature{267 .dependencies = featureSet(&[_]Feature{
281 .SPV_EXT_shader_atomic_float16_add,268 .SPV_EXT_shader_atomic_float16_add,
282 .v1_0,269 .v1_0,
...@@ -284,7 +271,7 @@ pub const all_features = blk: {...@@ -284,7 +271,7 @@ pub const all_features = blk: {
284 };271 };
285 result[@intFromEnum(Feature.atomic_float16min_max_ext)] = .{272 result[@intFromEnum(Feature.atomic_float16min_max_ext)] = .{
286 .llvm_name = null,273 .llvm_name = null,
287 .description = "Enable atomic_float16min_max_ext Capability.",274 .description = "Enable atomic_float16min_max_ext capability",
288 .dependencies = featureSet(&[_]Feature{275 .dependencies = featureSet(&[_]Feature{
289 .SPV_EXT_shader_atomic_float_min_max,276 .SPV_EXT_shader_atomic_float_min_max,
290 .v1_0,277 .v1_0,
...@@ -292,7 +279,7 @@ pub const all_features = blk: {...@@ -292,7 +279,7 @@ pub const all_features = blk: {
292 };279 };
293 result[@intFromEnum(Feature.atomic_float32add_ext)] = .{280 result[@intFromEnum(Feature.atomic_float32add_ext)] = .{
294 .llvm_name = null,281 .llvm_name = null,
295 .description = "Enable atomic_float32add_ext Capability.",282 .description = "Enable atomic_float32add_ext capability",
296 .dependencies = featureSet(&[_]Feature{283 .dependencies = featureSet(&[_]Feature{
297 .SPV_EXT_shader_atomic_float_add,284 .SPV_EXT_shader_atomic_float_add,
298 .v1_0,285 .v1_0,
...@@ -300,7 +287,7 @@ pub const all_features = blk: {...@@ -300,7 +287,7 @@ pub const all_features = blk: {
300 };287 };
301 result[@intFromEnum(Feature.atomic_float32min_max_ext)] = .{288 result[@intFromEnum(Feature.atomic_float32min_max_ext)] = .{
302 .llvm_name = null,289 .llvm_name = null,
303 .description = "Enable atomic_float32min_max_ext Capability.",290 .description = "Enable atomic_float32min_max_ext capability",
304 .dependencies = featureSet(&[_]Feature{291 .dependencies = featureSet(&[_]Feature{
305 .SPV_EXT_shader_atomic_float_min_max,292 .SPV_EXT_shader_atomic_float_min_max,
306 .v1_0,293 .v1_0,
...@@ -308,7 +295,7 @@ pub const all_features = blk: {...@@ -308,7 +295,7 @@ pub const all_features = blk: {
308 };295 };
309 result[@intFromEnum(Feature.atomic_float64add_ext)] = .{296 result[@intFromEnum(Feature.atomic_float64add_ext)] = .{
310 .llvm_name = null,297 .llvm_name = null,
311 .description = "Enable atomic_float64add_ext Capability.",298 .description = "Enable atomic_float64add_ext capability",
312 .dependencies = featureSet(&[_]Feature{299 .dependencies = featureSet(&[_]Feature{
313 .SPV_EXT_shader_atomic_float_add,300 .SPV_EXT_shader_atomic_float_add,
314 .v1_0,301 .v1_0,
...@@ -316,7 +303,7 @@ pub const all_features = blk: {...@@ -316,7 +303,7 @@ pub const all_features = blk: {
316 };303 };
317 result[@intFromEnum(Feature.atomic_float64min_max_ext)] = .{304 result[@intFromEnum(Feature.atomic_float64min_max_ext)] = .{
318 .llvm_name = null,305 .llvm_name = null,
319 .description = "Enable atomic_float64min_max_ext Capability.",306 .description = "Enable atomic_float64min_max_ext capability",
320 .dependencies = featureSet(&[_]Feature{307 .dependencies = featureSet(&[_]Feature{
321 .SPV_EXT_shader_atomic_float_min_max,308 .SPV_EXT_shader_atomic_float_min_max,
322 .v1_0,309 .v1_0,
...@@ -324,14 +311,14 @@ pub const all_features = blk: {...@@ -324,14 +311,14 @@ pub const all_features = blk: {
324 };311 };
325 result[@intFromEnum(Feature.atomic_storage)] = .{312 result[@intFromEnum(Feature.atomic_storage)] = .{
326 .llvm_name = null,313 .llvm_name = null,
327 .description = "Enable atomic_storage Capability.",314 .description = "Enable atomic_storage capability",
328 .dependencies = featureSet(&[_]Feature{315 .dependencies = featureSet(&[_]Feature{
329 .v1_0,316 .v1_0,
330 }),317 }),
331 };318 };
332 result[@intFromEnum(Feature.atomic_storage_ops)] = .{319 result[@intFromEnum(Feature.atomic_storage_ops)] = .{
333 .llvm_name = null,320 .llvm_name = null,
334 .description = "Enable atomic_storage_ops Capability.",321 .description = "Enable atomic_storage_ops capability",
335 .dependencies = featureSet(&[_]Feature{322 .dependencies = featureSet(&[_]Feature{
336 .SPV_KHR_shader_atomic_counter_ops,323 .SPV_KHR_shader_atomic_counter_ops,
337 .v1_0,324 .v1_0,
...@@ -339,7 +326,7 @@ pub const all_features = blk: {...@@ -339,7 +326,7 @@ pub const all_features = blk: {
339 };326 };
340 result[@intFromEnum(Feature.b_float16cooperative_matrix_khr)] = .{327 result[@intFromEnum(Feature.b_float16cooperative_matrix_khr)] = .{
341 .llvm_name = null,328 .llvm_name = null,
342 .description = "Enable b_float16cooperative_matrix_khr Capability.",329 .description = "Enable b_float16cooperative_matrix_khr capability",
343 .dependencies = featureSet(&[_]Feature{330 .dependencies = featureSet(&[_]Feature{
344 .SPV_KHR_bfloat16,331 .SPV_KHR_bfloat16,
345 .v1_0,332 .v1_0,
...@@ -347,7 +334,7 @@ pub const all_features = blk: {...@@ -347,7 +334,7 @@ pub const all_features = blk: {
347 };334 };
348 result[@intFromEnum(Feature.b_float16dot_product_khr)] = .{335 result[@intFromEnum(Feature.b_float16dot_product_khr)] = .{
349 .llvm_name = null,336 .llvm_name = null,
350 .description = "Enable b_float16dot_product_khr Capability.",337 .description = "Enable b_float16dot_product_khr capability",
351 .dependencies = featureSet(&[_]Feature{338 .dependencies = featureSet(&[_]Feature{
352 .SPV_KHR_bfloat16,339 .SPV_KHR_bfloat16,
353 .v1_0,340 .v1_0,
...@@ -355,7 +342,7 @@ pub const all_features = blk: {...@@ -355,7 +342,7 @@ pub const all_features = blk: {
355 };342 };
356 result[@intFromEnum(Feature.b_float16type_khr)] = .{343 result[@intFromEnum(Feature.b_float16type_khr)] = .{
357 .llvm_name = null,344 .llvm_name = null,
358 .description = "Enable b_float16type_khr Capability.",345 .description = "Enable b_float16type_khr capability",
359 .dependencies = featureSet(&[_]Feature{346 .dependencies = featureSet(&[_]Feature{
360 .SPV_KHR_bfloat16,347 .SPV_KHR_bfloat16,
361 .v1_0,348 .v1_0,
...@@ -363,7 +350,7 @@ pub const all_features = blk: {...@@ -363,7 +350,7 @@ pub const all_features = blk: {
363 };350 };
364 result[@intFromEnum(Feature.bit_instructions)] = .{351 result[@intFromEnum(Feature.bit_instructions)] = .{
365 .llvm_name = null,352 .llvm_name = null,
366 .description = "Enable bit_instructions Capability.",353 .description = "Enable bit_instructions capability",
367 .dependencies = featureSet(&[_]Feature{354 .dependencies = featureSet(&[_]Feature{
368 .SPV_KHR_bit_instructions,355 .SPV_KHR_bit_instructions,
369 .v1_0,356 .v1_0,
...@@ -371,14 +358,14 @@ pub const all_features = blk: {...@@ -371,14 +358,14 @@ pub const all_features = blk: {
371 };358 };
372 result[@intFromEnum(Feature.clip_distance)] = .{359 result[@intFromEnum(Feature.clip_distance)] = .{
373 .llvm_name = null,360 .llvm_name = null,
374 .description = "Enable clip_distance Capability.",361 .description = "Enable clip_distance capability",
375 .dependencies = featureSet(&[_]Feature{362 .dependencies = featureSet(&[_]Feature{
376 .v1_0,363 .v1_0,
377 }),364 }),
378 };365 };
379 result[@intFromEnum(Feature.compute_derivative_group_linear_khr)] = .{366 result[@intFromEnum(Feature.compute_derivative_group_linear_khr)] = .{
380 .llvm_name = null,367 .llvm_name = null,
381 .description = "Enable compute_derivative_group_linear_khr Capability.",368 .description = "Enable compute_derivative_group_linear_khr capability",
382 .dependencies = featureSet(&[_]Feature{369 .dependencies = featureSet(&[_]Feature{
383 .SPV_KHR_compute_shader_derivatives,370 .SPV_KHR_compute_shader_derivatives,
384 .v1_0,371 .v1_0,
...@@ -386,7 +373,7 @@ pub const all_features = blk: {...@@ -386,7 +373,7 @@ pub const all_features = blk: {
386 };373 };
387 result[@intFromEnum(Feature.compute_derivative_group_quads_khr)] = .{374 result[@intFromEnum(Feature.compute_derivative_group_quads_khr)] = .{
388 .llvm_name = null,375 .llvm_name = null,
389 .description = "Enable compute_derivative_group_quads_khr Capability.",376 .description = "Enable compute_derivative_group_quads_khr capability",
390 .dependencies = featureSet(&[_]Feature{377 .dependencies = featureSet(&[_]Feature{
391 .SPV_KHR_compute_shader_derivatives,378 .SPV_KHR_compute_shader_derivatives,
392 .v1_0,379 .v1_0,
...@@ -394,7 +381,7 @@ pub const all_features = blk: {...@@ -394,7 +381,7 @@ pub const all_features = blk: {
394 };381 };
395 result[@intFromEnum(Feature.constant_data_khr)] = .{382 result[@intFromEnum(Feature.constant_data_khr)] = .{
396 .llvm_name = null,383 .llvm_name = null,
397 .description = "Enable constant_data_khr Capability.",384 .description = "Enable constant_data_khr capability",
398 .dependencies = featureSet(&[_]Feature{385 .dependencies = featureSet(&[_]Feature{
399 .SPV_KHR_constant_data,386 .SPV_KHR_constant_data,
400 .v1_0,387 .v1_0,
...@@ -402,7 +389,7 @@ pub const all_features = blk: {...@@ -402,7 +389,7 @@ pub const all_features = blk: {
402 };389 };
403 result[@intFromEnum(Feature.cooperative_matrix_khr)] = .{390 result[@intFromEnum(Feature.cooperative_matrix_khr)] = .{
404 .llvm_name = null,391 .llvm_name = null,
405 .description = "Enable cooperative_matrix_khr Capability.",392 .description = "Enable cooperative_matrix_khr capability",
406 .dependencies = featureSet(&[_]Feature{393 .dependencies = featureSet(&[_]Feature{
407 .SPV_KHR_cooperative_matrix,394 .SPV_KHR_cooperative_matrix,
408 .v1_0,395 .v1_0,
...@@ -410,14 +397,14 @@ pub const all_features = blk: {...@@ -410,14 +397,14 @@ pub const all_features = blk: {
410 };397 };
411 result[@intFromEnum(Feature.cull_distance)] = .{398 result[@intFromEnum(Feature.cull_distance)] = .{
412 .llvm_name = null,399 .llvm_name = null,
413 .description = "Enable cull_distance Capability.",400 .description = "Enable cull_distance capability",
414 .dependencies = featureSet(&[_]Feature{401 .dependencies = featureSet(&[_]Feature{
415 .v1_0,402 .v1_0,
416 }),403 }),
417 };404 };
418 result[@intFromEnum(Feature.demote_to_helper_invocation)] = .{405 result[@intFromEnum(Feature.demote_to_helper_invocation)] = .{
419 .llvm_name = null,406 .llvm_name = null,
420 .description = "Enable demote_to_helper_invocation Capability.",407 .description = "Enable demote_to_helper_invocation capability",
421 .dependencies = featureSet(&[_]Feature{408 .dependencies = featureSet(&[_]Feature{
422 .SPV_EXT_demote_to_helper_invocation,409 .SPV_EXT_demote_to_helper_invocation,
423 .v1_6,410 .v1_6,
...@@ -425,7 +412,7 @@ pub const all_features = blk: {...@@ -425,7 +412,7 @@ pub const all_features = blk: {
425 };412 };
426 result[@intFromEnum(Feature.denorm_flush_to_zero)] = .{413 result[@intFromEnum(Feature.denorm_flush_to_zero)] = .{
427 .llvm_name = null,414 .llvm_name = null,
428 .description = "Enable denorm_flush_to_zero Capability.",415 .description = "Enable denorm_flush_to_zero capability",
429 .dependencies = featureSet(&[_]Feature{416 .dependencies = featureSet(&[_]Feature{
430 .SPV_KHR_float_controls,417 .SPV_KHR_float_controls,
431 .v1_4,418 .v1_4,
...@@ -433,7 +420,7 @@ pub const all_features = blk: {...@@ -433,7 +420,7 @@ pub const all_features = blk: {
433 };420 };
434 result[@intFromEnum(Feature.denorm_preserve)] = .{421 result[@intFromEnum(Feature.denorm_preserve)] = .{
435 .llvm_name = null,422 .llvm_name = null,
436 .description = "Enable denorm_preserve Capability.",423 .description = "Enable denorm_preserve capability",
437 .dependencies = featureSet(&[_]Feature{424 .dependencies = featureSet(&[_]Feature{
438 .SPV_KHR_float_controls,425 .SPV_KHR_float_controls,
439 .v1_4,426 .v1_4,
...@@ -441,14 +428,14 @@ pub const all_features = blk: {...@@ -441,14 +428,14 @@ pub const all_features = blk: {
441 };428 };
442 result[@intFromEnum(Feature.derivative_control)] = .{429 result[@intFromEnum(Feature.derivative_control)] = .{
443 .llvm_name = null,430 .llvm_name = null,
444 .description = "Enable derivative_control Capability.",431 .description = "Enable derivative_control capability",
445 .dependencies = featureSet(&[_]Feature{432 .dependencies = featureSet(&[_]Feature{
446 .v1_0,433 .v1_0,
447 }),434 }),
448 };435 };
449 result[@intFromEnum(Feature.descriptor_heap_ext)] = .{436 result[@intFromEnum(Feature.descriptor_heap_ext)] = .{
450 .llvm_name = null,437 .llvm_name = null,
451 .description = "Enable descriptor_heap_ext Capability.",438 .description = "Enable descriptor_heap_ext capability",
452 .dependencies = featureSet(&[_]Feature{439 .dependencies = featureSet(&[_]Feature{
453 .SPV_EXT_descriptor_heap,440 .SPV_EXT_descriptor_heap,
454 .v1_0,441 .v1_0,
...@@ -456,14 +443,14 @@ pub const all_features = blk: {...@@ -456,14 +443,14 @@ pub const all_features = blk: {
456 };443 };
457 result[@intFromEnum(Feature.device_enqueue)] = .{444 result[@intFromEnum(Feature.device_enqueue)] = .{
458 .llvm_name = null,445 .llvm_name = null,
459 .description = "Enable device_enqueue Capability.",446 .description = "Enable device_enqueue capability",
460 .dependencies = featureSet(&[_]Feature{447 .dependencies = featureSet(&[_]Feature{
461 .v1_0,448 .v1_0,
462 }),449 }),
463 };450 };
464 result[@intFromEnum(Feature.device_group)] = .{451 result[@intFromEnum(Feature.device_group)] = .{
465 .llvm_name = null,452 .llvm_name = null,
466 .description = "Enable device_group Capability.",453 .description = "Enable device_group capability",
467 .dependencies = featureSet(&[_]Feature{454 .dependencies = featureSet(&[_]Feature{
468 .SPV_KHR_device_group,455 .SPV_KHR_device_group,
469 .v1_3,456 .v1_3,
...@@ -471,7 +458,7 @@ pub const all_features = blk: {...@@ -471,7 +458,7 @@ pub const all_features = blk: {
471 };458 };
472 result[@intFromEnum(Feature.dot_product)] = .{459 result[@intFromEnum(Feature.dot_product)] = .{
473 .llvm_name = null,460 .llvm_name = null,
474 .description = "Enable dot_product Capability.",461 .description = "Enable dot_product capability",
475 .dependencies = featureSet(&[_]Feature{462 .dependencies = featureSet(&[_]Feature{
476 .SPV_KHR_integer_dot_product,463 .SPV_KHR_integer_dot_product,
477 .v1_6,464 .v1_6,
...@@ -479,7 +466,7 @@ pub const all_features = blk: {...@@ -479,7 +466,7 @@ pub const all_features = blk: {
479 };466 };
480 result[@intFromEnum(Feature.dot_product_input4x8bit)] = .{467 result[@intFromEnum(Feature.dot_product_input4x8bit)] = .{
481 .llvm_name = null,468 .llvm_name = null,
482 .description = "Enable dot_product_input4x8bit Capability.",469 .description = "Enable dot_product_input4x8bit capability",
483 .dependencies = featureSet(&[_]Feature{470 .dependencies = featureSet(&[_]Feature{
484 .SPV_KHR_integer_dot_product,471 .SPV_KHR_integer_dot_product,
485 .v1_6,472 .v1_6,
...@@ -487,7 +474,7 @@ pub const all_features = blk: {...@@ -487,7 +474,7 @@ pub const all_features = blk: {
487 };474 };
488 result[@intFromEnum(Feature.dot_product_input4x8bit_packed)] = .{475 result[@intFromEnum(Feature.dot_product_input4x8bit_packed)] = .{
489 .llvm_name = null,476 .llvm_name = null,
490 .description = "Enable dot_product_input4x8bit_packed Capability.",477 .description = "Enable dot_product_input4x8bit_packed capability",
491 .dependencies = featureSet(&[_]Feature{478 .dependencies = featureSet(&[_]Feature{
492 .SPV_KHR_integer_dot_product,479 .SPV_KHR_integer_dot_product,
493 .v1_6,480 .v1_6,
...@@ -495,7 +482,7 @@ pub const all_features = blk: {...@@ -495,7 +482,7 @@ pub const all_features = blk: {
495 };482 };
496 result[@intFromEnum(Feature.dot_product_input_all)] = .{483 result[@intFromEnum(Feature.dot_product_input_all)] = .{
497 .llvm_name = null,484 .llvm_name = null,
498 .description = "Enable dot_product_input_all Capability.",485 .description = "Enable dot_product_input_all capability",
499 .dependencies = featureSet(&[_]Feature{486 .dependencies = featureSet(&[_]Feature{
500 .SPV_KHR_integer_dot_product,487 .SPV_KHR_integer_dot_product,
501 .v1_6,488 .v1_6,
...@@ -503,7 +490,7 @@ pub const all_features = blk: {...@@ -503,7 +490,7 @@ pub const all_features = blk: {
503 };490 };
504 result[@intFromEnum(Feature.draw_parameters)] = .{491 result[@intFromEnum(Feature.draw_parameters)] = .{
505 .llvm_name = null,492 .llvm_name = null,
506 .description = "Enable draw_parameters Capability.",493 .description = "Enable draw_parameters capability",
507 .dependencies = featureSet(&[_]Feature{494 .dependencies = featureSet(&[_]Feature{
508 .SPV_KHR_shader_draw_parameters,495 .SPV_KHR_shader_draw_parameters,
509 .v1_3,496 .v1_3,
...@@ -511,7 +498,7 @@ pub const all_features = blk: {...@@ -511,7 +498,7 @@ pub const all_features = blk: {
511 };498 };
512 result[@intFromEnum(Feature.expect_assume_khr)] = .{499 result[@intFromEnum(Feature.expect_assume_khr)] = .{
513 .llvm_name = null,500 .llvm_name = null,
514 .description = "Enable expect_assume_khr Capability.",501 .description = "Enable expect_assume_khr capability",
515 .dependencies = featureSet(&[_]Feature{502 .dependencies = featureSet(&[_]Feature{
516 .SPV_KHR_expect_assume,503 .SPV_KHR_expect_assume,
517 .v1_0,504 .v1_0,
...@@ -519,28 +506,28 @@ pub const all_features = blk: {...@@ -519,28 +506,28 @@ pub const all_features = blk: {
519 };506 };
520 result[@intFromEnum(Feature.float16)] = .{507 result[@intFromEnum(Feature.float16)] = .{
521 .llvm_name = null,508 .llvm_name = null,
522 .description = "Enable float16 Capability.",509 .description = "Enable float16 capability",
523 .dependencies = featureSet(&[_]Feature{510 .dependencies = featureSet(&[_]Feature{
524 .v1_0,511 .v1_0,
525 }),512 }),
526 };513 };
527 result[@intFromEnum(Feature.float16buffer)] = .{514 result[@intFromEnum(Feature.float16buffer)] = .{
528 .llvm_name = null,515 .llvm_name = null,
529 .description = "Enable float16buffer Capability.",516 .description = "Enable float16buffer capability",
530 .dependencies = featureSet(&[_]Feature{517 .dependencies = featureSet(&[_]Feature{
531 .v1_0,518 .v1_0,
532 }),519 }),
533 };520 };
534 result[@intFromEnum(Feature.float64)] = .{521 result[@intFromEnum(Feature.float64)] = .{
535 .llvm_name = null,522 .llvm_name = null,
536 .description = "Enable float64 Capability.",523 .description = "Enable float64 capability",
537 .dependencies = featureSet(&[_]Feature{524 .dependencies = featureSet(&[_]Feature{
538 .v1_0,525 .v1_0,
539 }),526 }),
540 };527 };
541 result[@intFromEnum(Feature.float8cooperative_matrix_ext)] = .{528 result[@intFromEnum(Feature.float8cooperative_matrix_ext)] = .{
542 .llvm_name = null,529 .llvm_name = null,
543 .description = "Enable float8cooperative_matrix_ext Capability.",530 .description = "Enable float8cooperative_matrix_ext capability",
544 .dependencies = featureSet(&[_]Feature{531 .dependencies = featureSet(&[_]Feature{
545 .SPV_EXT_float8,532 .SPV_EXT_float8,
546 .v1_0,533 .v1_0,
...@@ -548,7 +535,7 @@ pub const all_features = blk: {...@@ -548,7 +535,7 @@ pub const all_features = blk: {
548 };535 };
549 result[@intFromEnum(Feature.float8ext)] = .{536 result[@intFromEnum(Feature.float8ext)] = .{
550 .llvm_name = null,537 .llvm_name = null,
551 .description = "Enable float8ext Capability.",538 .description = "Enable float8ext capability",
552 .dependencies = featureSet(&[_]Feature{539 .dependencies = featureSet(&[_]Feature{
553 .SPV_EXT_float8,540 .SPV_EXT_float8,
554 .v1_0,541 .v1_0,
...@@ -556,7 +543,7 @@ pub const all_features = blk: {...@@ -556,7 +543,7 @@ pub const all_features = blk: {
556 };543 };
557 result[@intFromEnum(Feature.float_controls2)] = .{544 result[@intFromEnum(Feature.float_controls2)] = .{
558 .llvm_name = null,545 .llvm_name = null,
559 .description = "Enable float_controls2 Capability.",546 .description = "Enable float_controls2 capability",
560 .dependencies = featureSet(&[_]Feature{547 .dependencies = featureSet(&[_]Feature{
561 .SPV_KHR_float_controls2,548 .SPV_KHR_float_controls2,
562 .v1_0,549 .v1_0,
...@@ -564,7 +551,7 @@ pub const all_features = blk: {...@@ -564,7 +551,7 @@ pub const all_features = blk: {
564 };551 };
565 result[@intFromEnum(Feature.fmakhr)] = .{552 result[@intFromEnum(Feature.fmakhr)] = .{
566 .llvm_name = null,553 .llvm_name = null,
567 .description = "Enable fmakhr Capability.",554 .description = "Enable fmakhr capability",
568 .dependencies = featureSet(&[_]Feature{555 .dependencies = featureSet(&[_]Feature{
569 .SPV_KHR_fma,556 .SPV_KHR_fma,
570 .v1_0,557 .v1_0,
...@@ -572,7 +559,7 @@ pub const all_features = blk: {...@@ -572,7 +559,7 @@ pub const all_features = blk: {
572 };559 };
573 result[@intFromEnum(Feature.fragment_barycentric_khr)] = .{560 result[@intFromEnum(Feature.fragment_barycentric_khr)] = .{
574 .llvm_name = null,561 .llvm_name = null,
575 .description = "Enable fragment_barycentric_khr Capability.",562 .description = "Enable fragment_barycentric_khr capability",
576 .dependencies = featureSet(&[_]Feature{563 .dependencies = featureSet(&[_]Feature{
577 .SPV_KHR_fragment_shader_barycentric,564 .SPV_KHR_fragment_shader_barycentric,
578 .v1_0,565 .v1_0,
...@@ -580,7 +567,7 @@ pub const all_features = blk: {...@@ -580,7 +567,7 @@ pub const all_features = blk: {
580 };567 };
581 result[@intFromEnum(Feature.fragment_density_ext)] = .{568 result[@intFromEnum(Feature.fragment_density_ext)] = .{
582 .llvm_name = null,569 .llvm_name = null,
583 .description = "Enable fragment_density_ext Capability.",570 .description = "Enable fragment_density_ext capability",
584 .dependencies = featureSet(&[_]Feature{571 .dependencies = featureSet(&[_]Feature{
585 .SPV_EXT_fragment_invocation_density,572 .SPV_EXT_fragment_invocation_density,
586 .v1_0,573 .v1_0,
...@@ -588,7 +575,7 @@ pub const all_features = blk: {...@@ -588,7 +575,7 @@ pub const all_features = blk: {
588 };575 };
589 result[@intFromEnum(Feature.fragment_fully_covered_ext)] = .{576 result[@intFromEnum(Feature.fragment_fully_covered_ext)] = .{
590 .llvm_name = null,577 .llvm_name = null,
591 .description = "Enable fragment_fully_covered_ext Capability.",578 .description = "Enable fragment_fully_covered_ext capability",
592 .dependencies = featureSet(&[_]Feature{579 .dependencies = featureSet(&[_]Feature{
593 .SPV_EXT_fragment_fully_covered,580 .SPV_EXT_fragment_fully_covered,
594 .v1_0,581 .v1_0,
...@@ -596,7 +583,7 @@ pub const all_features = blk: {...@@ -596,7 +583,7 @@ pub const all_features = blk: {
596 };583 };
597 result[@intFromEnum(Feature.fragment_shader_pixel_interlock_ext)] = .{584 result[@intFromEnum(Feature.fragment_shader_pixel_interlock_ext)] = .{
598 .llvm_name = null,585 .llvm_name = null,
599 .description = "Enable fragment_shader_pixel_interlock_ext Capability.",586 .description = "Enable fragment_shader_pixel_interlock_ext capability",
600 .dependencies = featureSet(&[_]Feature{587 .dependencies = featureSet(&[_]Feature{
601 .SPV_EXT_fragment_shader_interlock,588 .SPV_EXT_fragment_shader_interlock,
602 .v1_0,589 .v1_0,
...@@ -604,7 +591,7 @@ pub const all_features = blk: {...@@ -604,7 +591,7 @@ pub const all_features = blk: {
604 };591 };
605 result[@intFromEnum(Feature.fragment_shader_sample_interlock_ext)] = .{592 result[@intFromEnum(Feature.fragment_shader_sample_interlock_ext)] = .{
606 .llvm_name = null,593 .llvm_name = null,
607 .description = "Enable fragment_shader_sample_interlock_ext Capability.",594 .description = "Enable fragment_shader_sample_interlock_ext capability",
608 .dependencies = featureSet(&[_]Feature{595 .dependencies = featureSet(&[_]Feature{
609 .SPV_EXT_fragment_shader_interlock,596 .SPV_EXT_fragment_shader_interlock,
610 .v1_0,597 .v1_0,
...@@ -612,7 +599,7 @@ pub const all_features = blk: {...@@ -612,7 +599,7 @@ pub const all_features = blk: {
612 };599 };
613 result[@intFromEnum(Feature.fragment_shader_shading_rate_interlock_ext)] = .{600 result[@intFromEnum(Feature.fragment_shader_shading_rate_interlock_ext)] = .{
614 .llvm_name = null,601 .llvm_name = null,
615 .description = "Enable fragment_shader_shading_rate_interlock_ext Capability.",602 .description = "Enable fragment_shader_shading_rate_interlock_ext capability",
616 .dependencies = featureSet(&[_]Feature{603 .dependencies = featureSet(&[_]Feature{
617 .SPV_EXT_fragment_shader_interlock,604 .SPV_EXT_fragment_shader_interlock,
618 .v1_0,605 .v1_0,
...@@ -620,7 +607,7 @@ pub const all_features = blk: {...@@ -620,7 +607,7 @@ pub const all_features = blk: {
620 };607 };
621 result[@intFromEnum(Feature.fragment_shading_rate_khr)] = .{608 result[@intFromEnum(Feature.fragment_shading_rate_khr)] = .{
622 .llvm_name = null,609 .llvm_name = null,
623 .description = "Enable fragment_shading_rate_khr Capability.",610 .description = "Enable fragment_shading_rate_khr capability",
624 .dependencies = featureSet(&[_]Feature{611 .dependencies = featureSet(&[_]Feature{
625 .SPV_KHR_fragment_shading_rate,612 .SPV_KHR_fragment_shading_rate,
626 .v1_0,613 .v1_0,
...@@ -628,63 +615,63 @@ pub const all_features = blk: {...@@ -628,63 +615,63 @@ pub const all_features = blk: {
628 };615 };
629 result[@intFromEnum(Feature.generic_pointer)] = .{616 result[@intFromEnum(Feature.generic_pointer)] = .{
630 .llvm_name = null,617 .llvm_name = null,
631 .description = "Enable generic_pointer Capability.",618 .description = "Enable generic_pointer capability",
632 .dependencies = featureSet(&[_]Feature{619 .dependencies = featureSet(&[_]Feature{
633 .v1_0,620 .v1_0,
634 }),621 }),
635 };622 };
636 result[@intFromEnum(Feature.geometry)] = .{623 result[@intFromEnum(Feature.geometry)] = .{
637 .llvm_name = null,624 .llvm_name = null,
638 .description = "Enable geometry Capability.",625 .description = "Enable geometry capability",
639 .dependencies = featureSet(&[_]Feature{626 .dependencies = featureSet(&[_]Feature{
640 .v1_0,627 .v1_0,
641 }),628 }),
642 };629 };
643 result[@intFromEnum(Feature.geometry_point_size)] = .{630 result[@intFromEnum(Feature.geometry_point_size)] = .{
644 .llvm_name = null,631 .llvm_name = null,
645 .description = "Enable geometry_point_size Capability.",632 .description = "Enable geometry_point_size capability",
646 .dependencies = featureSet(&[_]Feature{633 .dependencies = featureSet(&[_]Feature{
647 .v1_0,634 .v1_0,
648 }),635 }),
649 };636 };
650 result[@intFromEnum(Feature.geometry_streams)] = .{637 result[@intFromEnum(Feature.geometry_streams)] = .{
651 .llvm_name = null,638 .llvm_name = null,
652 .description = "Enable geometry_streams Capability.",639 .description = "Enable geometry_streams capability",
653 .dependencies = featureSet(&[_]Feature{640 .dependencies = featureSet(&[_]Feature{
654 .v1_0,641 .v1_0,
655 }),642 }),
656 };643 };
657 result[@intFromEnum(Feature.group_non_uniform)] = .{644 result[@intFromEnum(Feature.group_non_uniform)] = .{
658 .llvm_name = null,645 .llvm_name = null,
659 .description = "Enable group_non_uniform Capability.",646 .description = "Enable group_non_uniform capability",
660 .dependencies = featureSet(&[_]Feature{647 .dependencies = featureSet(&[_]Feature{
661 .v1_3,648 .v1_3,
662 }),649 }),
663 };650 };
664 result[@intFromEnum(Feature.group_non_uniform_arithmetic)] = .{651 result[@intFromEnum(Feature.group_non_uniform_arithmetic)] = .{
665 .llvm_name = null,652 .llvm_name = null,
666 .description = "Enable group_non_uniform_arithmetic Capability.",653 .description = "Enable group_non_uniform_arithmetic capability",
667 .dependencies = featureSet(&[_]Feature{654 .dependencies = featureSet(&[_]Feature{
668 .v1_3,655 .v1_3,
669 }),656 }),
670 };657 };
671 result[@intFromEnum(Feature.group_non_uniform_ballot)] = .{658 result[@intFromEnum(Feature.group_non_uniform_ballot)] = .{
672 .llvm_name = null,659 .llvm_name = null,
673 .description = "Enable group_non_uniform_ballot Capability.",660 .description = "Enable group_non_uniform_ballot capability",
674 .dependencies = featureSet(&[_]Feature{661 .dependencies = featureSet(&[_]Feature{
675 .v1_3,662 .v1_3,
676 }),663 }),
677 };664 };
678 result[@intFromEnum(Feature.group_non_uniform_clustered)] = .{665 result[@intFromEnum(Feature.group_non_uniform_clustered)] = .{
679 .llvm_name = null,666 .llvm_name = null,
680 .description = "Enable group_non_uniform_clustered Capability.",667 .description = "Enable group_non_uniform_clustered capability",
681 .dependencies = featureSet(&[_]Feature{668 .dependencies = featureSet(&[_]Feature{
682 .v1_3,669 .v1_3,
683 }),670 }),
684 };671 };
685 result[@intFromEnum(Feature.group_non_uniform_partitioned_ext)] = .{672 result[@intFromEnum(Feature.group_non_uniform_partitioned_ext)] = .{
686 .llvm_name = null,673 .llvm_name = null,
687 .description = "Enable group_non_uniform_partitioned_ext Capability.",674 .description = "Enable group_non_uniform_partitioned_ext capability",
688 .dependencies = featureSet(&[_]Feature{675 .dependencies = featureSet(&[_]Feature{
689 .SPV_EXT_shader_subgroup_partitioned,676 .SPV_EXT_shader_subgroup_partitioned,
690 .v1_0,677 .v1_0,
...@@ -692,14 +679,14 @@ pub const all_features = blk: {...@@ -692,14 +679,14 @@ pub const all_features = blk: {
692 };679 };
693 result[@intFromEnum(Feature.group_non_uniform_quad)] = .{680 result[@intFromEnum(Feature.group_non_uniform_quad)] = .{
694 .llvm_name = null,681 .llvm_name = null,
695 .description = "Enable group_non_uniform_quad Capability.",682 .description = "Enable group_non_uniform_quad capability",
696 .dependencies = featureSet(&[_]Feature{683 .dependencies = featureSet(&[_]Feature{
697 .v1_3,684 .v1_3,
698 }),685 }),
699 };686 };
700 result[@intFromEnum(Feature.group_non_uniform_rotate_khr)] = .{687 result[@intFromEnum(Feature.group_non_uniform_rotate_khr)] = .{
701 .llvm_name = null,688 .llvm_name = null,
702 .description = "Enable group_non_uniform_rotate_khr Capability.",689 .description = "Enable group_non_uniform_rotate_khr capability",
703 .dependencies = featureSet(&[_]Feature{690 .dependencies = featureSet(&[_]Feature{
704 .SPV_KHR_subgroup_rotate,691 .SPV_KHR_subgroup_rotate,
705 .v1_0,692 .v1_0,
...@@ -707,28 +694,28 @@ pub const all_features = blk: {...@@ -707,28 +694,28 @@ pub const all_features = blk: {
707 };694 };
708 result[@intFromEnum(Feature.group_non_uniform_shuffle)] = .{695 result[@intFromEnum(Feature.group_non_uniform_shuffle)] = .{
709 .llvm_name = null,696 .llvm_name = null,
710 .description = "Enable group_non_uniform_shuffle Capability.",697 .description = "Enable group_non_uniform_shuffle capability",
711 .dependencies = featureSet(&[_]Feature{698 .dependencies = featureSet(&[_]Feature{
712 .v1_3,699 .v1_3,
713 }),700 }),
714 };701 };
715 result[@intFromEnum(Feature.group_non_uniform_shuffle_relative)] = .{702 result[@intFromEnum(Feature.group_non_uniform_shuffle_relative)] = .{
716 .llvm_name = null,703 .llvm_name = null,
717 .description = "Enable group_non_uniform_shuffle_relative Capability.",704 .description = "Enable group_non_uniform_shuffle_relative capability",
718 .dependencies = featureSet(&[_]Feature{705 .dependencies = featureSet(&[_]Feature{
719 .v1_3,706 .v1_3,
720 }),707 }),
721 };708 };
722 result[@intFromEnum(Feature.group_non_uniform_vote)] = .{709 result[@intFromEnum(Feature.group_non_uniform_vote)] = .{
723 .llvm_name = null,710 .llvm_name = null,
724 .description = "Enable group_non_uniform_vote Capability.",711 .description = "Enable group_non_uniform_vote capability",
725 .dependencies = featureSet(&[_]Feature{712 .dependencies = featureSet(&[_]Feature{
726 .v1_3,713 .v1_3,
727 }),714 }),
728 };715 };
729 result[@intFromEnum(Feature.group_uniform_arithmetic_khr)] = .{716 result[@intFromEnum(Feature.group_uniform_arithmetic_khr)] = .{
730 .llvm_name = null,717 .llvm_name = null,
731 .description = "Enable group_uniform_arithmetic_khr Capability.",718 .description = "Enable group_uniform_arithmetic_khr capability",
732 .dependencies = featureSet(&[_]Feature{719 .dependencies = featureSet(&[_]Feature{
733 .SPV_KHR_uniform_group_instructions,720 .SPV_KHR_uniform_group_instructions,
734 .v1_0,721 .v1_0,
...@@ -736,84 +723,84 @@ pub const all_features = blk: {...@@ -736,84 +723,84 @@ pub const all_features = blk: {
736 };723 };
737 result[@intFromEnum(Feature.groups)] = .{724 result[@intFromEnum(Feature.groups)] = .{
738 .llvm_name = null,725 .llvm_name = null,
739 .description = "Enable groups Capability.",726 .description = "Enable groups capability",
740 .dependencies = featureSet(&[_]Feature{727 .dependencies = featureSet(&[_]Feature{
741 .v1_0,728 .v1_0,
742 }),729 }),
743 };730 };
744 result[@intFromEnum(Feature.image_basic)] = .{731 result[@intFromEnum(Feature.image_basic)] = .{
745 .llvm_name = null,732 .llvm_name = null,
746 .description = "Enable image_basic Capability.",733 .description = "Enable image_basic capability",
747 .dependencies = featureSet(&[_]Feature{734 .dependencies = featureSet(&[_]Feature{
748 .v1_0,735 .v1_0,
749 }),736 }),
750 };737 };
751 result[@intFromEnum(Feature.image_buffer)] = .{738 result[@intFromEnum(Feature.image_buffer)] = .{
752 .llvm_name = null,739 .llvm_name = null,
753 .description = "Enable image_buffer Capability.",740 .description = "Enable image_buffer capability",
754 .dependencies = featureSet(&[_]Feature{741 .dependencies = featureSet(&[_]Feature{
755 .v1_0,742 .v1_0,
756 }),743 }),
757 };744 };
758 result[@intFromEnum(Feature.image_cube_array)] = .{745 result[@intFromEnum(Feature.image_cube_array)] = .{
759 .llvm_name = null,746 .llvm_name = null,
760 .description = "Enable image_cube_array Capability.",747 .description = "Enable image_cube_array capability",
761 .dependencies = featureSet(&[_]Feature{748 .dependencies = featureSet(&[_]Feature{
762 .v1_0,749 .v1_0,
763 }),750 }),
764 };751 };
765 result[@intFromEnum(Feature.image_gather_extended)] = .{752 result[@intFromEnum(Feature.image_gather_extended)] = .{
766 .llvm_name = null,753 .llvm_name = null,
767 .description = "Enable image_gather_extended Capability.",754 .description = "Enable image_gather_extended capability",
768 .dependencies = featureSet(&[_]Feature{755 .dependencies = featureSet(&[_]Feature{
769 .v1_0,756 .v1_0,
770 }),757 }),
771 };758 };
772 result[@intFromEnum(Feature.image_mipmap)] = .{759 result[@intFromEnum(Feature.image_mipmap)] = .{
773 .llvm_name = null,760 .llvm_name = null,
774 .description = "Enable image_mipmap Capability.",761 .description = "Enable image_mipmap capability",
775 .dependencies = featureSet(&[_]Feature{762 .dependencies = featureSet(&[_]Feature{
776 .v1_0,763 .v1_0,
777 }),764 }),
778 };765 };
779 result[@intFromEnum(Feature.image_ms_array)] = .{766 result[@intFromEnum(Feature.image_ms_array)] = .{
780 .llvm_name = null,767 .llvm_name = null,
781 .description = "Enable image_ms_array Capability.",768 .description = "Enable image_ms_array capability",
782 .dependencies = featureSet(&[_]Feature{769 .dependencies = featureSet(&[_]Feature{
783 .v1_0,770 .v1_0,
784 }),771 }),
785 };772 };
786 result[@intFromEnum(Feature.image_query)] = .{773 result[@intFromEnum(Feature.image_query)] = .{
787 .llvm_name = null,774 .llvm_name = null,
788 .description = "Enable image_query Capability.",775 .description = "Enable image_query capability",
789 .dependencies = featureSet(&[_]Feature{776 .dependencies = featureSet(&[_]Feature{
790 .v1_0,777 .v1_0,
791 }),778 }),
792 };779 };
793 result[@intFromEnum(Feature.image_read_write)] = .{780 result[@intFromEnum(Feature.image_read_write)] = .{
794 .llvm_name = null,781 .llvm_name = null,
795 .description = "Enable image_read_write Capability.",782 .description = "Enable image_read_write capability",
796 .dependencies = featureSet(&[_]Feature{783 .dependencies = featureSet(&[_]Feature{
797 .v1_0,784 .v1_0,
798 }),785 }),
799 };786 };
800 result[@intFromEnum(Feature.image_rect)] = .{787 result[@intFromEnum(Feature.image_rect)] = .{
801 .llvm_name = null,788 .llvm_name = null,
802 .description = "Enable image_rect Capability.",789 .description = "Enable image_rect capability",
803 .dependencies = featureSet(&[_]Feature{790 .dependencies = featureSet(&[_]Feature{
804 .v1_0,791 .v1_0,
805 }),792 }),
806 };793 };
807 result[@intFromEnum(Feature.input_attachment)] = .{794 result[@intFromEnum(Feature.input_attachment)] = .{
808 .llvm_name = null,795 .llvm_name = null,
809 .description = "Enable input_attachment Capability.",796 .description = "Enable input_attachment capability",
810 .dependencies = featureSet(&[_]Feature{797 .dependencies = featureSet(&[_]Feature{
811 .v1_0,798 .v1_0,
812 }),799 }),
813 };800 };
814 result[@intFromEnum(Feature.input_attachment_array_dynamic_indexing)] = .{801 result[@intFromEnum(Feature.input_attachment_array_dynamic_indexing)] = .{
815 .llvm_name = null,802 .llvm_name = null,
816 .description = "Enable input_attachment_array_dynamic_indexing Capability.",803 .description = "Enable input_attachment_array_dynamic_indexing capability",
817 .dependencies = featureSet(&[_]Feature{804 .dependencies = featureSet(&[_]Feature{
818 .SPV_EXT_descriptor_indexing,805 .SPV_EXT_descriptor_indexing,
819 .v1_5,806 .v1_5,
...@@ -821,7 +808,7 @@ pub const all_features = blk: {...@@ -821,7 +808,7 @@ pub const all_features = blk: {
821 };808 };
822 result[@intFromEnum(Feature.input_attachment_array_non_uniform_indexing)] = .{809 result[@intFromEnum(Feature.input_attachment_array_non_uniform_indexing)] = .{
823 .llvm_name = null,810 .llvm_name = null,
824 .description = "Enable input_attachment_array_non_uniform_indexing Capability.",811 .description = "Enable input_attachment_array_non_uniform_indexing capability",
825 .dependencies = featureSet(&[_]Feature{812 .dependencies = featureSet(&[_]Feature{
826 .SPV_EXT_descriptor_indexing,813 .SPV_EXT_descriptor_indexing,
827 .v1_5,814 .v1_5,
...@@ -829,28 +816,28 @@ pub const all_features = blk: {...@@ -829,28 +816,28 @@ pub const all_features = blk: {
829 };816 };
830 result[@intFromEnum(Feature.int16)] = .{817 result[@intFromEnum(Feature.int16)] = .{
831 .llvm_name = null,818 .llvm_name = null,
832 .description = "Enable int16 Capability.",819 .description = "Enable int16 capability",
833 .dependencies = featureSet(&[_]Feature{820 .dependencies = featureSet(&[_]Feature{
834 .v1_0,821 .v1_0,
835 }),822 }),
836 };823 };
837 result[@intFromEnum(Feature.int64)] = .{824 result[@intFromEnum(Feature.int64)] = .{
838 .llvm_name = null,825 .llvm_name = null,
839 .description = "Enable int64 Capability.",826 .description = "Enable int64 capability",
840 .dependencies = featureSet(&[_]Feature{827 .dependencies = featureSet(&[_]Feature{
841 .v1_0,828 .v1_0,
842 }),829 }),
843 };830 };
844 result[@intFromEnum(Feature.int64atomics)] = .{831 result[@intFromEnum(Feature.int64atomics)] = .{
845 .llvm_name = null,832 .llvm_name = null,
846 .description = "Enable int64atomics Capability.",833 .description = "Enable int64atomics capability",
847 .dependencies = featureSet(&[_]Feature{834 .dependencies = featureSet(&[_]Feature{
848 .v1_0,835 .v1_0,
849 }),836 }),
850 };837 };
851 result[@intFromEnum(Feature.int64image_ext)] = .{838 result[@intFromEnum(Feature.int64image_ext)] = .{
852 .llvm_name = null,839 .llvm_name = null,
853 .description = "Enable int64image_ext Capability.",840 .description = "Enable int64image_ext capability",
854 .dependencies = featureSet(&[_]Feature{841 .dependencies = featureSet(&[_]Feature{
855 .SPV_EXT_shader_image_int64,842 .SPV_EXT_shader_image_int64,
856 .v1_0,843 .v1_0,
...@@ -858,42 +845,28 @@ pub const all_features = blk: {...@@ -858,42 +845,28 @@ pub const all_features = blk: {
858 };845 };
859 result[@intFromEnum(Feature.int8)] = .{846 result[@intFromEnum(Feature.int8)] = .{
860 .llvm_name = null,847 .llvm_name = null,
861 .description = "Enable int8 Capability.",848 .description = "Enable int8 capability",
862 .dependencies = featureSet(&[_]Feature{849 .dependencies = featureSet(&[_]Feature{
863 .v1_0,850 .v1_0,
864 }),851 }),
865 };852 };
866 result[@intFromEnum(Feature.interpolation_function)] = .{853 result[@intFromEnum(Feature.interpolation_function)] = .{
867 .llvm_name = null,854 .llvm_name = null,
868 .description = "Enable interpolation_function Capability.",855 .description = "Enable interpolation_function capability",
869 .dependencies = featureSet(&[_]Feature{
870 .v1_0,
871 }),
872 };
873 result[@intFromEnum(Feature.kernel)] = .{
874 .llvm_name = null,
875 .description = "Enable kernel Capability.",
876 .dependencies = featureSet(&[_]Feature{
877 .v1_0,
878 }),
879 };
880 result[@intFromEnum(Feature.linkage)] = .{
881 .llvm_name = null,
882 .description = "Enable linkage Capability.",
883 .dependencies = featureSet(&[_]Feature{856 .dependencies = featureSet(&[_]Feature{
884 .v1_0,857 .v1_0,
885 }),858 }),
886 };859 };
887 result[@intFromEnum(Feature.literal_sampler)] = .{860 result[@intFromEnum(Feature.literal_sampler)] = .{
888 .llvm_name = null,861 .llvm_name = null,
889 .description = "Enable literal_sampler Capability.",862 .description = "Enable literal_sampler capability",
890 .dependencies = featureSet(&[_]Feature{863 .dependencies = featureSet(&[_]Feature{
891 .v1_0,864 .v1_0,
892 }),865 }),
893 };866 };
894 result[@intFromEnum(Feature.long_vector_ext)] = .{867 result[@intFromEnum(Feature.long_vector_ext)] = .{
895 .llvm_name = null,868 .llvm_name = null,
896 .description = "Enable long_vector_ext Capability.",869 .description = "Enable long_vector_ext capability",
897 .dependencies = featureSet(&[_]Feature{870 .dependencies = featureSet(&[_]Feature{
898 .SPV_EXT_long_vector,871 .SPV_EXT_long_vector,
899 .v1_0,872 .v1_0,
...@@ -901,14 +874,14 @@ pub const all_features = blk: {...@@ -901,14 +874,14 @@ pub const all_features = blk: {
901 };874 };
902 result[@intFromEnum(Feature.matrix)] = .{875 result[@intFromEnum(Feature.matrix)] = .{
903 .llvm_name = null,876 .llvm_name = null,
904 .description = "Enable matrix Capability.",877 .description = "Enable matrix capability",
905 .dependencies = featureSet(&[_]Feature{878 .dependencies = featureSet(&[_]Feature{
906 .v1_0,879 .v1_0,
907 }),880 }),
908 };881 };
909 result[@intFromEnum(Feature.mesh_shading_ext)] = .{882 result[@intFromEnum(Feature.mesh_shading_ext)] = .{
910 .llvm_name = null,883 .llvm_name = null,
911 .description = "Enable mesh_shading_ext Capability.",884 .description = "Enable mesh_shading_ext capability",
912 .dependencies = featureSet(&[_]Feature{885 .dependencies = featureSet(&[_]Feature{
913 .SPV_EXT_mesh_shader,886 .SPV_EXT_mesh_shader,
914 .v1_0,887 .v1_0,
...@@ -916,14 +889,14 @@ pub const all_features = blk: {...@@ -916,14 +889,14 @@ pub const all_features = blk: {
916 };889 };
917 result[@intFromEnum(Feature.min_lod)] = .{890 result[@intFromEnum(Feature.min_lod)] = .{
918 .llvm_name = null,891 .llvm_name = null,
919 .description = "Enable min_lod Capability.",892 .description = "Enable min_lod capability",
920 .dependencies = featureSet(&[_]Feature{893 .dependencies = featureSet(&[_]Feature{
921 .v1_0,894 .v1_0,
922 }),895 }),
923 };896 };
924 result[@intFromEnum(Feature.multi_view)] = .{897 result[@intFromEnum(Feature.multi_view)] = .{
925 .llvm_name = null,898 .llvm_name = null,
926 .description = "Enable multi_view Capability.",899 .description = "Enable multi_view capability",
927 .dependencies = featureSet(&[_]Feature{900 .dependencies = featureSet(&[_]Feature{
928 .SPV_KHR_multiview,901 .SPV_KHR_multiview,
929 .v1_3,902 .v1_3,
...@@ -931,52 +904,43 @@ pub const all_features = blk: {...@@ -931,52 +904,43 @@ pub const all_features = blk: {
931 };904 };
932 result[@intFromEnum(Feature.multi_viewport)] = .{905 result[@intFromEnum(Feature.multi_viewport)] = .{
933 .llvm_name = null,906 .llvm_name = null,
934 .description = "Enable multi_viewport Capability.",907 .description = "Enable multi_viewport capability",
935 .dependencies = featureSet(&[_]Feature{908 .dependencies = featureSet(&[_]Feature{
936 .v1_0,909 .v1_0,
937 }),910 }),
938 };911 };
939 result[@intFromEnum(Feature.named_barrier)] = .{912 result[@intFromEnum(Feature.named_barrier)] = .{
940 .llvm_name = null,913 .llvm_name = null,
941 .description = "Enable named_barrier Capability.",914 .description = "Enable named_barrier capability",
942 .dependencies = featureSet(&[_]Feature{915 .dependencies = featureSet(&[_]Feature{
943 .v1_1,916 .v1_1,
944 }),917 }),
945 };918 };
946 result[@intFromEnum(Feature.opt_none_ext)] = .{919 result[@intFromEnum(Feature.opt_none_ext)] = .{
947 .llvm_name = null,920 .llvm_name = null,
948 .description = "Enable opt_none_ext Capability.",921 .description = "Enable opt_none_ext capability",
949 .dependencies = featureSet(&[_]Feature{922 .dependencies = featureSet(&[_]Feature{
950 .SPV_EXT_optnone,923 .SPV_EXT_optnone,
951 .v1_0,924 .v1_0,
952 }),925 }),
953 };926 };
954 result[@intFromEnum(Feature.physical_storage_buffer_addresses)] = .{
955 .llvm_name = null,
956 .description = "Enable physical_storage_buffer_addresses Capability.",
957 .dependencies = featureSet(&[_]Feature{
958 .SPV_EXT_physical_storage_buffer,
959 .SPV_KHR_physical_storage_buffer,
960 .v1_5,
961 }),
962 };
963 result[@intFromEnum(Feature.pipe_storage)] = .{927 result[@intFromEnum(Feature.pipe_storage)] = .{
964 .llvm_name = null,928 .llvm_name = null,
965 .description = "Enable pipe_storage Capability.",929 .description = "Enable pipe_storage capability",
966 .dependencies = featureSet(&[_]Feature{930 .dependencies = featureSet(&[_]Feature{
967 .v1_1,931 .v1_1,
968 }),932 }),
969 };933 };
970 result[@intFromEnum(Feature.pipes)] = .{934 result[@intFromEnum(Feature.pipes)] = .{
971 .llvm_name = null,935 .llvm_name = null,
972 .description = "Enable pipes Capability.",936 .description = "Enable pipes capability",
973 .dependencies = featureSet(&[_]Feature{937 .dependencies = featureSet(&[_]Feature{
974 .v1_0,938 .v1_0,
975 }),939 }),
976 };940 };
977 result[@intFromEnum(Feature.poison_freeze_khr)] = .{941 result[@intFromEnum(Feature.poison_freeze_khr)] = .{
978 .llvm_name = null,942 .llvm_name = null,
979 .description = "Enable poison_freeze_khr Capability.",943 .description = "Enable poison_freeze_khr capability",
980 .dependencies = featureSet(&[_]Feature{944 .dependencies = featureSet(&[_]Feature{
981 .SPV_KHR_poison_freeze,945 .SPV_KHR_poison_freeze,
982 .v1_0,946 .v1_0,
...@@ -984,7 +948,7 @@ pub const all_features = blk: {...@@ -984,7 +948,7 @@ pub const all_features = blk: {
984 };948 };
985 result[@intFromEnum(Feature.quad_control_khr)] = .{949 result[@intFromEnum(Feature.quad_control_khr)] = .{
986 .llvm_name = null,950 .llvm_name = null,
987 .description = "Enable quad_control_khr Capability.",951 .description = "Enable quad_control_khr capability",
988 .dependencies = featureSet(&[_]Feature{952 .dependencies = featureSet(&[_]Feature{
989 .SPV_KHR_quad_control,953 .SPV_KHR_quad_control,
990 .v1_0,954 .v1_0,
...@@ -992,7 +956,7 @@ pub const all_features = blk: {...@@ -992,7 +956,7 @@ pub const all_features = blk: {
992 };956 };
993 result[@intFromEnum(Feature.ray_cull_mask_khr)] = .{957 result[@intFromEnum(Feature.ray_cull_mask_khr)] = .{
994 .llvm_name = null,958 .llvm_name = null,
995 .description = "Enable ray_cull_mask_khr Capability.",959 .description = "Enable ray_cull_mask_khr capability",
996 .dependencies = featureSet(&[_]Feature{960 .dependencies = featureSet(&[_]Feature{
997 .SPV_KHR_ray_cull_mask,961 .SPV_KHR_ray_cull_mask,
998 .v1_0,962 .v1_0,
...@@ -1000,7 +964,7 @@ pub const all_features = blk: {...@@ -1000,7 +964,7 @@ pub const all_features = blk: {
1000 };964 };
1001 result[@intFromEnum(Feature.ray_query_khr)] = .{965 result[@intFromEnum(Feature.ray_query_khr)] = .{
1002 .llvm_name = null,966 .llvm_name = null,
1003 .description = "Enable ray_query_khr Capability.",967 .description = "Enable ray_query_khr capability",
1004 .dependencies = featureSet(&[_]Feature{968 .dependencies = featureSet(&[_]Feature{
1005 .SPV_KHR_ray_query,969 .SPV_KHR_ray_query,
1006 .v1_0,970 .v1_0,
...@@ -1008,7 +972,7 @@ pub const all_features = blk: {...@@ -1008,7 +972,7 @@ pub const all_features = blk: {
1008 };972 };
1009 result[@intFromEnum(Feature.ray_query_position_fetch_khr)] = .{973 result[@intFromEnum(Feature.ray_query_position_fetch_khr)] = .{
1010 .llvm_name = null,974 .llvm_name = null,
1011 .description = "Enable ray_query_position_fetch_khr Capability.",975 .description = "Enable ray_query_position_fetch_khr capability",
1012 .dependencies = featureSet(&[_]Feature{976 .dependencies = featureSet(&[_]Feature{
1013 .SPV_KHR_ray_tracing_position_fetch,977 .SPV_KHR_ray_tracing_position_fetch,
1014 .v1_0,978 .v1_0,
...@@ -1016,7 +980,7 @@ pub const all_features = blk: {...@@ -1016,7 +980,7 @@ pub const all_features = blk: {
1016 };980 };
1017 result[@intFromEnum(Feature.ray_query_provisional_khr)] = .{981 result[@intFromEnum(Feature.ray_query_provisional_khr)] = .{
1018 .llvm_name = null,982 .llvm_name = null,
1019 .description = "Enable ray_query_provisional_khr Capability.",983 .description = "Enable ray_query_provisional_khr capability",
1020 .dependencies = featureSet(&[_]Feature{984 .dependencies = featureSet(&[_]Feature{
1021 .SPV_KHR_ray_query,985 .SPV_KHR_ray_query,
1022 .v1_0,986 .v1_0,
...@@ -1024,7 +988,7 @@ pub const all_features = blk: {...@@ -1024,7 +988,7 @@ pub const all_features = blk: {
1024 };988 };
1025 result[@intFromEnum(Feature.ray_tracing_khr)] = .{989 result[@intFromEnum(Feature.ray_tracing_khr)] = .{
1026 .llvm_name = null,990 .llvm_name = null,
1027 .description = "Enable ray_tracing_khr Capability.",991 .description = "Enable ray_tracing_khr capability",
1028 .dependencies = featureSet(&[_]Feature{992 .dependencies = featureSet(&[_]Feature{
1029 .SPV_KHR_ray_tracing,993 .SPV_KHR_ray_tracing,
1030 .v1_0,994 .v1_0,
...@@ -1032,7 +996,7 @@ pub const all_features = blk: {...@@ -1032,7 +996,7 @@ pub const all_features = blk: {
1032 };996 };
1033 result[@intFromEnum(Feature.ray_tracing_opacity_micromap_ext)] = .{997 result[@intFromEnum(Feature.ray_tracing_opacity_micromap_ext)] = .{
1034 .llvm_name = null,998 .llvm_name = null,
1035 .description = "Enable ray_tracing_opacity_micromap_ext Capability.",999 .description = "Enable ray_tracing_opacity_micromap_ext capability",
1036 .dependencies = featureSet(&[_]Feature{1000 .dependencies = featureSet(&[_]Feature{
1037 .SPV_EXT_opacity_micromap,1001 .SPV_EXT_opacity_micromap,
1038 .v1_0,1002 .v1_0,
...@@ -1040,7 +1004,7 @@ pub const all_features = blk: {...@@ -1040,7 +1004,7 @@ pub const all_features = blk: {
1040 };1004 };
1041 result[@intFromEnum(Feature.ray_tracing_position_fetch_khr)] = .{1005 result[@intFromEnum(Feature.ray_tracing_position_fetch_khr)] = .{
1042 .llvm_name = null,1006 .llvm_name = null,
1043 .description = "Enable ray_tracing_position_fetch_khr Capability.",1007 .description = "Enable ray_tracing_position_fetch_khr capability",
1044 .dependencies = featureSet(&[_]Feature{1008 .dependencies = featureSet(&[_]Feature{
1045 .SPV_KHR_ray_tracing_position_fetch,1009 .SPV_KHR_ray_tracing_position_fetch,
1046 .v1_0,1010 .v1_0,
...@@ -1048,7 +1012,7 @@ pub const all_features = blk: {...@@ -1048,7 +1012,7 @@ pub const all_features = blk: {
1048 };1012 };
1049 result[@intFromEnum(Feature.ray_tracing_provisional_khr)] = .{1013 result[@intFromEnum(Feature.ray_tracing_provisional_khr)] = .{
1050 .llvm_name = null,1014 .llvm_name = null,
1051 .description = "Enable ray_tracing_provisional_khr Capability.",1015 .description = "Enable ray_tracing_provisional_khr capability",
1052 .dependencies = featureSet(&[_]Feature{1016 .dependencies = featureSet(&[_]Feature{
1053 .SPV_KHR_ray_tracing,1017 .SPV_KHR_ray_tracing,
1054 .v1_0,1018 .v1_0,
...@@ -1056,7 +1020,7 @@ pub const all_features = blk: {...@@ -1056,7 +1020,7 @@ pub const all_features = blk: {
1056 };1020 };
1057 result[@intFromEnum(Feature.ray_traversal_primitive_culling_khr)] = .{1021 result[@intFromEnum(Feature.ray_traversal_primitive_culling_khr)] = .{
1058 .llvm_name = null,1022 .llvm_name = null,
1059 .description = "Enable ray_traversal_primitive_culling_khr Capability.",1023 .description = "Enable ray_traversal_primitive_culling_khr capability",
1060 .dependencies = featureSet(&[_]Feature{1024 .dependencies = featureSet(&[_]Feature{
1061 .SPV_KHR_ray_query,1025 .SPV_KHR_ray_query,
1062 .SPV_KHR_ray_tracing,1026 .SPV_KHR_ray_tracing,
...@@ -1065,7 +1029,7 @@ pub const all_features = blk: {...@@ -1065,7 +1029,7 @@ pub const all_features = blk: {
1065 };1029 };
1066 result[@intFromEnum(Feature.replicated_composites_ext)] = .{1030 result[@intFromEnum(Feature.replicated_composites_ext)] = .{
1067 .llvm_name = null,1031 .llvm_name = null,
1068 .description = "Enable replicated_composites_ext Capability.",1032 .description = "Enable replicated_composites_ext capability",
1069 .dependencies = featureSet(&[_]Feature{1033 .dependencies = featureSet(&[_]Feature{
1070 .SPV_EXT_replicated_composites,1034 .SPV_EXT_replicated_composites,
1071 .v1_0,1035 .v1_0,
...@@ -1073,7 +1037,7 @@ pub const all_features = blk: {...@@ -1073,7 +1037,7 @@ pub const all_features = blk: {
1073 };1037 };
1074 result[@intFromEnum(Feature.runtime_descriptor_array)] = .{1038 result[@intFromEnum(Feature.runtime_descriptor_array)] = .{
1075 .llvm_name = null,1039 .llvm_name = null,
1076 .description = "Enable runtime_descriptor_array Capability.",1040 .description = "Enable runtime_descriptor_array capability",
1077 .dependencies = featureSet(&[_]Feature{1041 .dependencies = featureSet(&[_]Feature{
1078 .SPV_EXT_descriptor_indexing,1042 .SPV_EXT_descriptor_indexing,
1079 .v1_5,1043 .v1_5,
...@@ -1081,7 +1045,7 @@ pub const all_features = blk: {...@@ -1081,7 +1045,7 @@ pub const all_features = blk: {
1081 };1045 };
1082 result[@intFromEnum(Feature.sample_mask_post_depth_coverage)] = .{1046 result[@intFromEnum(Feature.sample_mask_post_depth_coverage)] = .{
1083 .llvm_name = null,1047 .llvm_name = null,
1084 .description = "Enable sample_mask_post_depth_coverage Capability.",1048 .description = "Enable sample_mask_post_depth_coverage capability",
1085 .dependencies = featureSet(&[_]Feature{1049 .dependencies = featureSet(&[_]Feature{
1086 .SPV_KHR_post_depth_coverage,1050 .SPV_KHR_post_depth_coverage,
1087 .v1_0,1051 .v1_0,
...@@ -1089,35 +1053,35 @@ pub const all_features = blk: {...@@ -1089,35 +1053,35 @@ pub const all_features = blk: {
1089 };1053 };
1090 result[@intFromEnum(Feature.sample_rate_shading)] = .{1054 result[@intFromEnum(Feature.sample_rate_shading)] = .{
1091 .llvm_name = null,1055 .llvm_name = null,
1092 .description = "Enable sample_rate_shading Capability.",1056 .description = "Enable sample_rate_shading capability",
1093 .dependencies = featureSet(&[_]Feature{1057 .dependencies = featureSet(&[_]Feature{
1094 .v1_0,1058 .v1_0,
1095 }),1059 }),
1096 };1060 };
1097 result[@intFromEnum(Feature.sampled_buffer)] = .{1061 result[@intFromEnum(Feature.sampled_buffer)] = .{
1098 .llvm_name = null,1062 .llvm_name = null,
1099 .description = "Enable sampled_buffer Capability.",1063 .description = "Enable sampled_buffer capability",
1100 .dependencies = featureSet(&[_]Feature{1064 .dependencies = featureSet(&[_]Feature{
1101 .v1_0,1065 .v1_0,
1102 }),1066 }),
1103 };1067 };
1104 result[@intFromEnum(Feature.sampled_cube_array)] = .{1068 result[@intFromEnum(Feature.sampled_cube_array)] = .{
1105 .llvm_name = null,1069 .llvm_name = null,
1106 .description = "Enable sampled_cube_array Capability.",1070 .description = "Enable sampled_cube_array capability",
1107 .dependencies = featureSet(&[_]Feature{1071 .dependencies = featureSet(&[_]Feature{
1108 .v1_0,1072 .v1_0,
1109 }),1073 }),
1110 };1074 };
1111 result[@intFromEnum(Feature.sampled_image_array_dynamic_indexing)] = .{1075 result[@intFromEnum(Feature.sampled_image_array_dynamic_indexing)] = .{
1112 .llvm_name = null,1076 .llvm_name = null,
1113 .description = "Enable sampled_image_array_dynamic_indexing Capability.",1077 .description = "Enable sampled_image_array_dynamic_indexing capability",
1114 .dependencies = featureSet(&[_]Feature{1078 .dependencies = featureSet(&[_]Feature{
1115 .v1_0,1079 .v1_0,
1116 }),1080 }),
1117 };1081 };
1118 result[@intFromEnum(Feature.sampled_image_array_non_uniform_indexing)] = .{1082 result[@intFromEnum(Feature.sampled_image_array_non_uniform_indexing)] = .{
1119 .llvm_name = null,1083 .llvm_name = null,
1120 .description = "Enable sampled_image_array_non_uniform_indexing Capability.",1084 .description = "Enable sampled_image_array_non_uniform_indexing capability",
1121 .dependencies = featureSet(&[_]Feature{1085 .dependencies = featureSet(&[_]Feature{
1122 .SPV_EXT_descriptor_indexing,1086 .SPV_EXT_descriptor_indexing,
1123 .v1_5,1087 .v1_5,
...@@ -1125,21 +1089,14 @@ pub const all_features = blk: {...@@ -1125,21 +1089,14 @@ pub const all_features = blk: {
1125 };1089 };
1126 result[@intFromEnum(Feature.sampled_rect)] = .{1090 result[@intFromEnum(Feature.sampled_rect)] = .{
1127 .llvm_name = null,1091 .llvm_name = null,
1128 .description = "Enable sampled_rect Capability.",1092 .description = "Enable sampled_rect capability",
1129 .dependencies = featureSet(&[_]Feature{
1130 .v1_0,
1131 }),
1132 };
1133 result[@intFromEnum(Feature.shader)] = .{
1134 .llvm_name = null,
1135 .description = "Enable shader Capability.",
1136 .dependencies = featureSet(&[_]Feature{1093 .dependencies = featureSet(&[_]Feature{
1137 .v1_0,1094 .v1_0,
1138 }),1095 }),
1139 };1096 };
1140 result[@intFromEnum(Feature.shader64bit_indexing_ext)] = .{1097 result[@intFromEnum(Feature.shader64bit_indexing_ext)] = .{
1141 .llvm_name = null,1098 .llvm_name = null,
1142 .description = "Enable shader64bit_indexing_ext Capability.",1099 .description = "Enable shader64bit_indexing_ext capability",
1143 .dependencies = featureSet(&[_]Feature{1100 .dependencies = featureSet(&[_]Feature{
1144 .SPV_EXT_shader_64bit_indexing,1101 .SPV_EXT_shader_64bit_indexing,
1145 .v1_0,1102 .v1_0,
...@@ -1147,7 +1104,7 @@ pub const all_features = blk: {...@@ -1147,7 +1104,7 @@ pub const all_features = blk: {
1147 };1104 };
1148 result[@intFromEnum(Feature.shader_clock_khr)] = .{1105 result[@intFromEnum(Feature.shader_clock_khr)] = .{
1149 .llvm_name = null,1106 .llvm_name = null,
1150 .description = "Enable shader_clock_khr Capability.",1107 .description = "Enable shader_clock_khr capability",
1151 .dependencies = featureSet(&[_]Feature{1108 .dependencies = featureSet(&[_]Feature{
1152 .SPV_KHR_shader_clock,1109 .SPV_KHR_shader_clock,
1153 .v1_0,1110 .v1_0,
...@@ -1155,7 +1112,7 @@ pub const all_features = blk: {...@@ -1155,7 +1112,7 @@ pub const all_features = blk: {
1155 };1112 };
1156 result[@intFromEnum(Feature.shader_invocation_reorder_ext)] = .{1113 result[@intFromEnum(Feature.shader_invocation_reorder_ext)] = .{
1157 .llvm_name = null,1114 .llvm_name = null,
1158 .description = "Enable shader_invocation_reorder_ext Capability.",1115 .description = "Enable shader_invocation_reorder_ext capability",
1159 .dependencies = featureSet(&[_]Feature{1116 .dependencies = featureSet(&[_]Feature{
1160 .SPV_EXT_shader_invocation_reorder,1117 .SPV_EXT_shader_invocation_reorder,
1161 .v1_0,1118 .v1_0,
...@@ -1163,14 +1120,14 @@ pub const all_features = blk: {...@@ -1163,14 +1120,14 @@ pub const all_features = blk: {
1163 };1120 };
1164 result[@intFromEnum(Feature.shader_layer)] = .{1121 result[@intFromEnum(Feature.shader_layer)] = .{
1165 .llvm_name = null,1122 .llvm_name = null,
1166 .description = "Enable shader_layer Capability.",1123 .description = "Enable shader_layer capability",
1167 .dependencies = featureSet(&[_]Feature{1124 .dependencies = featureSet(&[_]Feature{
1168 .v1_5,1125 .v1_5,
1169 }),1126 }),
1170 };1127 };
1171 result[@intFromEnum(Feature.shader_non_uniform)] = .{1128 result[@intFromEnum(Feature.shader_non_uniform)] = .{
1172 .llvm_name = null,1129 .llvm_name = null,
1173 .description = "Enable shader_non_uniform Capability.",1130 .description = "Enable shader_non_uniform capability",
1174 .dependencies = featureSet(&[_]Feature{1131 .dependencies = featureSet(&[_]Feature{
1175 .SPV_EXT_descriptor_indexing,1132 .SPV_EXT_descriptor_indexing,
1176 .v1_5,1133 .v1_5,
...@@ -1178,14 +1135,14 @@ pub const all_features = blk: {...@@ -1178,14 +1135,14 @@ pub const all_features = blk: {
1178 };1135 };
1179 result[@intFromEnum(Feature.shader_viewport_index)] = .{1136 result[@intFromEnum(Feature.shader_viewport_index)] = .{
1180 .llvm_name = null,1137 .llvm_name = null,
1181 .description = "Enable shader_viewport_index Capability.",1138 .description = "Enable shader_viewport_index capability",
1182 .dependencies = featureSet(&[_]Feature{1139 .dependencies = featureSet(&[_]Feature{
1183 .v1_5,1140 .v1_5,
1184 }),1141 }),
1185 };1142 };
1186 result[@intFromEnum(Feature.shader_viewport_index_layer_ext)] = .{1143 result[@intFromEnum(Feature.shader_viewport_index_layer_ext)] = .{
1187 .llvm_name = null,1144 .llvm_name = null,
1188 .description = "Enable shader_viewport_index_layer_ext Capability.",1145 .description = "Enable shader_viewport_index_layer_ext capability",
1189 .dependencies = featureSet(&[_]Feature{1146 .dependencies = featureSet(&[_]Feature{
1190 .SPV_EXT_shader_viewport_index_layer,1147 .SPV_EXT_shader_viewport_index_layer,
1191 .v1_0,1148 .v1_0,
...@@ -1193,7 +1150,7 @@ pub const all_features = blk: {...@@ -1193,7 +1150,7 @@ pub const all_features = blk: {
1193 };1150 };
1194 result[@intFromEnum(Feature.signed_zero_inf_nan_preserve)] = .{1151 result[@intFromEnum(Feature.signed_zero_inf_nan_preserve)] = .{
1195 .llvm_name = null,1152 .llvm_name = null,
1196 .description = "Enable signed_zero_inf_nan_preserve Capability.",1153 .description = "Enable signed_zero_inf_nan_preserve capability",
1197 .dependencies = featureSet(&[_]Feature{1154 .dependencies = featureSet(&[_]Feature{
1198 .SPV_KHR_float_controls,1155 .SPV_KHR_float_controls,
1199 .v1_4,1156 .v1_4,
...@@ -1201,314 +1158,309 @@ pub const all_features = blk: {...@@ -1201,314 +1158,309 @@ pub const all_features = blk: {
1201 };1158 };
1202 result[@intFromEnum(Feature.sparse_residency)] = .{1159 result[@intFromEnum(Feature.sparse_residency)] = .{
1203 .llvm_name = null,1160 .llvm_name = null,
1204 .description = "Enable sparse_residency Capability.",1161 .description = "Enable sparse_residency capability",
1205 .dependencies = featureSet(&[_]Feature{1162 .dependencies = featureSet(&[_]Feature{
1206 .v1_0,1163 .v1_0,
1207 }),1164 }),
1208 };1165 };
1209 result[@intFromEnum(Feature.SPV_EXT_arithmetic_fence)] = .{1166 result[@intFromEnum(Feature.SPV_EXT_arithmetic_fence)] = .{
1210 .llvm_name = null,1167 .llvm_name = null,
1211 .description = "Enable SPV_EXT_arithmetic_fence Extension.",1168 .description = "Enable SPV_EXT_arithmetic_fence extension",
1212 .dependencies = featureSet(&[_]Feature{}),1169 .dependencies = featureSet(&[_]Feature{}),
1213 };1170 };
1214 result[@intFromEnum(Feature.SPV_EXT_demote_to_helper_invocation)] = .{1171 result[@intFromEnum(Feature.SPV_EXT_demote_to_helper_invocation)] = .{
1215 .llvm_name = null,1172 .llvm_name = null,
1216 .description = "Enable SPV_EXT_demote_to_helper_invocation Extension.",1173 .description = "Enable SPV_EXT_demote_to_helper_invocation extension",
1217 .dependencies = featureSet(&[_]Feature{}),1174 .dependencies = featureSet(&[_]Feature{}),
1218 };1175 };
1219 result[@intFromEnum(Feature.SPV_EXT_descriptor_heap)] = .{1176 result[@intFromEnum(Feature.SPV_EXT_descriptor_heap)] = .{
1220 .llvm_name = null,1177 .llvm_name = null,
1221 .description = "Enable SPV_EXT_descriptor_heap Extension.",1178 .description = "Enable SPV_EXT_descriptor_heap extension",
1222 .dependencies = featureSet(&[_]Feature{}),1179 .dependencies = featureSet(&[_]Feature{}),
1223 };1180 };
1224 result[@intFromEnum(Feature.SPV_EXT_descriptor_indexing)] = .{1181 result[@intFromEnum(Feature.SPV_EXT_descriptor_indexing)] = .{
1225 .llvm_name = null,1182 .llvm_name = null,
1226 .description = "Enable SPV_EXT_descriptor_indexing Extension.",1183 .description = "Enable SPV_EXT_descriptor_indexing extension",
1227 .dependencies = featureSet(&[_]Feature{}),1184 .dependencies = featureSet(&[_]Feature{}),
1228 };1185 };
1229 result[@intFromEnum(Feature.SPV_EXT_float8)] = .{1186 result[@intFromEnum(Feature.SPV_EXT_float8)] = .{
1230 .llvm_name = null,1187 .llvm_name = null,
1231 .description = "Enable SPV_EXT_float8 Extension.",1188 .description = "Enable SPV_EXT_float8 extension",
1232 .dependencies = featureSet(&[_]Feature{}),1189 .dependencies = featureSet(&[_]Feature{}),
1233 };1190 };
1234 result[@intFromEnum(Feature.SPV_EXT_fragment_fully_covered)] = .{1191 result[@intFromEnum(Feature.SPV_EXT_fragment_fully_covered)] = .{
1235 .llvm_name = null,1192 .llvm_name = null,
1236 .description = "Enable SPV_EXT_fragment_fully_covered Extension.",1193 .description = "Enable SPV_EXT_fragment_fully_covered extension",
1237 .dependencies = featureSet(&[_]Feature{}),1194 .dependencies = featureSet(&[_]Feature{}),
1238 };1195 };
1239 result[@intFromEnum(Feature.SPV_EXT_fragment_invocation_density)] = .{1196 result[@intFromEnum(Feature.SPV_EXT_fragment_invocation_density)] = .{
1240 .llvm_name = null,1197 .llvm_name = null,
1241 .description = "Enable SPV_EXT_fragment_invocation_density Extension.",1198 .description = "Enable SPV_EXT_fragment_invocation_density extension",
1242 .dependencies = featureSet(&[_]Feature{}),1199 .dependencies = featureSet(&[_]Feature{}),
1243 };1200 };
1244 result[@intFromEnum(Feature.SPV_EXT_fragment_shader_interlock)] = .{1201 result[@intFromEnum(Feature.SPV_EXT_fragment_shader_interlock)] = .{
1245 .llvm_name = null,1202 .llvm_name = null,
1246 .description = "Enable SPV_EXT_fragment_shader_interlock Extension.",1203 .description = "Enable SPV_EXT_fragment_shader_interlock extension",
1247 .dependencies = featureSet(&[_]Feature{}),1204 .dependencies = featureSet(&[_]Feature{}),
1248 };1205 };
1249 result[@intFromEnum(Feature.SPV_EXT_long_vector)] = .{1206 result[@intFromEnum(Feature.SPV_EXT_long_vector)] = .{
1250 .llvm_name = null,1207 .llvm_name = null,
1251 .description = "Enable SPV_EXT_long_vector Extension.",1208 .description = "Enable SPV_EXT_long_vector extension",
1252 .dependencies = featureSet(&[_]Feature{}),1209 .dependencies = featureSet(&[_]Feature{}),
1253 };1210 };
1254 result[@intFromEnum(Feature.SPV_EXT_mesh_shader)] = .{1211 result[@intFromEnum(Feature.SPV_EXT_mesh_shader)] = .{
1255 .llvm_name = null,1212 .llvm_name = null,
1256 .description = "Enable SPV_EXT_mesh_shader Extension.",1213 .description = "Enable SPV_EXT_mesh_shader extension",
1257 .dependencies = featureSet(&[_]Feature{}),1214 .dependencies = featureSet(&[_]Feature{}),
1258 };1215 };
1259 result[@intFromEnum(Feature.SPV_EXT_opacity_micromap)] = .{1216 result[@intFromEnum(Feature.SPV_EXT_opacity_micromap)] = .{
1260 .llvm_name = null,1217 .llvm_name = null,
1261 .description = "Enable SPV_EXT_opacity_micromap Extension.",1218 .description = "Enable SPV_EXT_opacity_micromap extension",
1262 .dependencies = featureSet(&[_]Feature{}),1219 .dependencies = featureSet(&[_]Feature{}),
1263 };1220 };
1264 result[@intFromEnum(Feature.SPV_EXT_optnone)] = .{1221 result[@intFromEnum(Feature.SPV_EXT_optnone)] = .{
1265 .llvm_name = null,1222 .llvm_name = null,
1266 .description = "Enable SPV_EXT_optnone Extension.",1223 .description = "Enable SPV_EXT_optnone extension",
1267 .dependencies = featureSet(&[_]Feature{}),1224 .dependencies = featureSet(&[_]Feature{}),
1268 };1225 };
1269 result[@intFromEnum(Feature.SPV_EXT_physical_storage_buffer)] = .{1226 result[@intFromEnum(Feature.SPV_EXT_physical_storage_buffer)] = .{
1270 .llvm_name = null,1227 .llvm_name = null,
1271 .description = "Enable SPV_EXT_physical_storage_buffer Extension.",1228 .description = "Enable SPV_EXT_physical_storage_buffer extension",
1272 .dependencies = featureSet(&[_]Feature{}),1229 .dependencies = featureSet(&[_]Feature{}),
1273 };1230 };
1274 result[@intFromEnum(Feature.SPV_EXT_replicated_composites)] = .{1231 result[@intFromEnum(Feature.SPV_EXT_replicated_composites)] = .{
1275 .llvm_name = null,1232 .llvm_name = null,
1276 .description = "Enable SPV_EXT_replicated_composites Extension.",1233 .description = "Enable SPV_EXT_replicated_composites extension",
1277 .dependencies = featureSet(&[_]Feature{}),1234 .dependencies = featureSet(&[_]Feature{}),
1278 };1235 };
1279 result[@intFromEnum(Feature.SPV_EXT_shader_64bit_indexing)] = .{1236 result[@intFromEnum(Feature.SPV_EXT_shader_64bit_indexing)] = .{
1280 .llvm_name = null,1237 .llvm_name = null,
1281 .description = "Enable SPV_EXT_shader_64bit_indexing Extension.",1238 .description = "Enable SPV_EXT_shader_64bit_indexing extension",
1282 .dependencies = featureSet(&[_]Feature{}),1239 .dependencies = featureSet(&[_]Feature{}),
1283 };1240 };
1284 result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float16_add)] = .{1241 result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float16_add)] = .{
1285 .llvm_name = null,1242 .llvm_name = null,
1286 .description = "Enable SPV_EXT_shader_atomic_float16_add Extension.",1243 .description = "Enable SPV_EXT_shader_atomic_float16_add extension",
1287 .dependencies = featureSet(&[_]Feature{}),1244 .dependencies = featureSet(&[_]Feature{}),
1288 };1245 };
1289 result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float_add)] = .{1246 result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float_add)] = .{
1290 .llvm_name = null,1247 .llvm_name = null,
1291 .description = "Enable SPV_EXT_shader_atomic_float_add Extension.",1248 .description = "Enable SPV_EXT_shader_atomic_float_add extension",
1292 .dependencies = featureSet(&[_]Feature{}),1249 .dependencies = featureSet(&[_]Feature{}),
1293 };1250 };
1294 result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float_min_max)] = .{1251 result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float_min_max)] = .{
1295 .llvm_name = null,1252 .llvm_name = null,
1296 .description = "Enable SPV_EXT_shader_atomic_float_min_max Extension.",1253 .description = "Enable SPV_EXT_shader_atomic_float_min_max extension",
1297 .dependencies = featureSet(&[_]Feature{}),1254 .dependencies = featureSet(&[_]Feature{}),
1298 };1255 };
1299 result[@intFromEnum(Feature.SPV_EXT_shader_image_int64)] = .{1256 result[@intFromEnum(Feature.SPV_EXT_shader_image_int64)] = .{
1300 .llvm_name = null,1257 .llvm_name = null,
1301 .description = "Enable SPV_EXT_shader_image_int64 Extension.",1258 .description = "Enable SPV_EXT_shader_image_int64 extension",
1302 .dependencies = featureSet(&[_]Feature{}),1259 .dependencies = featureSet(&[_]Feature{}),
1303 };1260 };
1304 result[@intFromEnum(Feature.SPV_EXT_shader_invocation_reorder)] = .{1261 result[@intFromEnum(Feature.SPV_EXT_shader_invocation_reorder)] = .{
1305 .llvm_name = null,1262 .llvm_name = null,
1306 .description = "Enable SPV_EXT_shader_invocation_reorder Extension.",1263 .description = "Enable SPV_EXT_shader_invocation_reorder extension",
1307 .dependencies = featureSet(&[_]Feature{}),1264 .dependencies = featureSet(&[_]Feature{}),
1308 };1265 };
1309 result[@intFromEnum(Feature.SPV_EXT_shader_stencil_export)] = .{1266 result[@intFromEnum(Feature.SPV_EXT_shader_stencil_export)] = .{
1310 .llvm_name = null,1267 .llvm_name = null,
1311 .description = "Enable SPV_EXT_shader_stencil_export Extension.",1268 .description = "Enable SPV_EXT_shader_stencil_export extension",
1312 .dependencies = featureSet(&[_]Feature{}),1269 .dependencies = featureSet(&[_]Feature{}),
1313 };1270 };
1314 result[@intFromEnum(Feature.SPV_EXT_shader_subgroup_partitioned)] = .{1271 result[@intFromEnum(Feature.SPV_EXT_shader_subgroup_partitioned)] = .{
1315 .llvm_name = null,1272 .llvm_name = null,
1316 .description = "Enable SPV_EXT_shader_subgroup_partitioned Extension.",1273 .description = "Enable SPV_EXT_shader_subgroup_partitioned extension",
1317 .dependencies = featureSet(&[_]Feature{}),1274 .dependencies = featureSet(&[_]Feature{}),
1318 };1275 };
1319 result[@intFromEnum(Feature.SPV_EXT_shader_tile_image)] = .{1276 result[@intFromEnum(Feature.SPV_EXT_shader_tile_image)] = .{
1320 .llvm_name = null,1277 .llvm_name = null,
1321 .description = "Enable SPV_EXT_shader_tile_image Extension.",1278 .description = "Enable SPV_EXT_shader_tile_image extension",
1322 .dependencies = featureSet(&[_]Feature{}),1279 .dependencies = featureSet(&[_]Feature{}),
1323 };1280 };
1324 result[@intFromEnum(Feature.SPV_EXT_shader_viewport_index_layer)] = .{1281 result[@intFromEnum(Feature.SPV_EXT_shader_viewport_index_layer)] = .{
1325 .llvm_name = null,1282 .llvm_name = null,
1326 .description = "Enable SPV_EXT_shader_viewport_index_layer Extension.",1283 .description = "Enable SPV_EXT_shader_viewport_index_layer extension",
1327 .dependencies = featureSet(&[_]Feature{}),1284 .dependencies = featureSet(&[_]Feature{}),
1328 };1285 };
1329 result[@intFromEnum(Feature.SPV_KHR_16bit_storage)] = .{1286 result[@intFromEnum(Feature.SPV_KHR_16bit_storage)] = .{
1330 .llvm_name = null,1287 .llvm_name = null,
1331 .description = "Enable SPV_KHR_16bit_storage Extension.",1288 .description = "Enable SPV_KHR_16bit_storage extension",
1332 .dependencies = featureSet(&[_]Feature{}),1289 .dependencies = featureSet(&[_]Feature{}),
1333 };1290 };
1334 result[@intFromEnum(Feature.SPV_KHR_8bit_storage)] = .{1291 result[@intFromEnum(Feature.SPV_KHR_8bit_storage)] = .{
1335 .llvm_name = null,1292 .llvm_name = null,
1336 .description = "Enable SPV_KHR_8bit_storage Extension.",1293 .description = "Enable SPV_KHR_8bit_storage extension",
1337 .dependencies = featureSet(&[_]Feature{}),1294 .dependencies = featureSet(&[_]Feature{}),
1338 };1295 };
1339 result[@intFromEnum(Feature.SPV_KHR_abort)] = .{1296 result[@intFromEnum(Feature.SPV_KHR_abort)] = .{
1340 .llvm_name = null,1297 .llvm_name = null,
1341 .description = "Enable SPV_KHR_abort Extension.",1298 .description = "Enable SPV_KHR_abort extension",
1342 .dependencies = featureSet(&[_]Feature{}),1299 .dependencies = featureSet(&[_]Feature{}),
1343 };1300 };
1344 result[@intFromEnum(Feature.SPV_KHR_bfloat16)] = .{1301 result[@intFromEnum(Feature.SPV_KHR_bfloat16)] = .{
1345 .llvm_name = null,1302 .llvm_name = null,
1346 .description = "Enable SPV_KHR_bfloat16 Extension.",1303 .description = "Enable SPV_KHR_bfloat16 extension",
1347 .dependencies = featureSet(&[_]Feature{}),1304 .dependencies = featureSet(&[_]Feature{}),
1348 };1305 };
1349 result[@intFromEnum(Feature.SPV_KHR_bit_instructions)] = .{1306 result[@intFromEnum(Feature.SPV_KHR_bit_instructions)] = .{
1350 .llvm_name = null,1307 .llvm_name = null,
1351 .description = "Enable SPV_KHR_bit_instructions Extension.",1308 .description = "Enable SPV_KHR_bit_instructions extension",
1352 .dependencies = featureSet(&[_]Feature{}),1309 .dependencies = featureSet(&[_]Feature{}),
1353 };1310 };
1354 result[@intFromEnum(Feature.SPV_KHR_compute_shader_derivatives)] = .{1311 result[@intFromEnum(Feature.SPV_KHR_compute_shader_derivatives)] = .{
1355 .llvm_name = null,1312 .llvm_name = null,
1356 .description = "Enable SPV_KHR_compute_shader_derivatives Extension.",1313 .description = "Enable SPV_KHR_compute_shader_derivatives extension",
1357 .dependencies = featureSet(&[_]Feature{}),1314 .dependencies = featureSet(&[_]Feature{}),
1358 };1315 };
1359 result[@intFromEnum(Feature.SPV_KHR_constant_data)] = .{1316 result[@intFromEnum(Feature.SPV_KHR_constant_data)] = .{
1360 .llvm_name = null,1317 .llvm_name = null,
1361 .description = "Enable SPV_KHR_constant_data Extension.",1318 .description = "Enable SPV_KHR_constant_data extension",
1362 .dependencies = featureSet(&[_]Feature{}),1319 .dependencies = featureSet(&[_]Feature{}),
1363 };1320 };
1364 result[@intFromEnum(Feature.SPV_KHR_cooperative_matrix)] = .{1321 result[@intFromEnum(Feature.SPV_KHR_cooperative_matrix)] = .{
1365 .llvm_name = null,1322 .llvm_name = null,
1366 .description = "Enable SPV_KHR_cooperative_matrix Extension.",1323 .description = "Enable SPV_KHR_cooperative_matrix extension",
1367 .dependencies = featureSet(&[_]Feature{}),1324 .dependencies = featureSet(&[_]Feature{}),
1368 };1325 };
1369 result[@intFromEnum(Feature.SPV_KHR_device_group)] = .{1326 result[@intFromEnum(Feature.SPV_KHR_device_group)] = .{
1370 .llvm_name = null,1327 .llvm_name = null,
1371 .description = "Enable SPV_KHR_device_group Extension.",1328 .description = "Enable SPV_KHR_device_group extension",
1372 .dependencies = featureSet(&[_]Feature{}),1329 .dependencies = featureSet(&[_]Feature{}),
1373 };1330 };
1374 result[@intFromEnum(Feature.SPV_KHR_expect_assume)] = .{1331 result[@intFromEnum(Feature.SPV_KHR_expect_assume)] = .{
1375 .llvm_name = null,1332 .llvm_name = null,
1376 .description = "Enable SPV_KHR_expect_assume Extension.",1333 .description = "Enable SPV_KHR_expect_assume extension",
1377 .dependencies = featureSet(&[_]Feature{}),1334 .dependencies = featureSet(&[_]Feature{}),
1378 };1335 };
1379 result[@intFromEnum(Feature.SPV_KHR_float_controls)] = .{1336 result[@intFromEnum(Feature.SPV_KHR_float_controls)] = .{
1380 .llvm_name = null,1337 .llvm_name = null,
1381 .description = "Enable SPV_KHR_float_controls Extension.",1338 .description = "Enable SPV_KHR_float_controls extension",
1382 .dependencies = featureSet(&[_]Feature{}),1339 .dependencies = featureSet(&[_]Feature{}),
1383 };1340 };
1384 result[@intFromEnum(Feature.SPV_KHR_float_controls2)] = .{1341 result[@intFromEnum(Feature.SPV_KHR_float_controls2)] = .{
1385 .llvm_name = null,1342 .llvm_name = null,
1386 .description = "Enable SPV_KHR_float_controls2 Extension.",1343 .description = "Enable SPV_KHR_float_controls2 extension",
1387 .dependencies = featureSet(&[_]Feature{}),1344 .dependencies = featureSet(&[_]Feature{}),
1388 };1345 };
1389 result[@intFromEnum(Feature.SPV_KHR_fma)] = .{1346 result[@intFromEnum(Feature.SPV_KHR_fma)] = .{
1390 .llvm_name = null,1347 .llvm_name = null,
1391 .description = "Enable SPV_KHR_fma Extension.",1348 .description = "Enable SPV_KHR_fma extension",
1392 .dependencies = featureSet(&[_]Feature{}),1349 .dependencies = featureSet(&[_]Feature{}),
1393 };1350 };
1394 result[@intFromEnum(Feature.SPV_KHR_fragment_shader_barycentric)] = .{1351 result[@intFromEnum(Feature.SPV_KHR_fragment_shader_barycentric)] = .{
1395 .llvm_name = null,1352 .llvm_name = null,
1396 .description = "Enable SPV_KHR_fragment_shader_barycentric Extension.",1353 .description = "Enable SPV_KHR_fragment_shader_barycentric extension",
1397 .dependencies = featureSet(&[_]Feature{}),1354 .dependencies = featureSet(&[_]Feature{}),
1398 };1355 };
1399 result[@intFromEnum(Feature.SPV_KHR_fragment_shading_rate)] = .{1356 result[@intFromEnum(Feature.SPV_KHR_fragment_shading_rate)] = .{
1400 .llvm_name = null,1357 .llvm_name = null,
1401 .description = "Enable SPV_KHR_fragment_shading_rate Extension.",1358 .description = "Enable SPV_KHR_fragment_shading_rate extension",
1402 .dependencies = featureSet(&[_]Feature{}),1359 .dependencies = featureSet(&[_]Feature{}),
1403 };1360 };
1404 result[@intFromEnum(Feature.SPV_KHR_integer_dot_product)] = .{1361 result[@intFromEnum(Feature.SPV_KHR_integer_dot_product)] = .{
1405 .llvm_name = null,1362 .llvm_name = null,
1406 .description = "Enable SPV_KHR_integer_dot_product Extension.",1363 .description = "Enable SPV_KHR_integer_dot_product extension",
1407 .dependencies = featureSet(&[_]Feature{}),1364 .dependencies = featureSet(&[_]Feature{}),
1408 };1365 };
1409 result[@intFromEnum(Feature.SPV_KHR_multiview)] = .{1366 result[@intFromEnum(Feature.SPV_KHR_multiview)] = .{
1410 .llvm_name = null,1367 .llvm_name = null,
1411 .description = "Enable SPV_KHR_multiview Extension.",1368 .description = "Enable SPV_KHR_multiview extension",
1412 .dependencies = featureSet(&[_]Feature{}),
1413 };
1414 result[@intFromEnum(Feature.SPV_KHR_physical_storage_buffer)] = .{
1415 .llvm_name = null,
1416 .description = "Enable SPV_KHR_physical_storage_buffer Extension.",
1417 .dependencies = featureSet(&[_]Feature{}),1369 .dependencies = featureSet(&[_]Feature{}),
1418 };1370 };
1419 result[@intFromEnum(Feature.SPV_KHR_poison_freeze)] = .{1371 result[@intFromEnum(Feature.SPV_KHR_poison_freeze)] = .{
1420 .llvm_name = null,1372 .llvm_name = null,
1421 .description = "Enable SPV_KHR_poison_freeze Extension.",1373 .description = "Enable SPV_KHR_poison_freeze extension",
1422 .dependencies = featureSet(&[_]Feature{}),1374 .dependencies = featureSet(&[_]Feature{}),
1423 };1375 };
1424 result[@intFromEnum(Feature.SPV_KHR_post_depth_coverage)] = .{1376 result[@intFromEnum(Feature.SPV_KHR_post_depth_coverage)] = .{
1425 .llvm_name = null,1377 .llvm_name = null,
1426 .description = "Enable SPV_KHR_post_depth_coverage Extension.",1378 .description = "Enable SPV_KHR_post_depth_coverage extension",
1427 .dependencies = featureSet(&[_]Feature{}),1379 .dependencies = featureSet(&[_]Feature{}),
1428 };1380 };
1429 result[@intFromEnum(Feature.SPV_KHR_quad_control)] = .{1381 result[@intFromEnum(Feature.SPV_KHR_quad_control)] = .{
1430 .llvm_name = null,1382 .llvm_name = null,
1431 .description = "Enable SPV_KHR_quad_control Extension.",1383 .description = "Enable SPV_KHR_quad_control extension",
1432 .dependencies = featureSet(&[_]Feature{}),1384 .dependencies = featureSet(&[_]Feature{}),
1433 };1385 };
1434 result[@intFromEnum(Feature.SPV_KHR_ray_cull_mask)] = .{1386 result[@intFromEnum(Feature.SPV_KHR_ray_cull_mask)] = .{
1435 .llvm_name = null,1387 .llvm_name = null,
1436 .description = "Enable SPV_KHR_ray_cull_mask Extension.",1388 .description = "Enable SPV_KHR_ray_cull_mask extension",
1437 .dependencies = featureSet(&[_]Feature{}),1389 .dependencies = featureSet(&[_]Feature{}),
1438 };1390 };
1439 result[@intFromEnum(Feature.SPV_KHR_ray_query)] = .{1391 result[@intFromEnum(Feature.SPV_KHR_ray_query)] = .{
1440 .llvm_name = null,1392 .llvm_name = null,
1441 .description = "Enable SPV_KHR_ray_query Extension.",1393 .description = "Enable SPV_KHR_ray_query extension",
1442 .dependencies = featureSet(&[_]Feature{}),1394 .dependencies = featureSet(&[_]Feature{}),
1443 };1395 };
1444 result[@intFromEnum(Feature.SPV_KHR_ray_tracing)] = .{1396 result[@intFromEnum(Feature.SPV_KHR_ray_tracing)] = .{
1445 .llvm_name = null,1397 .llvm_name = null,
1446 .description = "Enable SPV_KHR_ray_tracing Extension.",1398 .description = "Enable SPV_KHR_ray_tracing extension",
1447 .dependencies = featureSet(&[_]Feature{}),1399 .dependencies = featureSet(&[_]Feature{}),
1448 };1400 };
1449 result[@intFromEnum(Feature.SPV_KHR_ray_tracing_position_fetch)] = .{1401 result[@intFromEnum(Feature.SPV_KHR_ray_tracing_position_fetch)] = .{
1450 .llvm_name = null,1402 .llvm_name = null,
1451 .description = "Enable SPV_KHR_ray_tracing_position_fetch Extension.",1403 .description = "Enable SPV_KHR_ray_tracing_position_fetch extension",
1452 .dependencies = featureSet(&[_]Feature{}),1404 .dependencies = featureSet(&[_]Feature{}),
1453 };1405 };
1454 result[@intFromEnum(Feature.SPV_KHR_shader_atomic_counter_ops)] = .{1406 result[@intFromEnum(Feature.SPV_KHR_shader_atomic_counter_ops)] = .{
1455 .llvm_name = null,1407 .llvm_name = null,
1456 .description = "Enable SPV_KHR_shader_atomic_counter_ops Extension.",1408 .description = "Enable SPV_KHR_shader_atomic_counter_ops extension",
1457 .dependencies = featureSet(&[_]Feature{}),1409 .dependencies = featureSet(&[_]Feature{}),
1458 };1410 };
1459 result[@intFromEnum(Feature.SPV_KHR_shader_ballot)] = .{1411 result[@intFromEnum(Feature.SPV_KHR_shader_ballot)] = .{
1460 .llvm_name = null,1412 .llvm_name = null,
1461 .description = "Enable SPV_KHR_shader_ballot Extension.",1413 .description = "Enable SPV_KHR_shader_ballot extension",
1462 .dependencies = featureSet(&[_]Feature{}),1414 .dependencies = featureSet(&[_]Feature{}),
1463 };1415 };
1464 result[@intFromEnum(Feature.SPV_KHR_shader_clock)] = .{1416 result[@intFromEnum(Feature.SPV_KHR_shader_clock)] = .{
1465 .llvm_name = null,1417 .llvm_name = null,
1466 .description = "Enable SPV_KHR_shader_clock Extension.",1418 .description = "Enable SPV_KHR_shader_clock extension",
1467 .dependencies = featureSet(&[_]Feature{}),1419 .dependencies = featureSet(&[_]Feature{}),
1468 };1420 };
1469 result[@intFromEnum(Feature.SPV_KHR_shader_draw_parameters)] = .{1421 result[@intFromEnum(Feature.SPV_KHR_shader_draw_parameters)] = .{
1470 .llvm_name = null,1422 .llvm_name = null,
1471 .description = "Enable SPV_KHR_shader_draw_parameters Extension.",1423 .description = "Enable SPV_KHR_shader_draw_parameters extension",
1472 .dependencies = featureSet(&[_]Feature{}),1424 .dependencies = featureSet(&[_]Feature{}),
1473 };1425 };
1474 result[@intFromEnum(Feature.SPV_KHR_subgroup_rotate)] = .{1426 result[@intFromEnum(Feature.SPV_KHR_subgroup_rotate)] = .{
1475 .llvm_name = null,1427 .llvm_name = null,
1476 .description = "Enable SPV_KHR_subgroup_rotate Extension.",1428 .description = "Enable SPV_KHR_subgroup_rotate extension",
1477 .dependencies = featureSet(&[_]Feature{}),1429 .dependencies = featureSet(&[_]Feature{}),
1478 };1430 };
1479 result[@intFromEnum(Feature.SPV_KHR_subgroup_vote)] = .{1431 result[@intFromEnum(Feature.SPV_KHR_subgroup_vote)] = .{
1480 .llvm_name = null,1432 .llvm_name = null,
1481 .description = "Enable SPV_KHR_subgroup_vote Extension.",1433 .description = "Enable SPV_KHR_subgroup_vote extension",
1482 .dependencies = featureSet(&[_]Feature{}),1434 .dependencies = featureSet(&[_]Feature{}),
1483 };1435 };
1484 result[@intFromEnum(Feature.SPV_KHR_uniform_group_instructions)] = .{1436 result[@intFromEnum(Feature.SPV_KHR_uniform_group_instructions)] = .{
1485 .llvm_name = null,1437 .llvm_name = null,
1486 .description = "Enable SPV_KHR_uniform_group_instructions Extension.",1438 .description = "Enable SPV_KHR_uniform_group_instructions extension",
1487 .dependencies = featureSet(&[_]Feature{}),1439 .dependencies = featureSet(&[_]Feature{}),
1488 };1440 };
1489 result[@intFromEnum(Feature.SPV_KHR_untyped_pointers)] = .{1441 result[@intFromEnum(Feature.SPV_KHR_untyped_pointers)] = .{
1490 .llvm_name = null,1442 .llvm_name = null,
1491 .description = "Enable SPV_KHR_untyped_pointers Extension.",1443 .description = "Enable SPV_KHR_untyped_pointers extension",
1492 .dependencies = featureSet(&[_]Feature{}),1444 .dependencies = featureSet(&[_]Feature{}),
1493 };1445 };
1494 result[@intFromEnum(Feature.SPV_KHR_variable_pointers)] = .{1446 result[@intFromEnum(Feature.SPV_KHR_variable_pointers)] = .{
1495 .llvm_name = null,1447 .llvm_name = null,
1496 .description = "Enable SPV_KHR_variable_pointers Extension.",1448 .description = "Enable SPV_KHR_variable_pointers extension",
1497 .dependencies = featureSet(&[_]Feature{}),1449 .dependencies = featureSet(&[_]Feature{}),
1498 };1450 };
1499 result[@intFromEnum(Feature.SPV_KHR_vulkan_memory_model)] = .{1451 result[@intFromEnum(Feature.SPV_KHR_vulkan_memory_model)] = .{
1500 .llvm_name = null,1452 .llvm_name = null,
1501 .description = "Enable SPV_KHR_vulkan_memory_model Extension.",1453 .description = "Enable SPV_KHR_vulkan_memory_model extension",
1502 .dependencies = featureSet(&[_]Feature{}),1454 .dependencies = featureSet(&[_]Feature{}),
1503 };1455 };
1504 result[@intFromEnum(Feature.SPV_KHR_workgroup_memory_explicit_layout)] = .{1456 result[@intFromEnum(Feature.SPV_KHR_workgroup_memory_explicit_layout)] = .{
1505 .llvm_name = null,1457 .llvm_name = null,
1506 .description = "Enable SPV_KHR_workgroup_memory_explicit_layout Extension.",1458 .description = "Enable SPV_KHR_workgroup_memory_explicit_layout extension",
1507 .dependencies = featureSet(&[_]Feature{}),1459 .dependencies = featureSet(&[_]Feature{}),
1508 };1460 };
1509 result[@intFromEnum(Feature.stencil_export_ext)] = .{1461 result[@intFromEnum(Feature.stencil_export_ext)] = .{
1510 .llvm_name = null,1462 .llvm_name = null,
1511 .description = "Enable stencil_export_ext Capability.",1463 .description = "Enable stencil_export_ext capability",
1512 .dependencies = featureSet(&[_]Feature{1464 .dependencies = featureSet(&[_]Feature{
1513 .SPV_EXT_shader_stencil_export,1465 .SPV_EXT_shader_stencil_export,
1514 .v1_0,1466 .v1_0,
...@@ -1516,7 +1468,7 @@ pub const all_features = blk: {...@@ -1516,7 +1468,7 @@ pub const all_features = blk: {
1516 };1468 };
1517 result[@intFromEnum(Feature.storage_buffer16bit_access)] = .{1469 result[@intFromEnum(Feature.storage_buffer16bit_access)] = .{
1518 .llvm_name = null,1470 .llvm_name = null,
1519 .description = "Enable storage_buffer16bit_access Capability.",1471 .description = "Enable storage_buffer16bit_access capability",
1520 .dependencies = featureSet(&[_]Feature{1472 .dependencies = featureSet(&[_]Feature{
1521 .SPV_KHR_16bit_storage,1473 .SPV_KHR_16bit_storage,
1522 .v1_3,1474 .v1_3,
...@@ -1524,7 +1476,7 @@ pub const all_features = blk: {...@@ -1524,7 +1476,7 @@ pub const all_features = blk: {
1524 };1476 };
1525 result[@intFromEnum(Feature.storage_buffer8bit_access)] = .{1477 result[@intFromEnum(Feature.storage_buffer8bit_access)] = .{
1526 .llvm_name = null,1478 .llvm_name = null,
1527 .description = "Enable storage_buffer8bit_access Capability.",1479 .description = "Enable storage_buffer8bit_access capability",
1528 .dependencies = featureSet(&[_]Feature{1480 .dependencies = featureSet(&[_]Feature{
1529 .SPV_KHR_8bit_storage,1481 .SPV_KHR_8bit_storage,
1530 .v1_5,1482 .v1_5,
...@@ -1532,14 +1484,14 @@ pub const all_features = blk: {...@@ -1532,14 +1484,14 @@ pub const all_features = blk: {
1532 };1484 };
1533 result[@intFromEnum(Feature.storage_buffer_array_dynamic_indexing)] = .{1485 result[@intFromEnum(Feature.storage_buffer_array_dynamic_indexing)] = .{
1534 .llvm_name = null,1486 .llvm_name = null,
1535 .description = "Enable storage_buffer_array_dynamic_indexing Capability.",1487 .description = "Enable storage_buffer_array_dynamic_indexing capability",
1536 .dependencies = featureSet(&[_]Feature{1488 .dependencies = featureSet(&[_]Feature{
1537 .v1_0,1489 .v1_0,
1538 }),1490 }),
1539 };1491 };
1540 result[@intFromEnum(Feature.storage_buffer_array_non_uniform_indexing)] = .{1492 result[@intFromEnum(Feature.storage_buffer_array_non_uniform_indexing)] = .{
1541 .llvm_name = null,1493 .llvm_name = null,
1542 .description = "Enable storage_buffer_array_non_uniform_indexing Capability.",1494 .description = "Enable storage_buffer_array_non_uniform_indexing capability",
1543 .dependencies = featureSet(&[_]Feature{1495 .dependencies = featureSet(&[_]Feature{
1544 .SPV_EXT_descriptor_indexing,1496 .SPV_EXT_descriptor_indexing,
1545 .v1_5,1497 .v1_5,
...@@ -1547,14 +1499,14 @@ pub const all_features = blk: {...@@ -1547,14 +1499,14 @@ pub const all_features = blk: {
1547 };1499 };
1548 result[@intFromEnum(Feature.storage_image_array_dynamic_indexing)] = .{1500 result[@intFromEnum(Feature.storage_image_array_dynamic_indexing)] = .{
1549 .llvm_name = null,1501 .llvm_name = null,
1550 .description = "Enable storage_image_array_dynamic_indexing Capability.",1502 .description = "Enable storage_image_array_dynamic_indexing capability",
1551 .dependencies = featureSet(&[_]Feature{1503 .dependencies = featureSet(&[_]Feature{
1552 .v1_0,1504 .v1_0,
1553 }),1505 }),
1554 };1506 };
1555 result[@intFromEnum(Feature.storage_image_array_non_uniform_indexing)] = .{1507 result[@intFromEnum(Feature.storage_image_array_non_uniform_indexing)] = .{
1556 .llvm_name = null,1508 .llvm_name = null,
1557 .description = "Enable storage_image_array_non_uniform_indexing Capability.",1509 .description = "Enable storage_image_array_non_uniform_indexing capability",
1558 .dependencies = featureSet(&[_]Feature{1510 .dependencies = featureSet(&[_]Feature{
1559 .SPV_EXT_descriptor_indexing,1511 .SPV_EXT_descriptor_indexing,
1560 .v1_5,1512 .v1_5,
...@@ -1562,35 +1514,35 @@ pub const all_features = blk: {...@@ -1562,35 +1514,35 @@ pub const all_features = blk: {
1562 };1514 };
1563 result[@intFromEnum(Feature.storage_image_extended_formats)] = .{1515 result[@intFromEnum(Feature.storage_image_extended_formats)] = .{
1564 .llvm_name = null,1516 .llvm_name = null,
1565 .description = "Enable storage_image_extended_formats Capability.",1517 .description = "Enable storage_image_extended_formats capability",
1566 .dependencies = featureSet(&[_]Feature{1518 .dependencies = featureSet(&[_]Feature{
1567 .v1_0,1519 .v1_0,
1568 }),1520 }),
1569 };1521 };
1570 result[@intFromEnum(Feature.storage_image_multisample)] = .{1522 result[@intFromEnum(Feature.storage_image_multisample)] = .{
1571 .llvm_name = null,1523 .llvm_name = null,
1572 .description = "Enable storage_image_multisample Capability.",1524 .description = "Enable storage_image_multisample capability",
1573 .dependencies = featureSet(&[_]Feature{1525 .dependencies = featureSet(&[_]Feature{
1574 .v1_0,1526 .v1_0,
1575 }),1527 }),
1576 };1528 };
1577 result[@intFromEnum(Feature.storage_image_read_without_format)] = .{1529 result[@intFromEnum(Feature.storage_image_read_without_format)] = .{
1578 .llvm_name = null,1530 .llvm_name = null,
1579 .description = "Enable storage_image_read_without_format Capability.",1531 .description = "Enable storage_image_read_without_format capability",
1580 .dependencies = featureSet(&[_]Feature{1532 .dependencies = featureSet(&[_]Feature{
1581 .v1_0,1533 .v1_0,
1582 }),1534 }),
1583 };1535 };
1584 result[@intFromEnum(Feature.storage_image_write_without_format)] = .{1536 result[@intFromEnum(Feature.storage_image_write_without_format)] = .{
1585 .llvm_name = null,1537 .llvm_name = null,
1586 .description = "Enable storage_image_write_without_format Capability.",1538 .description = "Enable storage_image_write_without_format capability",
1587 .dependencies = featureSet(&[_]Feature{1539 .dependencies = featureSet(&[_]Feature{
1588 .v1_0,1540 .v1_0,
1589 }),1541 }),
1590 };1542 };
1591 result[@intFromEnum(Feature.storage_input_output16)] = .{1543 result[@intFromEnum(Feature.storage_input_output16)] = .{
1592 .llvm_name = null,1544 .llvm_name = null,
1593 .description = "Enable storage_input_output16 Capability.",1545 .description = "Enable storage_input_output16 capability",
1594 .dependencies = featureSet(&[_]Feature{1546 .dependencies = featureSet(&[_]Feature{
1595 .SPV_KHR_16bit_storage,1547 .SPV_KHR_16bit_storage,
1596 .v1_3,1548 .v1_3,
...@@ -1598,7 +1550,7 @@ pub const all_features = blk: {...@@ -1598,7 +1550,7 @@ pub const all_features = blk: {
1598 };1550 };
1599 result[@intFromEnum(Feature.storage_push_constant16)] = .{1551 result[@intFromEnum(Feature.storage_push_constant16)] = .{
1600 .llvm_name = null,1552 .llvm_name = null,
1601 .description = "Enable storage_push_constant16 Capability.",1553 .description = "Enable storage_push_constant16 capability",
1602 .dependencies = featureSet(&[_]Feature{1554 .dependencies = featureSet(&[_]Feature{
1603 .SPV_KHR_16bit_storage,1555 .SPV_KHR_16bit_storage,
1604 .v1_3,1556 .v1_3,
...@@ -1606,7 +1558,7 @@ pub const all_features = blk: {...@@ -1606,7 +1558,7 @@ pub const all_features = blk: {
1606 };1558 };
1607 result[@intFromEnum(Feature.storage_push_constant8)] = .{1559 result[@intFromEnum(Feature.storage_push_constant8)] = .{
1608 .llvm_name = null,1560 .llvm_name = null,
1609 .description = "Enable storage_push_constant8 Capability.",1561 .description = "Enable storage_push_constant8 capability",
1610 .dependencies = featureSet(&[_]Feature{1562 .dependencies = featureSet(&[_]Feature{
1611 .SPV_KHR_8bit_storage,1563 .SPV_KHR_8bit_storage,
1612 .v1_5,1564 .v1_5,
...@@ -1614,7 +1566,7 @@ pub const all_features = blk: {...@@ -1614,7 +1566,7 @@ pub const all_features = blk: {
1614 };1566 };
1615 result[@intFromEnum(Feature.storage_texel_buffer_array_dynamic_indexing)] = .{1567 result[@intFromEnum(Feature.storage_texel_buffer_array_dynamic_indexing)] = .{
1616 .llvm_name = null,1568 .llvm_name = null,
1617 .description = "Enable storage_texel_buffer_array_dynamic_indexing Capability.",1569 .description = "Enable storage_texel_buffer_array_dynamic_indexing capability",
1618 .dependencies = featureSet(&[_]Feature{1570 .dependencies = featureSet(&[_]Feature{
1619 .SPV_EXT_descriptor_indexing,1571 .SPV_EXT_descriptor_indexing,
1620 .v1_5,1572 .v1_5,
...@@ -1622,7 +1574,7 @@ pub const all_features = blk: {...@@ -1622,7 +1574,7 @@ pub const all_features = blk: {
1622 };1574 };
1623 result[@intFromEnum(Feature.storage_texel_buffer_array_non_uniform_indexing)] = .{1575 result[@intFromEnum(Feature.storage_texel_buffer_array_non_uniform_indexing)] = .{
1624 .llvm_name = null,1576 .llvm_name = null,
1625 .description = "Enable storage_texel_buffer_array_non_uniform_indexing Capability.",1577 .description = "Enable storage_texel_buffer_array_non_uniform_indexing capability",
1626 .dependencies = featureSet(&[_]Feature{1578 .dependencies = featureSet(&[_]Feature{
1627 .SPV_EXT_descriptor_indexing,1579 .SPV_EXT_descriptor_indexing,
1628 .v1_5,1580 .v1_5,
...@@ -1630,7 +1582,7 @@ pub const all_features = blk: {...@@ -1630,7 +1582,7 @@ pub const all_features = blk: {
1630 };1582 };
1631 result[@intFromEnum(Feature.subgroup_ballot_khr)] = .{1583 result[@intFromEnum(Feature.subgroup_ballot_khr)] = .{
1632 .llvm_name = null,1584 .llvm_name = null,
1633 .description = "Enable subgroup_ballot_khr Capability.",1585 .description = "Enable subgroup_ballot_khr capability",
1634 .dependencies = featureSet(&[_]Feature{1586 .dependencies = featureSet(&[_]Feature{
1635 .SPV_KHR_shader_ballot,1587 .SPV_KHR_shader_ballot,
1636 .v1_0,1588 .v1_0,
...@@ -1638,14 +1590,14 @@ pub const all_features = blk: {...@@ -1638,14 +1590,14 @@ pub const all_features = blk: {
1638 };1590 };
1639 result[@intFromEnum(Feature.subgroup_dispatch)] = .{1591 result[@intFromEnum(Feature.subgroup_dispatch)] = .{
1640 .llvm_name = null,1592 .llvm_name = null,
1641 .description = "Enable subgroup_dispatch Capability.",1593 .description = "Enable subgroup_dispatch capability",
1642 .dependencies = featureSet(&[_]Feature{1594 .dependencies = featureSet(&[_]Feature{
1643 .v1_1,1595 .v1_1,
1644 }),1596 }),
1645 };1597 };
1646 result[@intFromEnum(Feature.subgroup_vote_khr)] = .{1598 result[@intFromEnum(Feature.subgroup_vote_khr)] = .{
1647 .llvm_name = null,1599 .llvm_name = null,
1648 .description = "Enable subgroup_vote_khr Capability.",1600 .description = "Enable subgroup_vote_khr capability",
1649 .dependencies = featureSet(&[_]Feature{1601 .dependencies = featureSet(&[_]Feature{
1650 .SPV_KHR_subgroup_vote,1602 .SPV_KHR_subgroup_vote,
1651 .v1_0,1603 .v1_0,
...@@ -1653,21 +1605,21 @@ pub const all_features = blk: {...@@ -1653,21 +1605,21 @@ pub const all_features = blk: {
1653 };1605 };
1654 result[@intFromEnum(Feature.tessellation)] = .{1606 result[@intFromEnum(Feature.tessellation)] = .{
1655 .llvm_name = null,1607 .llvm_name = null,
1656 .description = "Enable tessellation Capability.",1608 .description = "Enable tessellation capability",
1657 .dependencies = featureSet(&[_]Feature{1609 .dependencies = featureSet(&[_]Feature{
1658 .v1_0,1610 .v1_0,
1659 }),1611 }),
1660 };1612 };
1661 result[@intFromEnum(Feature.tessellation_point_size)] = .{1613 result[@intFromEnum(Feature.tessellation_point_size)] = .{
1662 .llvm_name = null,1614 .llvm_name = null,
1663 .description = "Enable tessellation_point_size Capability.",1615 .description = "Enable tessellation_point_size capability",
1664 .dependencies = featureSet(&[_]Feature{1616 .dependencies = featureSet(&[_]Feature{
1665 .v1_0,1617 .v1_0,
1666 }),1618 }),
1667 };1619 };
1668 result[@intFromEnum(Feature.tile_image_color_read_access_ext)] = .{1620 result[@intFromEnum(Feature.tile_image_color_read_access_ext)] = .{
1669 .llvm_name = null,1621 .llvm_name = null,
1670 .description = "Enable tile_image_color_read_access_ext Capability.",1622 .description = "Enable tile_image_color_read_access_ext capability",
1671 .dependencies = featureSet(&[_]Feature{1623 .dependencies = featureSet(&[_]Feature{
1672 .SPV_EXT_shader_tile_image,1624 .SPV_EXT_shader_tile_image,
1673 .v1_0,1625 .v1_0,
...@@ -1675,7 +1627,7 @@ pub const all_features = blk: {...@@ -1675,7 +1627,7 @@ pub const all_features = blk: {
1675 };1627 };
1676 result[@intFromEnum(Feature.tile_image_depth_read_access_ext)] = .{1628 result[@intFromEnum(Feature.tile_image_depth_read_access_ext)] = .{
1677 .llvm_name = null,1629 .llvm_name = null,
1678 .description = "Enable tile_image_depth_read_access_ext Capability.",1630 .description = "Enable tile_image_depth_read_access_ext capability",
1679 .dependencies = featureSet(&[_]Feature{1631 .dependencies = featureSet(&[_]Feature{
1680 .SPV_EXT_shader_tile_image,1632 .SPV_EXT_shader_tile_image,
1681 .v1_0,1633 .v1_0,
...@@ -1683,7 +1635,7 @@ pub const all_features = blk: {...@@ -1683,7 +1635,7 @@ pub const all_features = blk: {
1683 };1635 };
1684 result[@intFromEnum(Feature.tile_image_stencil_read_access_ext)] = .{1636 result[@intFromEnum(Feature.tile_image_stencil_read_access_ext)] = .{
1685 .llvm_name = null,1637 .llvm_name = null,
1686 .description = "Enable tile_image_stencil_read_access_ext Capability.",1638 .description = "Enable tile_image_stencil_read_access_ext capability",
1687 .dependencies = featureSet(&[_]Feature{1639 .dependencies = featureSet(&[_]Feature{
1688 .SPV_EXT_shader_tile_image,1640 .SPV_EXT_shader_tile_image,
1689 .v1_0,1641 .v1_0,
...@@ -1691,14 +1643,14 @@ pub const all_features = blk: {...@@ -1691,14 +1643,14 @@ pub const all_features = blk: {
1691 };1643 };
1692 result[@intFromEnum(Feature.transform_feedback)] = .{1644 result[@intFromEnum(Feature.transform_feedback)] = .{
1693 .llvm_name = null,1645 .llvm_name = null,
1694 .description = "Enable transform_feedback Capability.",1646 .description = "Enable transform_feedback capability",
1695 .dependencies = featureSet(&[_]Feature{1647 .dependencies = featureSet(&[_]Feature{
1696 .v1_0,1648 .v1_0,
1697 }),1649 }),
1698 };1650 };
1699 result[@intFromEnum(Feature.uniform_and_storage_buffer16bit_access)] = .{1651 result[@intFromEnum(Feature.uniform_and_storage_buffer16bit_access)] = .{
1700 .llvm_name = null,1652 .llvm_name = null,
1701 .description = "Enable uniform_and_storage_buffer16bit_access Capability.",1653 .description = "Enable uniform_and_storage_buffer16bit_access capability",
1702 .dependencies = featureSet(&[_]Feature{1654 .dependencies = featureSet(&[_]Feature{
1703 .SPV_KHR_16bit_storage,1655 .SPV_KHR_16bit_storage,
1704 .v1_3,1656 .v1_3,
...@@ -1706,7 +1658,7 @@ pub const all_features = blk: {...@@ -1706,7 +1658,7 @@ pub const all_features = blk: {
1706 };1658 };
1707 result[@intFromEnum(Feature.uniform_and_storage_buffer8bit_access)] = .{1659 result[@intFromEnum(Feature.uniform_and_storage_buffer8bit_access)] = .{
1708 .llvm_name = null,1660 .llvm_name = null,
1709 .description = "Enable uniform_and_storage_buffer8bit_access Capability.",1661 .description = "Enable uniform_and_storage_buffer8bit_access capability",
1710 .dependencies = featureSet(&[_]Feature{1662 .dependencies = featureSet(&[_]Feature{
1711 .SPV_KHR_8bit_storage,1663 .SPV_KHR_8bit_storage,
1712 .v1_5,1664 .v1_5,
...@@ -1714,14 +1666,14 @@ pub const all_features = blk: {...@@ -1714,14 +1666,14 @@ pub const all_features = blk: {
1714 };1666 };
1715 result[@intFromEnum(Feature.uniform_buffer_array_dynamic_indexing)] = .{1667 result[@intFromEnum(Feature.uniform_buffer_array_dynamic_indexing)] = .{
1716 .llvm_name = null,1668 .llvm_name = null,
1717 .description = "Enable uniform_buffer_array_dynamic_indexing Capability.",1669 .description = "Enable uniform_buffer_array_dynamic_indexing capability",
1718 .dependencies = featureSet(&[_]Feature{1670 .dependencies = featureSet(&[_]Feature{
1719 .v1_0,1671 .v1_0,
1720 }),1672 }),
1721 };1673 };
1722 result[@intFromEnum(Feature.uniform_buffer_array_non_uniform_indexing)] = .{1674 result[@intFromEnum(Feature.uniform_buffer_array_non_uniform_indexing)] = .{
1723 .llvm_name = null,1675 .llvm_name = null,
1724 .description = "Enable uniform_buffer_array_non_uniform_indexing Capability.",1676 .description = "Enable uniform_buffer_array_non_uniform_indexing capability",
1725 .dependencies = featureSet(&[_]Feature{1677 .dependencies = featureSet(&[_]Feature{
1726 .SPV_EXT_descriptor_indexing,1678 .SPV_EXT_descriptor_indexing,
1727 .v1_5,1679 .v1_5,
...@@ -1729,14 +1681,14 @@ pub const all_features = blk: {...@@ -1729,14 +1681,14 @@ pub const all_features = blk: {
1729 };1681 };
1730 result[@intFromEnum(Feature.uniform_decoration)] = .{1682 result[@intFromEnum(Feature.uniform_decoration)] = .{
1731 .llvm_name = null,1683 .llvm_name = null,
1732 .description = "Enable uniform_decoration Capability.",1684 .description = "Enable uniform_decoration capability",
1733 .dependencies = featureSet(&[_]Feature{1685 .dependencies = featureSet(&[_]Feature{
1734 .v1_6,1686 .v1_6,
1735 }),1687 }),
1736 };1688 };
1737 result[@intFromEnum(Feature.uniform_texel_buffer_array_dynamic_indexing)] = .{1689 result[@intFromEnum(Feature.uniform_texel_buffer_array_dynamic_indexing)] = .{
1738 .llvm_name = null,1690 .llvm_name = null,
1739 .description = "Enable uniform_texel_buffer_array_dynamic_indexing Capability.",1691 .description = "Enable uniform_texel_buffer_array_dynamic_indexing capability",
1740 .dependencies = featureSet(&[_]Feature{1692 .dependencies = featureSet(&[_]Feature{
1741 .SPV_EXT_descriptor_indexing,1693 .SPV_EXT_descriptor_indexing,
1742 .v1_5,1694 .v1_5,
...@@ -1744,7 +1696,7 @@ pub const all_features = blk: {...@@ -1744,7 +1696,7 @@ pub const all_features = blk: {
1744 };1696 };
1745 result[@intFromEnum(Feature.uniform_texel_buffer_array_non_uniform_indexing)] = .{1697 result[@intFromEnum(Feature.uniform_texel_buffer_array_non_uniform_indexing)] = .{
1746 .llvm_name = null,1698 .llvm_name = null,
1747 .description = "Enable uniform_texel_buffer_array_non_uniform_indexing Capability.",1699 .description = "Enable uniform_texel_buffer_array_non_uniform_indexing capability",
1748 .dependencies = featureSet(&[_]Feature{1700 .dependencies = featureSet(&[_]Feature{
1749 .SPV_EXT_descriptor_indexing,1701 .SPV_EXT_descriptor_indexing,
1750 .v1_5,1702 .v1_5,
...@@ -1752,7 +1704,7 @@ pub const all_features = blk: {...@@ -1752,7 +1704,7 @@ pub const all_features = blk: {
1752 };1704 };
1753 result[@intFromEnum(Feature.untyped_pointers_khr)] = .{1705 result[@intFromEnum(Feature.untyped_pointers_khr)] = .{
1754 .llvm_name = null,1706 .llvm_name = null,
1755 .description = "Enable untyped_pointers_khr Capability.",1707 .description = "Enable untyped_pointers_khr capability",
1756 .dependencies = featureSet(&[_]Feature{1708 .dependencies = featureSet(&[_]Feature{
1757 .SPV_KHR_untyped_pointers,1709 .SPV_KHR_untyped_pointers,
1758 .v1_0,1710 .v1_0,
...@@ -1760,54 +1712,54 @@ pub const all_features = blk: {...@@ -1760,54 +1712,54 @@ pub const all_features = blk: {
1760 };1712 };
1761 result[@intFromEnum(Feature.v1_0)] = .{1713 result[@intFromEnum(Feature.v1_0)] = .{
1762 .llvm_name = null,1714 .llvm_name = null,
1763 .description = "Enable v1_0 Extension.",1715 .description = "Enable v1_0 extension",
1764 .dependencies = featureSet(&[_]Feature{}),1716 .dependencies = featureSet(&[_]Feature{}),
1765 };1717 };
1766 result[@intFromEnum(Feature.v1_1)] = .{1718 result[@intFromEnum(Feature.v1_1)] = .{
1767 .llvm_name = null,1719 .llvm_name = null,
1768 .description = "Enable v1_1 Extension.",1720 .description = "Enable v1_1 extension",
1769 .dependencies = featureSet(&[_]Feature{1721 .dependencies = featureSet(&[_]Feature{
1770 .v1_0,1722 .v1_0,
1771 }),1723 }),
1772 };1724 };
1773 result[@intFromEnum(Feature.v1_2)] = .{1725 result[@intFromEnum(Feature.v1_2)] = .{
1774 .llvm_name = null,1726 .llvm_name = null,
1775 .description = "Enable v1_2 Extension.",1727 .description = "Enable v1_2 extension",
1776 .dependencies = featureSet(&[_]Feature{1728 .dependencies = featureSet(&[_]Feature{
1777 .v1_1,1729 .v1_1,
1778 }),1730 }),
1779 };1731 };
1780 result[@intFromEnum(Feature.v1_3)] = .{1732 result[@intFromEnum(Feature.v1_3)] = .{
1781 .llvm_name = null,1733 .llvm_name = null,
1782 .description = "Enable v1_3 Extension.",1734 .description = "Enable v1_3 extension",
1783 .dependencies = featureSet(&[_]Feature{1735 .dependencies = featureSet(&[_]Feature{
1784 .v1_2,1736 .v1_2,
1785 }),1737 }),
1786 };1738 };
1787 result[@intFromEnum(Feature.v1_4)] = .{1739 result[@intFromEnum(Feature.v1_4)] = .{
1788 .llvm_name = null,1740 .llvm_name = null,
1789 .description = "Enable v1_4 Extension.",1741 .description = "Enable v1_4 extension",
1790 .dependencies = featureSet(&[_]Feature{1742 .dependencies = featureSet(&[_]Feature{
1791 .v1_3,1743 .v1_3,
1792 }),1744 }),
1793 };1745 };
1794 result[@intFromEnum(Feature.v1_5)] = .{1746 result[@intFromEnum(Feature.v1_5)] = .{
1795 .llvm_name = null,1747 .llvm_name = null,
1796 .description = "Enable v1_5 Extension.",1748 .description = "Enable v1_5 extension",
1797 .dependencies = featureSet(&[_]Feature{1749 .dependencies = featureSet(&[_]Feature{
1798 .v1_4,1750 .v1_4,
1799 }),1751 }),
1800 };1752 };
1801 result[@intFromEnum(Feature.v1_6)] = .{1753 result[@intFromEnum(Feature.v1_6)] = .{
1802 .llvm_name = null,1754 .llvm_name = null,
1803 .description = "Enable v1_6 Extension.",1755 .description = "Enable v1_6 extension",
1804 .dependencies = featureSet(&[_]Feature{1756 .dependencies = featureSet(&[_]Feature{
1805 .v1_5,1757 .v1_5,
1806 }),1758 }),
1807 };1759 };
1808 result[@intFromEnum(Feature.variable_pointers)] = .{1760 result[@intFromEnum(Feature.variable_pointers)] = .{
1809 .llvm_name = null,1761 .llvm_name = null,
1810 .description = "Enable variable_pointers Capability.",1762 .description = "Enable variable_pointers capability",
1811 .dependencies = featureSet(&[_]Feature{1763 .dependencies = featureSet(&[_]Feature{
1812 .SPV_KHR_variable_pointers,1764 .SPV_KHR_variable_pointers,
1813 .v1_3,1765 .v1_3,
...@@ -1815,7 +1767,7 @@ pub const all_features = blk: {...@@ -1815,7 +1767,7 @@ pub const all_features = blk: {
1815 };1767 };
1816 result[@intFromEnum(Feature.variable_pointers_storage_buffer)] = .{1768 result[@intFromEnum(Feature.variable_pointers_storage_buffer)] = .{
1817 .llvm_name = null,1769 .llvm_name = null,
1818 .description = "Enable variable_pointers_storage_buffer Capability.",1770 .description = "Enable variable_pointers_storage_buffer capability",
1819 .dependencies = featureSet(&[_]Feature{1771 .dependencies = featureSet(&[_]Feature{
1820 .SPV_KHR_variable_pointers,1772 .SPV_KHR_variable_pointers,
1821 .v1_3,1773 .v1_3,
...@@ -1823,14 +1775,14 @@ pub const all_features = blk: {...@@ -1823,14 +1775,14 @@ pub const all_features = blk: {
1823 };1775 };
1824 result[@intFromEnum(Feature.vector16)] = .{1776 result[@intFromEnum(Feature.vector16)] = .{
1825 .llvm_name = null,1777 .llvm_name = null,
1826 .description = "Enable vector16 Capability.",1778 .description = "Enable vector16 capability",
1827 .dependencies = featureSet(&[_]Feature{1779 .dependencies = featureSet(&[_]Feature{
1828 .v1_0,1780 .v1_0,
1829 }),1781 }),
1830 };1782 };
1831 result[@intFromEnum(Feature.vulkan_memory_model)] = .{1783 result[@intFromEnum(Feature.vulkan_memory_model)] = .{
1832 .llvm_name = null,1784 .llvm_name = null,
1833 .description = "Enable vulkan_memory_model Capability.",1785 .description = "Enable vulkan_memory_model capability",
1834 .dependencies = featureSet(&[_]Feature{1786 .dependencies = featureSet(&[_]Feature{
1835 .SPV_KHR_vulkan_memory_model,1787 .SPV_KHR_vulkan_memory_model,
1836 .v1_5,1788 .v1_5,
...@@ -1838,7 +1790,7 @@ pub const all_features = blk: {...@@ -1838,7 +1790,7 @@ pub const all_features = blk: {
1838 };1790 };
1839 result[@intFromEnum(Feature.vulkan_memory_model_device_scope)] = .{1791 result[@intFromEnum(Feature.vulkan_memory_model_device_scope)] = .{
1840 .llvm_name = null,1792 .llvm_name = null,
1841 .description = "Enable vulkan_memory_model_device_scope Capability.",1793 .description = "Enable vulkan_memory_model_device_scope capability",
1842 .dependencies = featureSet(&[_]Feature{1794 .dependencies = featureSet(&[_]Feature{
1843 .SPV_KHR_vulkan_memory_model,1795 .SPV_KHR_vulkan_memory_model,
1844 .v1_5,1796 .v1_5,
...@@ -1846,7 +1798,7 @@ pub const all_features = blk: {...@@ -1846,7 +1798,7 @@ pub const all_features = blk: {
1846 };1798 };
1847 result[@intFromEnum(Feature.workgroup_memory_explicit_layout16bit_access_khr)] = .{1799 result[@intFromEnum(Feature.workgroup_memory_explicit_layout16bit_access_khr)] = .{
1848 .llvm_name = null,1800 .llvm_name = null,
1849 .description = "Enable workgroup_memory_explicit_layout16bit_access_khr Capability.",1801 .description = "Enable workgroup_memory_explicit_layout16bit_access_khr capability",
1850 .dependencies = featureSet(&[_]Feature{1802 .dependencies = featureSet(&[_]Feature{
1851 .SPV_KHR_workgroup_memory_explicit_layout,1803 .SPV_KHR_workgroup_memory_explicit_layout,
1852 .v1_0,1804 .v1_0,
...@@ -1854,7 +1806,7 @@ pub const all_features = blk: {...@@ -1854,7 +1806,7 @@ pub const all_features = blk: {
1854 };1806 };
1855 result[@intFromEnum(Feature.workgroup_memory_explicit_layout8bit_access_khr)] = .{1807 result[@intFromEnum(Feature.workgroup_memory_explicit_layout8bit_access_khr)] = .{
1856 .llvm_name = null,1808 .llvm_name = null,
1857 .description = "Enable workgroup_memory_explicit_layout8bit_access_khr Capability.",1809 .description = "Enable workgroup_memory_explicit_layout8bit_access_khr capability",
1858 .dependencies = featureSet(&[_]Feature{1810 .dependencies = featureSet(&[_]Feature{
1859 .SPV_KHR_workgroup_memory_explicit_layout,1811 .SPV_KHR_workgroup_memory_explicit_layout,
1860 .v1_0,1812 .v1_0,
...@@ -1862,7 +1814,7 @@ pub const all_features = blk: {...@@ -1862,7 +1814,7 @@ pub const all_features = blk: {
1862 };1814 };
1863 result[@intFromEnum(Feature.workgroup_memory_explicit_layout_khr)] = .{1815 result[@intFromEnum(Feature.workgroup_memory_explicit_layout_khr)] = .{
1864 .llvm_name = null,1816 .llvm_name = null,
1865 .description = "Enable workgroup_memory_explicit_layout_khr Capability.",1817 .description = "Enable workgroup_memory_explicit_layout_khr capability",
1866 .dependencies = featureSet(&[_]Feature{1818 .dependencies = featureSet(&[_]Feature{
1867 .SPV_KHR_workgroup_memory_explicit_layout,1819 .SPV_KHR_workgroup_memory_explicit_layout,
1868 .v1_0,1820 .v1_0,
src/InternPool.zig+31-52
...@@ -2148,12 +2148,26 @@ pub const Key = union(enum) {...@@ -2148,12 +2148,26 @@ pub const Key = union(enum) {
2148 };2148 };
21492149
2150 pub const SpirvType = extern struct {2150 pub const SpirvType = extern struct {
2151 /// A `spirv_reify` instruction.2151 /// If tag is `.image`, this is the sampled type or `.none` if `usage` is `.storage`.
2152 zir_index: TrackedInst.Index,2152 /// If tag is `.sampled_image`, this is the image type.
2153 /// Always 0.2153 /// If tag is `.runtime_array`, this is the element type.
2154 padding: u32 = 0,2154 /// Otherwise this is `.none`.
2155 /// A hash of this type's attributes generated by Sema.2155 ty: Index,
2156 type_hash: u64,2156 flags: Flags,
2157
2158 pub const Flags = packed struct(u32) {
2159 tag: @typeInfo(std.lang.Type.Spirv).@"union".tag_type.?,
2160 // Image type flags
2161 usage: @typeInfo(std.lang.Type.Spirv.Image.Usage).@"union".tag_type.?,
2162 format: std.lang.Type.Spirv.Image.Format,
2163 dim: std.lang.Type.Spirv.Image.Dimensionality,
2164 depth: std.lang.Type.Spirv.Image.Depth,
2165 access: std.lang.Type.Spirv.Image.Access,
2166 is_arrayed: bool,
2167 is_multisampled: bool,
2168
2169 _: u16 = 0,
2170 };
2157 };2171 };
21582172
2159 pub const FuncType = struct {2173 pub const FuncType = struct {
...@@ -5054,6 +5068,7 @@ pub const Tag = enum(u8) {...@@ -5054,6 +5068,7 @@ pub const Tag = enum(u8) {
5054 const EnumTag = Key.EnumTag;5068 const EnumTag = Key.EnumTag;
5055 const Union = Key.Union;5069 const Union = Key.Union;
5056 const TypePointer = Key.PtrType;5070 const TypePointer = Key.PtrType;
5071 const TypeSpirv = Key.SpirvType;
50575072
5058 const struct_packed_encoding = .{5073 const struct_packed_encoding = .{
5059 .summary = .@"{.payload.name%summary#\"}",5074 .summary = .@"{.payload.name%summary#\"}",
...@@ -5266,7 +5281,7 @@ pub const Tag = enum(u8) {...@@ -5266,7 +5281,7 @@ pub const Tag = enum(u8) {
5266 },5281 },
5267 .type_enum_explicit = enum_explicit_encoding,5282 .type_enum_explicit = enum_explicit_encoding,
5268 .type_enum_nonexhaustive = enum_explicit_encoding,5283 .type_enum_nonexhaustive = enum_explicit_encoding,
5269 .type_spirv = .{ .summary = .@"{.payload.name%summary#\"}", .payload = Tag.TypeSpirv },5284 .type_spirv = .{ .payload = Tag.TypeSpirv },
5270 .type_opaque = .{5285 .type_opaque = .{
5271 .summary = .@"{.payload.name%summary#\"}",5286 .summary = .@"{.payload.name%summary#\"}",
5272 .payload = TypeOpaque,5287 .payload = TypeOpaque,
...@@ -5723,34 +5738,6 @@ pub const Tag = enum(u8) {...@@ -5723,34 +5738,6 @@ pub const Tag = enum(u8) {
5723 name_nav: Nav.Index.Optional,5738 name_nav: Nav.Index.Optional,
5724 namespace: NamespaceIndex,5739 namespace: NamespaceIndex,
5725 };5740 };
5726
5727 /// Trailing:
5728 /// 0. type_hash: PackedU64
5729 pub const TypeSpirv = struct {
5730 name: NullTerminatedString,
5731 /// The index of the `reify_spirv_type` instruction.
5732 zir_index: TrackedInst.Index,
5733 /// If tag is `.image`, this is the sampled type or `.none` if `usage` is `.storage`.
5734 /// If tag is `.sampled_image`, this is the image type.
5735 /// If tag is `.runtime_array`, this is the element type.
5736 /// Otherwise this is `.none`.
5737 ty: Index,
5738 flags: Flags,
5739
5740 pub const Flags = packed struct(u32) {
5741 tag: @typeInfo(std.lang.Type.Spirv).@"union".tag_type.?,
5742 // Image type flags
5743 usage: @typeInfo(std.lang.Type.Spirv.Image.Usage).@"union".tag_type.?,
5744 format: std.lang.Type.Spirv.Image.Format,
5745 dim: std.lang.Type.Spirv.Image.Dimensionality,
5746 depth: std.lang.Type.Spirv.Image.Depth,
5747 access: std.lang.Type.Spirv.Image.Access,
5748 is_arrayed: bool,
5749 is_multisampled: bool,
5750
5751 _: u16 = 0,
5752 };
5753 };
5754};5741};
57555742
5756/// Differentiates between user-provided and compiler-generated backing types for packed and tagged types.5743/// Differentiates between user-provided and compiler-generated backing types for packed and tagged types.
...@@ -6634,11 +6621,10 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {...@@ -6634,11 +6621,10 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
6634 };6621 };
6635 } },6622 } },
6636 .type_spirv => .{ .spirv_type = ns: {6623 .type_spirv => .{ .spirv_type = ns: {
6637 const extra_list = unwrapped_index.getExtra(ip);6624 const extra = extraData(unwrapped_index.getExtra(ip), Tag.TypeSpirv, data);
6638 const extra = extraDataTrail(extra_list, Tag.TypeSpirv, data);
6639 break :ns .{6625 break :ns .{
6640 .zir_index = extra.data.zir_index,6626 .ty = extra.ty,
6641 .type_hash = extraData(extra_list, PackedU64, extra.end).get(),6627 .flags = extra.flags,
6642 };6628 };
6643 } },6629 } },
6644 .type_opaque => .{ .opaque_type = ns: {6630 .type_opaque => .{ .opaque_type = ns: {
...@@ -8794,15 +8780,11 @@ pub fn getReifiedSpirvType(...@@ -8794,15 +8780,11 @@ pub fn getReifiedSpirvType(
8794 gpa: Allocator,8780 gpa: Allocator,
8795 io: Io,8781 io: Io,
8796 tid: Zcu.PerThread.Id,8782 tid: Zcu.PerThread.Id,
8797 ini: struct {8783 type_spirv: Key.SpirvType,
8798 zir_index: TrackedInst.Index,
8799 type_hash: u64,
8800 type_spirv: Tag.TypeSpirv,
8801 },
8802) Allocator.Error!Index {8784) Allocator.Error!Index {
8803 var gop = try ip.getOrPutKey(gpa, io, tid, .{ .spirv_type = .{8785 var gop = try ip.getOrPutKey(gpa, io, tid, .{ .spirv_type = .{
8804 .zir_index = ini.zir_index,8786 .ty = type_spirv.ty,
8805 .type_hash = ini.type_hash,8787 .flags = type_spirv.flags,
8806 } });8788 } });
8807 defer gop.deinit();8789 defer gop.deinit();
8808 if (gop == .existing) return gop.existing;8790 if (gop == .existing) return gop.existing;
...@@ -8812,11 +8794,8 @@ pub fn getReifiedSpirvType(...@@ -8812,11 +8794,8 @@ pub fn getReifiedSpirvType(
8812 const extra = local.getMutableExtra(gpa, io);8794 const extra = local.getMutableExtra(gpa, io);
8813 try items.ensureUnusedCapacity(1);8795 try items.ensureUnusedCapacity(1);
88148796
8815 try extra.ensureUnusedCapacity(@typeInfo(Tag.TypeSpirv).@"struct".field_names.len +8797 try extra.ensureUnusedCapacity(@typeInfo(Tag.TypeSpirv).@"struct".field_names.len);
8816 2 // type_hash: PackedU648798 const extra_index = addExtraAssumeCapacity(extra, type_spirv);
8817 );
8818 const extra_index = addExtraAssumeCapacity(extra, ini.type_spirv);
8819 _ = addExtraAssumeCapacity(extra, PackedU64.init(ini.type_hash));
88208799
8821 items.appendAssumeCapacity(.{ .tag = .type_spirv, .data = extra_index });8800 items.appendAssumeCapacity(.{ .tag = .type_spirv, .data = extra_index });
8822 return gop.put();8801 return gop.put();
...@@ -10711,7 +10690,7 @@ fn dumpStatsFallible(ip: *const InternPool, w: *Io.Writer, arena: Allocator) !vo...@@ -10711,7 +10690,7 @@ fn dumpStatsFallible(ip: *const InternPool, w: *Io.Writer, arena: Allocator) !vo
10711 .type_optional => 0,10690 .type_optional => 0,
10712 .type_anyframe => 0,10691 .type_anyframe => 0,
10713 .type_error_union => @sizeOf(Key.ErrorUnionType),10692 .type_error_union => @sizeOf(Key.ErrorUnionType),
10714 .type_spirv => @sizeOf(Tag.TypeSpirv) + @sizeOf(PackedU64),10693 .type_spirv => @sizeOf(Tag.TypeSpirv),
10715 .type_anyerror_union => 0,10694 .type_anyerror_union => 0,
10716 .type_error_set => b: {10695 .type_error_set => b: {
10717 const info = extraData(extra_list, Tag.ErrorSet, data);10696 const info = extraData(extra_list, Tag.ErrorSet, data);
src/Sema.zig+34-39
...@@ -8629,6 +8629,20 @@ fn checkParamType(...@@ -8629,6 +8629,20 @@ fn checkParamType(
8629 if (param_is_noalias and !param_ty.isGenericPoison() and !param_ty.isPtrAtRuntime(zcu) and !param_ty.isSliceAtRuntime(zcu)) {8629 if (param_is_noalias and !param_ty.isGenericPoison() and !param_ty.isPtrAtRuntime(zcu) and !param_ty.isSliceAtRuntime(zcu)) {
8630 return sema.fail(block, param_src, "non-pointer parameter declared noalias", .{});8630 return sema.fail(block, param_src, "non-pointer parameter declared noalias", .{});
8631 }8631 }
8632 switch (target.os.tag) {
8633 .vulkan, .opengl => if (cc != .@"inline" and param_ty.isPtrAtRuntime(zcu)) {
8634 switch (param_ty.ptrAddressSpace(zcu)) {
8635 .input, .output => |as| return sema.failWithOwnedErrorMsg(block, msg: {
8636 const msg = try sema.errMsg(param_src, "function parameter cannot be a pointer in '{s}' address space", .{@tagName(as)});
8637 errdefer msg.destroy(sema.gpa);
8638 try sema.errNote(param_src, msg, "mark the function as 'inline' so the parameter is substituted at call sites", .{});
8639 break :msg msg;
8640 }),
8641 else => {},
8642 }
8643 },
8644 else => {},
8645 }
8632}8646}
86338647
8634fn checkReturnTypeAndCallConv(8648fn checkReturnTypeAndCallConv(
...@@ -20530,23 +20544,9 @@ fn zirReifySpirvType(...@@ -20530,23 +20544,9 @@ fn zirReifySpirvType(
20530 return sema.failWithUseOfUndef(block, operand_src, null);20544 return sema.failWithUseOfUndef(block, operand_src, null);
20531 }20545 }
2053220546
20533 // TODO: use a longer hash!
20534 var hasher = std.hash.Wyhash.init(0);
20535 std.hash.autoHash(&hasher, union_val.tag);
20536
20537 const name = try ip.getOrPutStringFmt(
20538 gpa,
20539 io,
20540 pt.tid,
20541 "{f}__SpirvType_{d}",
20542 .{ block.type_name_ctx.fmt(ip), @intFromEnum(inst) },
20543 .no_embedded_nulls,
20544 );
20545 const tag = try sema.interpretStdLangType(block, src, .fromInterned(union_val.tag), @typeInfo(std.lang.Type.Spirv).@"union".tag_type.?);20547 const tag = try sema.interpretStdLangType(block, src, .fromInterned(union_val.tag), @typeInfo(std.lang.Type.Spirv).@"union".tag_type.?);
20546 const ip_data: InternPool.Tag.TypeSpirv = switch (tag) {20548 const ip_data: InternPool.Key.SpirvType = switch (tag) {
20547 .sampler => .{20549 .sampler => .{
20548 .name = name,
20549 .zir_index = tracked_inst,
20550 .ty = .none,20550 .ty = .none,
20551 .flags = .{20551 .flags = .{
20552 .tag = .sampler,20552 .tag = .sampler,
...@@ -20640,20 +20640,9 @@ fn zirReifySpirvType(...@@ -20640,20 +20640,9 @@ fn zirReifySpirvType(
20640 else => {},20640 else => {},
20641 }20641 }
2064220642
20643 std.hash.autoHash(&hasher, usage_tag);
20644 std.hash.autoHash(&hasher, format);
20645 std.hash.autoHash(&hasher, dim);
20646 std.hash.autoHash(&hasher, depth);
20647 std.hash.autoHash(&hasher, access);
20648 std.hash.autoHash(&hasher, arrayed);
20649 std.hash.autoHash(&hasher, multisampled);
20650
20651 break :ip_data .{20643 break :ip_data .{
20652 .name = name,
20653 .zir_index = tracked_inst,
20654 .ty = blk: {20644 .ty = blk: {
20655 const sampled_type = usage_val.unionPayload(zcu).toType();20645 const sampled_type = usage_val.unionPayload(zcu).toType();
20656 std.hash.autoHash(&hasher, sampled_type.toIntern());
2065720646
20658 if (target.os.tag != .opencl and sampled_type.toIntern() == .void_type) {20647 if (target.os.tag != .opencl and sampled_type.toIntern() == .void_type) {
20659 return sema.fail(block, operand_src, "'void' type for '{t}' field is only valid under the 'opencl' os", .{usage_tag});20648 return sema.fail(block, operand_src, "'void' type for '{t}' field is only valid under the 'opencl' os", .{usage_tag});
...@@ -20726,10 +20715,7 @@ fn zirReifySpirvType(...@@ -20726,10 +20715,7 @@ fn zirReifySpirvType(
20726 if (image_info.usage != .sampled) {20715 if (image_info.usage != .sampled) {
20727 return sema.fail(block, operand_src, "'sampled_image' element must be an image with 'usage = .sampled'", .{});20716 return sema.fail(block, operand_src, "'sampled_image' element must be an image with 'usage = .sampled'", .{});
20728 }20717 }
20729 std.hash.autoHash(&hasher, union_val.val);
20730 break :blk .{20718 break :blk .{
20731 .name = name,
20732 .zir_index = tracked_inst,
20733 .ty = union_val.val,20719 .ty = union_val.val,
20734 .flags = .{20720 .flags = .{
20735 .tag = tag,20721 .tag = tag,
...@@ -20754,10 +20740,7 @@ fn zirReifySpirvType(...@@ -20754,10 +20740,7 @@ fn zirReifySpirvType(
20754 {20740 {
20755 return sema.fail(block, operand_src, "'runtime_array' of 'runtime_array' is not allowed under the 'vulkan' os", .{});20741 return sema.fail(block, operand_src, "'runtime_array' of 'runtime_array' is not allowed under the 'vulkan' os", .{});
20756 }20742 }
20757 std.hash.autoHash(&hasher, union_val.val);
20758 break :blk .{20743 break :blk .{
20759 .name = name,
20760 .zir_index = tracked_inst,
20761 .ty = union_val.val,20744 .ty = union_val.val,
20762 .flags = .{20745 .flags = .{
20763 .tag = tag,20746 .tag = tag,
...@@ -20773,11 +20756,7 @@ fn zirReifySpirvType(...@@ -20773,11 +20756,7 @@ fn zirReifySpirvType(
20773 },20756 },
20774 };20757 };
2077520758
20776 return .fromIntern(try ip.getReifiedSpirvType(gpa, io, pt.tid, .{20759 return .fromIntern(try ip.getReifiedSpirvType(gpa, io, pt.tid, ip_data));
20777 .zir_index = tracked_inst,
20778 .type_hash = hasher.final(),
20779 .type_spirv = ip_data,
20780 }));
20781}20760}
2078220761
20783fn resolveVaListRef(sema: *Sema, block: *Block, src: LazySrcLoc, zir_ref: Zir.Inst.Ref) CompileError!Air.Inst.Ref {20762fn resolveVaListRef(sema: *Sema, block: *Block, src: LazySrcLoc, zir_ref: Zir.Inst.Ref) CompileError!Air.Inst.Ref {
...@@ -24966,12 +24945,28 @@ fn zirBuiltinExtern(...@@ -24966,12 +24945,28 @@ fn zirBuiltinExtern(
24966 }24945 }
2496724946
24968 if (options.decoration) |decoration| switch (decoration) {24947 if (options.decoration) |decoration| switch (decoration) {
24969 .flat => if (ptr_info.flags.address_space != .input) {24948 .flat => switch (ptr_info.flags.address_space) {
24970 return sema.fail(block, options_src, "'flat' decoration requires 'input' address space", .{});24949 .input, .output => {},
24950 else => return sema.fail(block, options_src, "\"flat\" decoration requires \"input\" or \"output\" address space", .{}),
24971 },24951 },
24972 .location, .descriptor => {},24952 .location, .descriptor => {},
24973 };24953 };
2497424954
24955 switch (zcu.getTarget().os.tag) {
24956 .vulkan, .opengl => switch (ptr_info.flags.address_space) {
24957 .storage_buffer, .uniform, .push_constant => if (ptr_info.flags.size != .one) {
24958 return sema.failWithOwnedErrorMsg(block, msg: {
24959 const msg = try sema.errMsg(ty_src, "extern in '{s}' address space must be a single-item pointer to a struct", .{@tagName(ptr_info.flags.address_space)});
24960 errdefer msg.destroy(sema.gpa);
24961 try sema.errNote(ty_src, msg, "wrap the element type in a struct containing a runtime-sized array", .{});
24962 break :msg msg;
24963 });
24964 },
24965 else => {},
24966 },
24967 else => {},
24968 }
24969
24975 // TODO: error for threadlocal functions, non-const functions, etc24970 // TODO: error for threadlocal functions, non-const functions, etc
2497624971
24977 const extern_val = try pt.getExtern(.{24972 const extern_val = try pt.getExtern(.{
src/Sema/type_resolution.zig+4-1
...@@ -87,12 +87,15 @@ fn ensureLayoutResolvedInner(sema: *Sema, ty: Type, orig_ty: Type, reason: *cons...@@ -87,12 +87,15 @@ fn ensureLayoutResolvedInner(sema: *Sema, ty: Type, orig_ty: Type, reason: *cons
87 .ptr_type,87 .ptr_type,
88 .anyframe_type,88 .anyframe_type,
89 .simple_type,89 .simple_type,
90 .spirv_type,
91 .opaque_type,90 .opaque_type,
92 .error_set_type,91 .error_set_type,
93 .inferred_error_set_type,92 .inferred_error_set_type,
94 => {},93 => {},
9594
95 .spirv_type => if (ty.isSpirvRuntimeArray(zcu)) {
96 return ensureLayoutResolvedInner(sema, ty.childType(zcu), orig_ty, reason);
97 },
98
96 .func_type => |func_type| {99 .func_type => |func_type| {
97 for (func_type.param_types.get(ip)) |param_ty| {100 for (func_type.param_types.get(ip)) |param_ty| {
98 try ensureLayoutResolvedInner(sema, .fromInterned(param_ty), orig_ty, reason);101 try ensureLayoutResolvedInner(sema, .fromInterned(param_ty), orig_ty, reason);
src/Type.zig+15-2
...@@ -619,8 +619,21 @@ pub fn print(ty: Type, writer: *std.Io.Writer, pt: Zcu.PerThread, ctx: ?*Compari...@@ -619,8 +619,21 @@ pub fn print(ty: Type, writer: *std.Io.Writer, pt: Zcu.PerThread, ctx: ?*Compari
619 try writer.print("{f}", .{name.fmt(ip)});619 try writer.print("{f}", .{name.fmt(ip)});
620 },620 },
621 .spirv_type => {621 .spirv_type => {
622 const name = ip.loadSpirvType(ty.toIntern()).name;622 const info = ip.loadSpirvType(ty.toIntern());
623 try writer.print("{f}", .{name.fmt(ip)});623 switch (info.flags.tag) {
624 .sampler => try writer.writeAll("@SpirvType(.sampler)"),
625 .image => try writer.writeAll("@SpirvType(.image)"),
626 .sampled_image => {
627 try writer.writeAll("@SpirvType(.sampled_image, ");
628 try print(Type.fromInterned(info.ty), writer, pt, ctx);
629 try writer.writeAll(")");
630 },
631 .runtime_array => {
632 try writer.writeAll("@SpirvType(.runtime_array, ");
633 try print(Type.fromInterned(info.ty), writer, pt, ctx);
634 try writer.writeAll(")");
635 },
636 }
624 },637 },
625 .func_type => |fn_info| {638 .func_type => |fn_info| {
626 if (fn_info.is_noinline) {639 if (fn_info.is_noinline) {
src/codegen/spirv/CodeGen.zig+186-52
...@@ -17,6 +17,8 @@ uav_link: std.AutoHashMapUnmanaged(struct { InternPool.Index, spec.StorageClass...@@ -17,6 +17,8 @@ uav_link: std.AutoHashMapUnmanaged(struct { InternPool.Index, spec.StorageClass
17entry_points: std.array_hash_map.Auto(Id, EntryPoint) = .empty,17entry_points: std.array_hash_map.Auto(Id, EntryPoint) = .empty,
18error_buffer: ?Decl.Index = null,18error_buffer: ?Decl.Index = null,
19struct_types: std.array_hash_map.Custom(StructType, Id, StructType.HashContext, true) = .empty,19struct_types: std.array_hash_map.Custom(StructType, Id, StructType.HashContext, true) = .empty,
20/// SPIR-V ids of OpVariables whose pointee is a Block struct
21block_var_ids: std.AutoHashMapUnmanaged(Id, void) = .empty,
20builtins: std.AutoHashMapUnmanaged(struct { spec.BuiltIn, spec.StorageClass }, Decl.Index) = .empty,22builtins: std.AutoHashMapUnmanaged(struct { spec.BuiltIn, spec.StorageClass }, Decl.Index) = .empty,
21sections: struct {23sections: struct {
22 // Module layout, according to SPIR-V Spec section 2.4, "Logical Layout of a Module".24 // Module layout, according to SPIR-V Spec section 2.4, "Logical Layout of a Module".
...@@ -181,6 +183,7 @@ pub fn deinit(cg: *CodeGen) void {...@@ -181,6 +183,7 @@ pub fn deinit(cg: *CodeGen) void {
181 cg.sections.functions.deinit(gpa);183 cg.sections.functions.deinit(gpa);
182184
183 cg.struct_types.deinit(gpa);185 cg.struct_types.deinit(gpa);
186 cg.block_var_ids.deinit(gpa);
184 cg.builtins.deinit(gpa);187 cg.builtins.deinit(gpa);
185188
186 cg.decls.deinit(gpa);189 cg.decls.deinit(gpa);
...@@ -587,6 +590,71 @@ pub fn structType(...@@ -587,6 +590,71 @@ pub fn structType(
587 return result_id;590 return result_id;
588}591}
589592
593/// Returns the layout-decorated variant of `ty` for use inside a Vulkan/OpenGL
594/// interface block. Vulkan forbids nested Block decorations, so recursive calls
595/// always pass `false`.
596///
597/// This is distinct from `resolveType` because SPIR-V forbids such decorations
598/// on the pointee of a Function-scope variable.
599pub fn layoutType(cg: *CodeGen, ty: Type, is_block_root: bool) Error!Id {
600 const gpa = cg.gpa;
601 const zcu = cg.zcu;
602 const ip = &zcu.intern_pool;
603
604 const result_id: Id = switch (ty.zigTypeTag(zcu)) {
605 .@"struct" => id: {
606 const struct_type = ip.loadStructType(ty.toIntern());
607 if (struct_type.layout == .@"packed") return cg.resolveType(ty, .indirect);
608
609 var member_types: std.ArrayList(Id) = .empty;
610 defer member_types.deinit(gpa);
611 const id = cg.allocId();
612 if (is_block_root) try cg.decorate(id, .block);
613 var it = struct_type.iterateRuntimeOrder(ip);
614 while (it.next()) |field_index| {
615 const field_ty: Type = .fromInterned(struct_type.field_types.get(ip)[field_index]);
616 if (!field_ty.hasRuntimeBits(zcu)) continue;
617 try cg.decorateMember(id, @intCast(member_types.items.len), .{ .offset = .{
618 .byte_offset = @intCast(ty.structFieldOffset(field_index, zcu)),
619 } });
620 try member_types.append(gpa, try cg.layoutType(field_ty, false));
621 }
622 try cg.sections.globals.emit(gpa, .OpTypeStruct, .{
623 .id_result = id,
624 .id_ref = member_types.items,
625 });
626 break :id id;
627 },
628 .array => id: {
629 const elem_ty = ty.childType(zcu);
630 const elem_ty_id = try cg.layoutType(elem_ty, false);
631 const total_len = std.math.cast(u32, ty.arrayLenIncludingSentinel(zcu)) orelse
632 return cg.fail("array type of {} elements is too large", .{ty.arrayLenIncludingSentinel(zcu)});
633 const id = try cg.arrayType(try cg.constInt(.u32, total_len), elem_ty_id);
634 if (elem_ty.hasRuntimeBits(zcu)) try cg.decorate(id, .{
635 .array_stride = .{ .array_stride = @intCast(elem_ty.abiSize(zcu)) },
636 });
637 break :id id;
638 },
639 .spirv => if (ty.isSpirvRuntimeArray(zcu)) id: {
640 const elem_ty = ty.childType(zcu);
641 const elem_ty_id = try cg.layoutType(elem_ty, false);
642 const id = cg.allocId();
643 try cg.sections.globals.emit(gpa, .OpTypeRuntimeArray, .{
644 .id_result = id,
645 .element_type = elem_ty_id,
646 });
647 if (elem_ty.hasRuntimeBits(zcu)) try cg.decorate(id, .{
648 .array_stride = .{ .array_stride = @intCast(elem_ty.abiSize(zcu)) },
649 });
650 break :id id;
651 } else return cg.resolveType(ty, .indirect),
652 else => return cg.resolveType(ty, .indirect),
653 };
654
655 return result_id;
656}
657
590pub fn functionType(cg: *CodeGen, return_ty_id: Id, param_type_ids: []const Id) !Id {658pub fn functionType(cg: *CodeGen, return_ty_id: Id, param_type_ids: []const Id) !Id {
591 const result_id = cg.allocId();659 const result_id = cg.allocId();
592 try cg.sections.globals.emit(cg.gpa, .OpTypeFunction, .{660 try cg.sections.globals.emit(cg.gpa, .OpTypeFunction, .{
...@@ -806,7 +874,8 @@ pub fn genNav(cg: *CodeGen, do_codegen: bool) Error!void {...@@ -806,7 +874,8 @@ pub fn genNav(cg: *CodeGen, do_codegen: bool) Error!void {
806 const storage_class = cg.storageClass(nav.resolved.?.@"addrspace");874 const storage_class = cg.storageClass(nav.resolved.?.@"addrspace");
807 assert(storage_class != .generic); // These should be instance globals875 assert(storage_class != .generic); // These should be instance globals
808876
809 const ty_id = try cg.resolveType(ty, .indirect);877 const as = nav.resolved.?.@"addrspace";
878 const ty_id = try cg.pointeeType(as, ty, true);
810 const ptr_ty_id = try cg.ptrType(ty_id, storage_class);879 const ptr_ty_id = try cg.ptrType(ty_id, storage_class);
811880
812 try cg.sections.globals.emit(gpa, .OpVariable, .{881 try cg.sections.globals.emit(gpa, .OpVariable, .{
...@@ -819,15 +888,14 @@ pub fn genNav(cg: *CodeGen, do_codegen: bool) Error!void {...@@ -819,15 +888,14 @@ pub fn genNav(cg: *CodeGen, do_codegen: bool) Error!void {
819 .vulkan, .opengl => {888 .vulkan, .opengl => {
820 switch (storage_class) {889 switch (storage_class) {
821 .uniform, .push_constant, .storage_buffer, .physical_storage_buffer => {890 .uniform, .push_constant, .storage_buffer, .physical_storage_buffer => {
822 if (ty.zigTypeTag(zcu) == .@"struct" and storage_class != .physical_storage_buffer) {
823 try cg.decorate(ty_id, .block);
824 }
825
826 if (ty.hasRuntimeBits(zcu)) {891 if (ty.hasRuntimeBits(zcu)) {
827 try cg.decorate(ptr_ty_id, .{892 try cg.decorate(ptr_ty_id, .{
828 .array_stride = .{ .array_stride = @intCast(ty.abiSize(zcu)) },893 .array_stride = .{ .array_stride = @intCast(ty.abiSize(zcu)) },
829 });894 });
830 try cg.decorateLayout(ty, ty_id);895 if (!cg.needsLayout(as, ty)) try cg.decorateLayout(ty, ty_id);
896 }
897 if (key.is_const and storage_class == .storage_buffer) {
898 try cg.decorate(result_id, .non_writable);
831 }899 }
832 },900 },
833 else => {},901 else => {},
...@@ -1815,6 +1883,9 @@ fn derivePtr(cg: *CodeGen, derivation: Value.PointerDeriveStep) !Id {...@@ -1815,6 +1883,9 @@ fn derivePtr(cg: *CodeGen, derivation: Value.PointerDeriveStep) !Id {
18151883
1816 const nav_ty_id = try cg.resolveType(nav_ty, .indirect);1884 const nav_ty_id = try cg.resolveType(nav_ty, .indirect);
1817 const decl_ptr_ty_id = try cg.ptrType(nav_ty_id, storage_class);1885 const decl_ptr_ty_id = try cg.ptrType(nav_ty_id, storage_class);
1886 if (nav_ty.zigTypeTag(zcu) == .@"struct" and cg.needsLayout(nav.resolved.?.@"addrspace", nav_ty)) {
1887 try cg.block_var_ids.put(gpa, spv_decl.result_id, {});
1888 }
1818 if (decl_ptr_ty_id == ty_id) return spv_decl.result_id;1889 if (decl_ptr_ty_id == ty_id) return spv_decl.result_id;
1819 switch (target.os.tag) {1890 switch (target.os.tag) {
1820 .vulkan, .opengl => return spv_decl.result_id,1891 .vulkan, .opengl => return spv_decl.result_id,
...@@ -1879,7 +1950,6 @@ fn derivePtr(cg: *CodeGen, derivation: Value.PointerDeriveStep) !Id {...@@ -1879,7 +1950,6 @@ fn derivePtr(cg: *CodeGen, derivation: Value.PointerDeriveStep) !Id {
1879 .offset_and_cast => |oac| {1950 .offset_and_cast => |oac| {
1880 const parent_ptr_id = try cg.derivePtr(oac.parent.*);1951 const parent_ptr_id = try cg.derivePtr(oac.parent.*);
1881 const parent_ptr_ty = try oac.parent.ptrType(pt);1952 const parent_ptr_ty = try oac.parent.ptrType(pt);
1882 const result_ty_id = try cg.resolveType(oac.new_ptr_ty, .direct);
18831953
1884 if (oac.new_ptr_ty.ptrInfo(zcu).flags.vector_index != .none) {1954 if (oac.new_ptr_ty.ptrInfo(zcu).flags.vector_index != .none) {
1885 return parent_ptr_id;1955 return parent_ptr_id;
...@@ -1890,19 +1960,36 @@ fn derivePtr(cg: *CodeGen, derivation: Value.PointerDeriveStep) !Id {...@@ -1890,19 +1960,36 @@ fn derivePtr(cg: *CodeGen, derivation: Value.PointerDeriveStep) !Id {
1890 var cur = parent_ptr_ty.childType(zcu);1960 var cur = parent_ptr_ty.childType(zcu);
1891 const dst_child = oac.new_ptr_ty.childType(zcu);1961 const dst_child = oac.new_ptr_ty.childType(zcu);
1892 while (cur.toIntern() != dst_child.toIntern()) {1962 while (cur.toIntern() != dst_child.toIntern()) {
1893 if (cur.zigTypeTag(zcu) == .array) {1963 switch (cur.zigTypeTag(zcu)) {
1894 cur = cur.childType(zcu);1964 .array => {
1895 depth += 1;1965 cur = cur.childType(zcu);
1896 } else break;1966 depth += 1;
1967 },
1968 .@"struct" => {
1969 if (cur.structFieldCount(zcu) == 0) break;
1970 if (cur.structFieldOffset(0, zcu) != 0) break;
1971 cur = cur.fieldType(0, zcu);
1972 depth += 1;
1973 },
1974 else => break,
1975 }
1897 }1976 }
1898 if (depth > 0 and cur.toIntern() == dst_child.toIntern()) {1977 if (cur.toIntern() == dst_child.toIntern()) {
1899 const scratch_top = cg.id_scratch.items.len;1978 if (depth != 0) {
1900 defer cg.id_scratch.shrinkRetainingCapacity(scratch_top);1979 const as = oac.new_ptr_ty.ptrAddressSpace(zcu);
1901 const zero = try cg.constInt(.u32, 0);1980 const child_ty_id = try cg.pointeeType(as, dst_child, false);
1902 const ids = try cg.id_scratch.addManyAsSlice(gpa, depth);1981 const result_ty_id = try cg.ptrType(child_ty_id, cg.storageClass(as));
1903 @memset(ids, zero);1982 const scratch_top = cg.id_scratch.items.len;
1904 return cg.accessChainId(result_ty_id, parent_ptr_id, ids);1983 defer cg.id_scratch.shrinkRetainingCapacity(scratch_top);
1984 const zero = try cg.constInt(.u32, 0);
1985 const ids = try cg.id_scratch.addManyAsSlice(gpa, depth);
1986 @memset(ids, zero);
1987 return cg.accessChainId(result_ty_id, parent_ptr_id, ids);
1988 } else {
1989 return parent_ptr_id;
1990 }
1905 }1991 }
1992 const result_ty_id = try cg.resolveType(oac.new_ptr_ty, .direct);
1906 if (target.os.tag == .opencl) {1993 if (target.os.tag == .opencl) {
1907 const result_ptr_id = cg.allocId();1994 const result_ptr_id = cg.allocId();
1908 try cg.body.emit(gpa, .OpBitcast, .{1995 try cg.body.emit(gpa, .OpBitcast, .{
...@@ -4075,33 +4162,77 @@ fn extractVectorComponent(cg: *CodeGen, result_ty: Type, vector_id: Id, field: u...@@ -4075,33 +4162,77 @@ fn extractVectorComponent(cg: *CodeGen, result_ty: Type, vector_id: Id, field: u
40754162
4076const MemoryOptions = struct {4163const MemoryOptions = struct {
4077 is_volatile: bool = false,4164 is_volatile: bool = false,
4165 ptr_address_space: std.lang.AddressSpace = .generic,
4078};4166};
40794167
4168/// Returns true if a pointee at address space must use the
4169/// layout-decorated variant rather than the bare type.
4170fn needsLayout(cg: *CodeGen, as: std.lang.AddressSpace, pointee_ty: Type) bool {
4171 const target = cg.zcu.getTarget();
4172 if (target.os.tag != .vulkan and target.os.tag != .opengl) return false;
4173 switch (as) {
4174 .uniform, .push_constant, .storage_buffer => {},
4175 else => return false,
4176 }
4177 return switch (pointee_ty.zigTypeTag(cg.zcu)) {
4178 .@"struct", .array => true,
4179 .spirv => pointee_ty.isSpirvRuntimeArray(cg.zcu),
4180 else => false,
4181 };
4182}
4183
4184fn pointeeType(cg: *CodeGen, as: std.lang.AddressSpace, ty: Type, is_block_root: bool) !Id {
4185 return if (cg.needsLayout(as, ty))
4186 cg.layoutType(ty, is_block_root)
4187 else
4188 cg.resolveType(ty, .indirect);
4189}
4190
4191fn convertLayout(cg: *CodeGen, dst_ty_id: Id, src_id: Id, src_ty_id: Id) !Id {
4192 if (dst_ty_id == src_ty_id) return src_id;
4193 const id = cg.allocId();
4194 try cg.body.emit(cg.gpa, .OpCopyLogical, .{
4195 .id_result_type = dst_ty_id,
4196 .id_result = id,
4197 .operand = src_id,
4198 });
4199 return id;
4200}
4201
4080fn load(cg: *CodeGen, value_ty: Type, ptr_id: Id, options: MemoryOptions) !Id {4202fn load(cg: *CodeGen, value_ty: Type, ptr_id: Id, options: MemoryOptions) !Id {
4081 const zcu = cg.zcu;4203 const zcu = cg.zcu;
4082 const alignment: u32 = @intCast(value_ty.abiAlignment(zcu).toByteUnits().?);4204 const alignment: u32 = @intCast(value_ty.abiAlignment(zcu).toByteUnits().?);
4083 const indirect_value_ty_id = try cg.resolveType(value_ty, .indirect);4205 const bare_ty_id = try cg.resolveType(value_ty, .indirect);
4084 const result_id = cg.allocId();4206 const load_ty_id = if (cg.needsLayout(options.ptr_address_space, value_ty))
4085 const access: spec.MemoryAccess.Extended = .{4207 try cg.layoutType(value_ty, cg.block_var_ids.contains(ptr_id))
4086 .@"volatile" = options.is_volatile,4208 else
4087 .aligned = .{ .literal_integer = alignment },4209 bare_ty_id;
4088 };4210 const loaded_id = cg.allocId();
4089 try cg.body.emit(cg.gpa, .OpLoad, .{4211 try cg.body.emit(cg.gpa, .OpLoad, .{
4090 .id_result_type = indirect_value_ty_id,4212 .id_result_type = load_ty_id,
4091 .id_result = result_id,4213 .id_result = loaded_id,
4092 .pointer = ptr_id,4214 .pointer = ptr_id,
4093 .memory_access = access,4215 .memory_access = .{
4216 .@"volatile" = options.is_volatile,
4217 .aligned = .{ .literal_integer = alignment },
4218 },
4094 });4219 });
4220 const result_id = try cg.convertLayout(bare_ty_id, loaded_id, load_ty_id);
4095 return try cg.convertToDirect(value_ty, result_id);4221 return try cg.convertToDirect(value_ty, result_id);
4096}4222}
40974223
4098fn store(cg: *CodeGen, value_ty: Type, ptr_id: Id, value_id: Id, options: MemoryOptions) !void {4224fn store(cg: *CodeGen, value_ty: Type, ptr_id: Id, value_id: Id, options: MemoryOptions) !void {
4099 const indirect_value_id = try cg.convertToIndirect(value_ty, value_id);4225 const bare_value_id = try cg.convertToIndirect(value_ty, value_id);
4100 const access: spec.MemoryAccess.Extended = .{ .@"volatile" = options.is_volatile };4226 const bare_ty_id = try cg.resolveType(value_ty, .indirect);
4227 const store_ty_id = if (cg.needsLayout(options.ptr_address_space, value_ty))
4228 try cg.layoutType(value_ty, cg.block_var_ids.contains(ptr_id))
4229 else
4230 bare_ty_id;
4231 const object_id = try cg.convertLayout(store_ty_id, bare_value_id, bare_ty_id);
4101 try cg.body.emit(cg.gpa, .OpStore, .{4232 try cg.body.emit(cg.gpa, .OpStore, .{
4102 .pointer = ptr_id,4233 .pointer = ptr_id,
4103 .object = indirect_value_id,4234 .object = object_id,
4104 .memory_access = access,4235 .memory_access = .{ .@"volatile" = options.is_volatile },
4105 });4236 });
4106}4237}
41074238
...@@ -5499,6 +5630,8 @@ fn ptrAccessChain(...@@ -5499,6 +5630,8 @@ fn ptrAccessChain(
5499 });5630 });
5500 },5631 },
5501 .vulkan, .opengl => {5632 .vulkan, .opengl => {
5633 assert(target.cpu.has(.spirv, .variable_pointers) or
5634 target.cpu.has(.spirv, .variable_pointers_storage_buffer));
5502 try cg.body.emit(gpa, .OpPtrAccessChain, .{5635 try cg.body.emit(gpa, .OpPtrAccessChain, .{
5503 .id_result_type = result_ty_id,5636 .id_result_type = result_ty_id,
5504 .id_result = result_id,5637 .id_result = result_id,
...@@ -5514,23 +5647,18 @@ fn ptrAccessChain(...@@ -5514,23 +5647,18 @@ fn ptrAccessChain(
55145647
5515fn ptrAdd(cg: *CodeGen, result_ty: Type, ptr_ty: Type, ptr_id: Id, offset_id: Id) !Id {5648fn ptrAdd(cg: *CodeGen, result_ty: Type, ptr_ty: Type, ptr_id: Id, offset_id: Id) !Id {
5516 const zcu = cg.zcu;5649 const zcu = cg.zcu;
5517 const result_ty_id = try cg.resolveType(result_ty, .direct);5650 const as = result_ty.ptrAddressSpace(zcu);
55185651 const child_ty_id = try cg.pointeeType(as, result_ty.childType(zcu), false);
5519 switch (ptr_ty.ptrSize(zcu)) {5652 const result_ty_id = try cg.ptrType(child_ty_id, cg.storageClass(as));
5520 .one => {5653 return switch (ptr_ty.ptrSize(zcu)) {
5521 // Pointer to array5654 .one => cg.accessChainId(result_ty_id, ptr_id, &.{offset_id}),
5522 // TODO: Is this correct?5655 .c, .many => cg.ptrAccessChain(result_ty_id, ptr_id, offset_id, &.{}),
5523 return try cg.accessChainId(result_ty_id, ptr_id, &.{offset_id});5656 .slice => blk: {
5524 },
5525 .c, .many => {
5526 return try cg.ptrAccessChain(result_ty_id, ptr_id, offset_id, &.{});
5527 },
5528 .slice => {
5529 // TODO: This is probably incorrect. A slice should be returned here, though this is what llvm does.5657 // TODO: This is probably incorrect. A slice should be returned here, though this is what llvm does.
5530 const slice_ptr_id = try cg.extractField(result_ty, ptr_id, 0);5658 const slice_ptr_id = try cg.extractField(result_ty, ptr_id, 0);
5531 return try cg.ptrAccessChain(result_ty_id, slice_ptr_id, offset_id, &.{});5659 break :blk cg.ptrAccessChain(result_ty_id, slice_ptr_id, offset_id, &.{});
5532 },5660 },
5533 }5661 };
5534}5662}
55355663
5536fn airPtrAdd(cg: *CodeGen, inst: Air.Inst.Index) !?Id {5664fn airPtrAdd(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
...@@ -6476,16 +6604,16 @@ fn airSliceElemVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id {...@@ -6476,16 +6604,16 @@ fn airSliceElemVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
6476fn ptrElemPtr(cg: *CodeGen, ptr_ty: Type, ptr_id: Id, index_id: Id) !Id {6604fn ptrElemPtr(cg: *CodeGen, ptr_ty: Type, ptr_id: Id, index_id: Id) !Id {
6477 const zcu = cg.zcu;6605 const zcu = cg.zcu;
6478 // Construct new pointer type for the resulting pointer6606 // Construct new pointer type for the resulting pointer
6479 const elem_ty = ptr_ty.indexableElem(zcu);6607 const as = ptr_ty.ptrAddressSpace(zcu);
6480 const elem_ty_id = try cg.resolveType(elem_ty, .indirect);6608 const elem_ty_id = try cg.pointeeType(as, ptr_ty.indexableElem(zcu), false);
6481 const elem_ptr_ty_id = try cg.ptrType(elem_ty_id, cg.storageClass(ptr_ty.ptrAddressSpace(zcu)));6609 const elem_ptr_ty_id = try cg.ptrType(elem_ty_id, cg.storageClass(as));
6482 if (ptr_ty.isSinglePointer(zcu)) {6610 if (ptr_ty.isSinglePointer(zcu)) {
6483 // Pointer-to-array. In this case, the resulting pointer is not of the same type6611 // Pointer-to-array. In this case, the resulting pointer is not of the same type
6484 // as the ptr_ty (we want a *T, not a *[N]T), and hence we need to use accessChain.6612 // as the ptr_ty (we want a *T, not a *[N]T), and hence we need to use accessChain.
6485 return try cg.accessChainId(elem_ptr_ty_id, ptr_id, &.{index_id});6613 return cg.accessChainId(elem_ptr_ty_id, ptr_id, &.{index_id});
6486 } else {6614 } else {
6487 // Resulting pointer type is the same as the ptr_ty, so use ptrAccessChain6615 // Resulting pointer type is the same as the ptr_ty, so use ptrAccessChain
6488 return try cg.ptrAccessChain(elem_ptr_ty_id, ptr_id, index_id, &.{});6616 return cg.ptrAccessChain(elem_ptr_ty_id, ptr_id, index_id, &.{});
6489 }6617 }
6490}6618}
64916619
...@@ -7369,7 +7497,10 @@ fn airLoad(cg: *CodeGen, inst: Air.Inst.Index) !?Id {...@@ -7369,7 +7497,10 @@ fn airLoad(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
7369 break :ptr_id try cg.accessChain(elem_ptr_ty_id, operand_ptr_id, &.{@intFromEnum(index)});7497 break :ptr_id try cg.accessChain(elem_ptr_ty_id, operand_ptr_id, &.{@intFromEnum(index)});
7370 },7498 },
7371 };7499 };
7372 return try cg.load(elem_ty, ptr_id, .{ .is_volatile = ptr_info.flags.is_volatile });7500 return try cg.load(elem_ty, ptr_id, .{
7501 .is_volatile = ptr_info.flags.is_volatile,
7502 .ptr_address_space = ptr_info.flags.address_space,
7503 });
7373}7504}
73747505
7375fn airStore(cg: *CodeGen, inst: Air.Inst.Index) !void {7506fn airStore(cg: *CodeGen, inst: Air.Inst.Index) !void {
...@@ -7441,7 +7572,10 @@ fn airStore(cg: *CodeGen, inst: Air.Inst.Index) !void {...@@ -7441,7 +7572,10 @@ fn airStore(cg: *CodeGen, inst: Air.Inst.Index) !void {
7441 },7572 },
7442 };7573 };
74437574
7444 try cg.store(elem_ty, ptr_id, value_id, .{ .is_volatile = ptr_info.flags.is_volatile });7575 try cg.store(elem_ty, ptr_id, value_id, .{
7576 .is_volatile = ptr_info.flags.is_volatile,
7577 .ptr_address_space = ptr_info.flags.address_space,
7578 });
7445}7579}
74467580
7447fn airRet(cg: *CodeGen, inst: Air.Inst.Index) !void {7581fn airRet(cg: *CodeGen, inst: Air.Inst.Index) !void {
src/link/SpirV.zig+8-4
...@@ -628,14 +628,18 @@ fn emitPreamble(...@@ -628,14 +628,18 @@ fn emitPreamble(
628 if (has_linkage) caps.insert(.linkage);628 if (has_linkage) caps.insert(.linkage);
629629
630 inline for (@typeInfo(spec.Capability).@"enum".field_names) |cap_name| {630 inline for (@typeInfo(spec.Capability).@"enum".field_names) |cap_name| {
631 if (target.cpu.has(.spirv, @field(std.Target.spirv.Feature, cap_name)))631 if (@hasField(std.Target.spirv.Feature, cap_name)) {
632 caps.insert(@field(spec.Capability, cap_name));632 if (target.cpu.has(.spirv, @field(std.Target.spirv.Feature, cap_name)))
633 caps.insert(@field(spec.Capability, cap_name));
634 }
633 }635 }
634 inline for (@typeInfo(spec.Extension).@"enum".field_names) |ext_name| {636 inline for (@typeInfo(spec.Extension).@"enum".field_names) |ext_name| {
635 switch (@field(spec.Extension, ext_name)) {637 switch (@field(spec.Extension, ext_name)) {
636 .v1_0, .v1_1, .v1_2, .v1_3, .v1_4, .v1_5, .v1_6 => {},638 .v1_0, .v1_1, .v1_2, .v1_3, .v1_4, .v1_5, .v1_6 => {},
637 else => if (target.cpu.has(.spirv, @field(std.Target.spirv.Feature, ext_name)))639 else => if (@hasField(std.Target.spirv.Feature, ext_name)) {
638 try exts.put(gpa, ext_name, {}),640 if (target.cpu.has(.spirv, @field(std.Target.spirv.Feature, ext_name)))
641 try exts.put(gpa, ext_name, {});
642 },
639 }643 }
640 }644 }
641645
test/behavior/spirv.zig+29
...@@ -1,3 +1,6 @@...@@ -1,3 +1,6 @@
1const std = @import("std");
2const expect = std.testing.expect;
3
1const Sampler = @SpirvType(.sampler);4const Sampler = @SpirvType(.sampler);
2const Image = @SpirvType(.{ .image = .{5const Image = @SpirvType(.{ .image = .{
3 .usage = .{ .sampled = u32 },6 .usage = .{ .sampled = u32 },
...@@ -45,3 +48,29 @@ test "@SpirvType" {...@@ -45,3 +48,29 @@ test "@SpirvType" {
45 _ = storage_image;48 _ = storage_image;
46 _ = runtime_array;49 _ = runtime_array;
47}50}
51
52test "@SpirvType equality" {
53 try expect(@SpirvType(.sampler) == Sampler);
54 try expect(@SpirvType(.{ .runtime_array = u32 }) == RuntimeArray);
55 try expect(@SpirvType(.{ .sampled_image = Image }) == SampledImage);
56 try expect(@SpirvType(.{ .image = .{
57 .usage = .{ .sampled = u32 },
58 .format = .unknown,
59 .dim = .@"2d",
60 .depth = .unknown,
61 .arrayed = false,
62 .multisampled = false,
63 .access = .unknown,
64 } }) == Image);
65 try expect(@SpirvType(.{ .image = .{
66 .usage = .{ .sampled = u32 },
67 .format = .unknown,
68 .dim = .@"3d",
69 .depth = .unknown,
70 .arrayed = false,
71 .multisampled = false,
72 .access = .unknown,
73 } }) != Image);
74 try expect(@SpirvType(.{ .runtime_array = u32 }) != @SpirvType(.{ .runtime_array = u8 }));
75 try expect(@SpirvType(.sampler) != @SpirvType(.{ .runtime_array = u32 }));
76}
test/cases/compile_errors/extern_spirv_decoration_validation.zig+2-2
...@@ -1,4 +1,4 @@...@@ -1,4 +1,4 @@
1const x = @extern(*addrspace(.output) u32, .{1const x = @extern(*addrspace(.push_constant) u32, .{
2 .name = "x",2 .name = "x",
3 .decoration = .{ .flat = 0 },3 .decoration = .{ .flat = 0 },
4});4});
...@@ -10,4 +10,4 @@ comptime {...@@ -10,4 +10,4 @@ comptime {
10// backend=selfhosted10// backend=selfhosted
11// target=spirv32-vulkan11// target=spirv32-vulkan
12//12//
13// :1:45: error: 'flat' decoration requires 'input' address space13// :1:45: error: "flat" decoration requires "input" or "output" address space
test/cases/compile_errors/extern_spirv_storage_buffer_must_be_single_pointer.zig created+25
...@@ -0,0 +1,25 @@
1const a = @extern([*]addrspace(.storage_buffer) u32, .{
2 .name = "a",
3 .decoration = .{ .descriptor = .{ .set = 0, .binding = 0 } },
4});
5const b = @extern([]addrspace(.uniform) u32, .{
6 .name = "b",
7 .decoration = .{ .descriptor = .{ .set = 0, .binding = 1 } },
8});
9const c = @extern([*c]addrspace(.push_constant) u32, .{ .name = "c" });
10comptime {
11 _ = a;
12 _ = b;
13 _ = c;
14}
15
16// error
17// backend=selfhosted
18// target=spirv32-vulkan
19//
20// :1:19: error: extern in 'storage_buffer' address space must be a single-item pointer to a struct
21// :1:19: note: wrap the element type in a struct containing a runtime-sized array
22// :5:19: error: extern in 'uniform' address space must be a single-item pointer to a struct
23// :5:19: note: wrap the element type in a struct containing a runtime-sized array
24// :9:19: error: extern in 'push_constant' address space must be a single-item pointer to a struct
25// :9:19: note: wrap the element type in a struct containing a runtime-sized array
tools/update_cpu_features.zig+31-18
...@@ -50,19 +50,29 @@ const ArchTarget = struct {...@@ -50,19 +50,29 @@ const ArchTarget = struct {
50 branch_quota: ?usize = null,50 branch_quota: ?usize = null,
51};51};
5252
53const spirv_extra_features = blk: {53const spirv_omitted_capabilities = [_][]const u8{
54 const caps_info = @typeInfo(spirv_spec.Capability).@"enum";54 "shader", // implied by Vulkan/OpenGL targets
55 const exts_info = @typeInfo(spirv_spec.Extension).@"enum";55 "kernel", // implied by OpenCL/AMDHSA targets
56 const caps_len = caps_info.field_names.len;56 "addresses", // implied by OpenCL/AMDHSA targets
57 const exts_len = exts_info.field_names.len;57 "physical_storage_buffer_addresses", // implied by spirv64-vulkan
5858 "linkage", // automatically emitted when externs need linkage decorations
59 var features: [caps_len + exts_len]Feature = undefined;59};
60 for (60const spirv_omitted_extensions = [_][]const u8{
61 caps_info.field_names,61 "SPV_KHR_physical_storage_buffer", // paired with physical_storage_buffer_addresses
62 caps_info.field_values,62};
63 features[0..caps_len],63
64 ) |name, value, *feature| {64const spirv_extra_features: []const Feature = blk: {
65 feature.* = .{65 @setEvalBranchQuota(15_000);
66 var features: []const Feature = &.{};
67
68 cap: for (
69 @typeInfo(spirv_spec.Capability).@"enum".field_names,
70 @typeInfo(spirv_spec.Capability).@"enum".field_values,
71 ) |name, value| {
72 for (spirv_omitted_capabilities) |omitted| {
73 if (std.mem.eql(u8, omitted, name)) continue :cap;
74 }
75 features = features ++ &[_]Feature{.{
66 .zig_name = name,76 .zig_name = name,
67 .desc = "Enable " ++ name ++ " capability",77 .desc = "Enable " ++ name ++ " capability",
68 .deps = &struct {78 .deps = &struct {
...@@ -73,11 +83,14 @@ const spirv_extra_features = blk: {...@@ -73,11 +83,14 @@ const spirv_extra_features = blk: {
73 break :inner out;83 break :inner out;
74 };84 };
75 }.deps,85 }.deps,
76 };86 }};
77 }87 }
7888
79 for (exts_info.field_names, features[caps_len..]) |name, *feature| {89 ext: for (@typeInfo(spirv_spec.Extension).@"enum".field_names) |name| {
80 feature.* = .{90 for (spirv_omitted_extensions) |omitted| {
91 if (std.mem.eql(u8, omitted, name)) continue :ext;
92 }
93 features = features ++ &[_]Feature{.{
81 .zig_name = name,94 .zig_name = name,
82 .desc = "Enable " ++ name ++ " extension",95 .desc = "Enable " ++ name ++ " extension",
83 .deps = if (std.mem.eql(u8, name, "v1_6"))96 .deps = if (std.mem.eql(u8, name, "v1_6"))
...@@ -94,7 +107,7 @@ const spirv_extra_features = blk: {...@@ -94,7 +107,7 @@ const spirv_extra_features = blk: {
94 &.{"v1_0"}107 &.{"v1_0"}
95 else108 else
96 &.{},109 &.{},
97 };110 }};
98 }111 }
99112
100 break :blk features;113 break :blk features;
...@@ -1494,7 +1507,7 @@ const targets = [_]ArchTarget{...@@ -1494,7 +1507,7 @@ const targets = [_]ArchTarget{
1494 .td_name = "SPIRV",1507 .td_name = "SPIRV",
1495 },1508 },
1496 .branch_quota = 2000,1509 .branch_quota = 2000,
1497 .extra_features = &spirv_extra_features,1510 .extra_features = spirv_extra_features,
1498 .extra_cpus = &.{1511 .extra_cpus = &.{
1499 .{1512 .{
1500 .llvm_name = null,1513 .llvm_name = null,