1#![allow(non_snake_case)]
2
3#[cfg(feature = "serialize")]
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug)]
8#[non_exhaustive]
9pub enum FatalError {
10 MissingRegistryElement,
11 IoError(std::io::Error),
12}
13
14impl From<std::io::Error> for FatalError {
15 fn from(v: std::io::Error) -> FatalError {
16 FatalError::IoError(v)
17 }
18}
19
20#[derive(Debug, PartialEq, Eq)]
26#[non_exhaustive]
27pub enum Error {
28 UnexpectedElement {
29 xpath: String,
30 name: String,
31 },
32 UnexpectedAttribute {
33 xpath: String,
34 name: String,
35 }, UnexpectedAttributeValue {
37 xpath: String,
38 name: String,
39 value: String,
40 },
41 MissingElement {
42 xpath: String,
43 name: String,
44 },
45 MissingAttribute {
46 xpath: String,
47 name: String,
48 },
49 SchemaViolation {
50 xpath: String,
51 desc: String,
52 },
53 ParseIntError {
54 xpath: String,
55 text: String,
56 error: std::num::ParseIntError,
57 },
58 Internal {
59 desc: &'static str,
60 },
61}
62
63#[derive(Debug, Clone, PartialEq, Eq, Default)]
68#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
69pub struct Registry(pub Vec<RegistryChild>);
70
71#[derive(Debug, Clone, PartialEq, Eq)]
73#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
74#[non_exhaustive]
75pub enum RegistryChild {
76 Comment(String),
78
79 VendorIds(VendorIds),
81
82 Platforms(Platforms),
84
85 Tags(Tags),
87
88 Types(Types),
92
93 Enums(Enums),
95
96 Commands(Commands),
98
99 Feature(Feature),
101
102 Extensions(Extensions),
104
105 Formats(Formats),
106
107 SpirvExtensions(SpirvExtensions),
108
109 SpirvCapabilities(SpirvCapabilities),
110
111 Sync(Sync),
112
113 VideoCodecs(VideoCodecs),
114
115 DynamicStates(DynamicStates),
116}
117
118pub type VendorIds = CommentedChildren<VendorId>;
119
120#[derive(Debug, Clone, PartialEq, Eq, Default)]
125#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
126#[non_exhaustive]
127pub struct VendorId {
128 pub name: String,
130
131 pub id: u32,
133
134 #[cfg_attr(
136 feature = "serialize",
137 serde(default, skip_serializing_if = "is_default")
138 )]
139 pub comment: Option<String>,
140}
141
142pub type Platforms = CommentedChildren<Platform>;
143
144#[derive(Debug, Clone, PartialEq, Eq, Default)]
151#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
152#[non_exhaustive]
153pub struct Platform {
154 pub name: String,
156
157 pub protect: String,
159
160 #[cfg_attr(
162 feature = "serialize",
163 serde(default, skip_serializing_if = "is_default")
164 )]
165 pub comment: Option<String>,
166}
167
168pub type Tags = CommentedChildren<Tag>;
169
170#[derive(Debug, Clone, PartialEq, Eq, Default)]
176#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
177#[non_exhaustive]
178pub struct Tag {
179 pub name: String,
181 pub author: String,
183 pub contact: String,
185}
186
187pub type Types = CommentedChildren<TypesChild>;
188
189#[derive(Debug, Clone, PartialEq, Eq)]
191#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
192#[non_exhaustive]
193pub enum TypesChild {
194 Type(Type),
195 Comment(String),
196}
197
198#[derive(Debug, Clone, PartialEq, Eq, Default)]
199#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
200#[non_exhaustive]
201pub struct Type {
202 #[cfg_attr(
203 feature = "serialize",
204 serde(default, skip_serializing_if = "is_default")
205 )]
206 pub name: Option<String>,
207
208 #[cfg_attr(
209 feature = "serialize",
210 serde(default, skip_serializing_if = "is_default")
211 )]
212 pub alias: Option<String>,
213
214 #[cfg_attr(
215 feature = "serialize",
216 serde(default, skip_serializing_if = "is_default")
217 )]
218 pub api: Option<String>,
219
220 #[cfg_attr(
221 feature = "serialize",
222 serde(default, skip_serializing_if = "is_default")
223 )]
224 pub requires: Option<String>,
225
226 #[cfg_attr(
227 feature = "serialize",
228 serde(default, skip_serializing_if = "is_default")
229 )]
230 pub category: Option<String>,
231
232 #[cfg_attr(
233 feature = "serialize",
234 serde(default, skip_serializing_if = "is_default")
235 )]
236 pub comment: Option<String>,
237
238 #[cfg_attr(
239 feature = "serialize",
240 serde(default, skip_serializing_if = "is_default")
241 )]
242 pub parent: Option<String>,
243
244 #[cfg_attr(
245 feature = "serialize",
246 serde(default, skip_serializing_if = "is_default")
247 )]
248 pub returnedonly: Option<String>,
249
250 #[cfg_attr(
251 feature = "serialize",
252 serde(default, skip_serializing_if = "is_default")
253 )]
254 pub structextends: Option<String>,
255
256 #[cfg_attr(
257 feature = "serialize",
258 serde(default, skip_serializing_if = "is_default")
259 )]
260 pub allowduplicate: Option<String>,
261
262 #[cfg_attr(
263 feature = "serialize",
264 serde(default, skip_serializing_if = "is_default")
265 )]
266 pub objtypeenum: Option<String>,
267
268 #[cfg_attr(
269 feature = "serialize",
270 serde(default, skip_serializing_if = "is_default")
271 )]
272 pub requiredlimittype: Option<String>,
273
274 #[cfg_attr(
275 feature = "serialize",
276 serde(default, skip_serializing_if = "is_default")
277 )]
278 pub bitvalues: Option<String>,
279
280 #[cfg_attr(
281 feature = "serialize",
282 serde(default, skip_serializing_if = "is_default")
283 )]
284 pub spec: TypeSpec,
285
286 #[cfg_attr(
287 feature = "serialize",
288 serde(default, skip_serializing_if = "is_default")
289 )]
290 pub deprecated: Option<String>,
291}
292
293#[derive(Debug, Clone, PartialEq, Eq)]
295#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
296#[non_exhaustive]
297pub enum TypeSpec {
298 None,
299 Code(TypeCode),
300 Members(Vec<TypeMember>),
301 Funcpointer(FuncpointerCode),
302}
303
304impl Default for TypeSpec {
305 fn default() -> Self {
306 TypeSpec::None
307 }
308}
309
310#[derive(Debug, Clone, PartialEq, Eq, Default)]
311#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
312#[non_exhaustive]
313pub struct TypeCode {
314 pub code: String,
315
316 #[cfg_attr(
317 feature = "serialize",
318 serde(default, skip_serializing_if = "is_default")
319 )]
320 pub markup: Vec<TypeCodeMarkup>,
321}
322
323#[derive(Debug, Clone, PartialEq, Eq)]
324#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
325#[non_exhaustive]
326pub enum TypeCodeMarkup {
327 Name(String),
328 Type(String),
329 ApiEntry(String),
330}
331
332#[derive(Debug, Clone, PartialEq, Eq, Default)]
333#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
334#[non_exhaustive]
335pub struct FuncpointerCode {
336 pub code: String,
338
339 #[cfg_attr(
341 feature = "serialize",
342 serde(default, skip_serializing_if = "is_default")
343 )]
344 pub markup: Vec<TypeCodeMarkup>,
345
346 pub proto: FuncpointerProtoMarkup,
347
348 #[cfg_attr(
349 feature = "serialize",
350 serde(default, skip_serializing_if = "is_default")
351 )]
352 pub params: Vec<FuncpointerParamMarkup>,
353}
354
355pub type FuncpointerProtoMarkup = NameWithType;
356
357pub type FuncpointerParamMarkup = NameWithType;
363
364#[derive(Debug, Clone, PartialEq, Eq)]
366#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
367#[non_exhaustive]
368pub enum TypeMember {
369 Comment(String),
371
372 Definition(TypeMemberDefinition),
374}
375
376#[derive(Debug, Clone, PartialEq, Eq, Default)]
377#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
378#[non_exhaustive]
379pub struct TypeMemberDefinition {
380 #[cfg_attr(
381 feature = "serialize",
382 serde(default, skip_serializing_if = "is_default")
383 )]
384 pub len: Option<String>,
385
386 #[cfg_attr(
387 feature = "serialize",
388 serde(default, skip_serializing_if = "is_default")
389 )]
390 pub altlen: Option<String>,
391
392 #[cfg_attr(
393 feature = "serialize",
394 serde(default, skip_serializing_if = "is_default")
395 )]
396 pub externsync: Option<String>,
397
398 #[cfg_attr(
399 feature = "serialize",
400 serde(default, skip_serializing_if = "is_default")
401 )]
402 pub optional: Option<String>,
403
404 #[cfg_attr(
405 feature = "serialize",
406 serde(default, skip_serializing_if = "is_default")
407 )]
408 pub selector: Option<String>,
409
410 #[cfg_attr(
411 feature = "serialize",
412 serde(default, skip_serializing_if = "is_default")
413 )]
414 pub selection: Option<String>,
415
416 #[cfg_attr(
417 feature = "serialize",
418 serde(default, skip_serializing_if = "is_default")
419 )]
420 pub noautovalidity: Option<String>,
421
422 #[cfg_attr(
423 feature = "serialize",
424 serde(default, skip_serializing_if = "is_default")
425 )]
426 pub validextensionstructs: Option<String>,
427
428 #[cfg_attr(
429 feature = "serialize",
430 serde(default, skip_serializing_if = "is_default")
431 )]
432 pub values: Option<String>,
433
434 #[cfg_attr(
435 feature = "serialize",
436 serde(default, skip_serializing_if = "is_default")
437 )]
438 pub limittype: Option<String>,
439
440 #[cfg_attr(
441 feature = "serialize",
442 serde(default, skip_serializing_if = "is_default")
443 )]
444 pub objecttype: Option<String>,
445
446 #[cfg_attr(
447 feature = "serialize",
448 serde(default, skip_serializing_if = "is_default")
449 )]
450 pub deprecated: Option<String>,
451
452 #[cfg_attr(
453 feature = "serialize",
454 serde(default, skip_serializing_if = "is_default")
455 )]
456 pub api: Option<String>,
457
458 #[cfg_attr(
459 feature = "serialize",
460 serde(default, skip_serializing_if = "is_default")
461 )]
462 pub code: String,
463
464 #[cfg_attr(
465 feature = "serialize",
466 serde(default, skip_serializing_if = "is_default")
467 )]
468 pub markup: Vec<TypeMemberMarkup>,
469
470 #[cfg_attr(
471 feature = "serialize",
472 serde(default, skip_serializing_if = "is_default")
473 )]
474 pub featurelink: Option<String>,
475
476 #[cfg_attr(
477 feature = "serialize",
478 serde(default, skip_serializing_if = "is_default")
479 )]
480 pub flagsextend: Option<String>,
481
482 #[cfg_attr(
483 feature = "serialize",
484 serde(default, skip_serializing_if = "is_default")
485 )]
486 pub flagsextendmember: Option<String>,
487}
488
489#[derive(Debug, Clone, PartialEq, Eq)]
490#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
491#[non_exhaustive]
492pub enum TypeMemberMarkup {
493 Name(String),
494 Type(String),
495 Enum(String),
496 Comment(String),
497}
498
499#[derive(Debug, Clone, PartialEq, Eq, Default)]
500#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
501#[non_exhaustive]
502pub struct Enums {
503 #[cfg_attr(
504 feature = "serialize",
505 serde(default, skip_serializing_if = "is_default")
506 )]
507 pub name: Option<String>,
508
509 #[cfg_attr(
510 feature = "serialize",
511 serde(default, skip_serializing_if = "is_default")
512 )]
513 pub kind: Option<String>,
514
515 #[cfg_attr(
516 feature = "serialize",
517 serde(default, skip_serializing_if = "is_default")
518 )]
519 pub start: Option<i64>,
520
521 #[cfg_attr(
522 feature = "serialize",
523 serde(default, skip_serializing_if = "is_default")
524 )]
525 pub end: Option<i64>,
526
527 #[cfg_attr(
528 feature = "serialize",
529 serde(default, skip_serializing_if = "is_default")
530 )]
531 pub vendor: Option<String>,
532
533 #[cfg_attr(
534 feature = "serialize",
535 serde(default, skip_serializing_if = "is_default")
536 )]
537 pub comment: Option<String>,
538
539 #[cfg_attr(
540 feature = "serialize",
541 serde(default, skip_serializing_if = "is_default")
542 )]
543 pub children: Vec<EnumsChild>,
544
545 #[cfg_attr(
546 feature = "serialize",
547 serde(default, skip_serializing_if = "is_default")
548 )]
549 pub bitwidth: Option<u32>,
550}
551
552#[derive(Debug, Clone, PartialEq, Eq)]
554#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
555#[non_exhaustive]
556pub enum EnumsChild {
557 Enum(Enum),
559
560 Unused(Unused),
562
563 Comment(String),
565}
566
567#[derive(Debug, Clone, PartialEq, Eq, Default)]
569#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
570#[non_exhaustive]
571pub struct Unused {
572 pub start: i64,
574
575 #[cfg_attr(
577 feature = "serialize",
578 serde(default, skip_serializing_if = "is_default")
579 )]
580 pub end: Option<i64>,
581
582 #[cfg_attr(
584 feature = "serialize",
585 serde(default, skip_serializing_if = "is_default")
586 )]
587 pub vendor: Option<String>,
588
589 #[cfg_attr(
591 feature = "serialize",
592 serde(default, skip_serializing_if = "is_default")
593 )]
594 pub comment: Option<String>,
595}
596
597#[derive(Debug, Clone, PartialEq, Eq, Default)]
599#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
600#[non_exhaustive]
601pub struct Enum {
602 pub name: String,
604
605 #[cfg_attr(
607 feature = "serialize",
608 serde(default, skip_serializing_if = "is_default")
609 )]
610 pub comment: Option<String>,
611
612 #[cfg_attr(
613 feature = "serialize",
614 serde(default, skip_serializing_if = "is_default")
615 )]
616 pub type_suffix: Option<String>,
617
618 #[cfg_attr(
619 feature = "serialize",
620 serde(default, skip_serializing_if = "is_default")
621 )]
622 pub api: Option<String>,
623
624 #[cfg_attr(
625 feature = "serialize",
626 serde(default, skip_serializing_if = "is_default")
627 )]
628 pub protect: Option<String>,
629
630 #[cfg_attr(
631 feature = "serialize",
632 serde(default, skip_serializing_if = "is_default")
633 )]
634 pub deprecated: Option<String>,
635
636 #[cfg_attr(
637 feature = "serialize",
638 serde(default, skip_serializing_if = "is_default")
639 )]
640 pub spec: EnumSpec,
641}
642
643#[derive(Debug, Clone, PartialEq, Eq)]
645#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
646#[non_exhaustive]
647pub enum EnumSpec {
648 None,
649
650 Alias {
651 alias: String,
652
653 #[cfg_attr(
654 feature = "serialize",
655 serde(default, skip_serializing_if = "is_default")
656 )]
657 extends: Option<String>,
658 },
659
660 Offset {
661 offset: i64,
662
663 #[cfg_attr(
664 feature = "serialize",
665 serde(default, skip_serializing_if = "is_default")
666 )]
667 extends: String,
668
669 #[cfg_attr(
670 feature = "serialize",
671 serde(default, skip_serializing_if = "is_default")
672 )]
673 extnumber: Option<i64>,
674
675 #[cfg_attr(
676 feature = "serialize",
677 serde(default, skip_serializing_if = "is_default")
678 )]
679 dir: bool,
680 },
681
682 Bitpos {
684 bitpos: i64,
686
687 #[cfg_attr(
689 feature = "serialize",
690 serde(default, skip_serializing_if = "is_default")
691 )]
692 extends: Option<String>,
693 },
694
695 Value {
697 value: String, #[cfg_attr(
702 feature = "serialize",
703 serde(default, skip_serializing_if = "is_default")
704 )]
705 extends: Option<String>,
706 },
707}
708
709impl Default for EnumSpec {
710 fn default() -> Self {
711 EnumSpec::None
712 }
713}
714
715pub type Commands = CommentedChildren<Command>;
716
717#[derive(Debug, Clone, PartialEq, Eq)]
719#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
720#[non_exhaustive]
721pub enum Command {
722 Alias { name: String, alias: String },
724
725 Definition(CommandDefinition),
727}
728
729#[derive(Debug, Clone, PartialEq, Eq, Default)]
730#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
731#[non_exhaustive]
732pub struct CommandDefinition {
733 #[cfg_attr(
734 feature = "serialize",
735 serde(default, skip_serializing_if = "is_default")
736 )]
737 pub tasks: Option<String>,
738
739 #[cfg_attr(
740 feature = "serialize",
741 serde(default, skip_serializing_if = "is_default")
742 )]
743 pub queues: Option<String>,
744
745 #[cfg_attr(
746 feature = "serialize",
747 serde(default, skip_serializing_if = "is_default")
748 )]
749 pub successcodes: Option<String>,
750
751 #[cfg_attr(
752 feature = "serialize",
753 serde(default, skip_serializing_if = "is_default")
754 )]
755 pub errorcodes: Option<String>,
756
757 #[cfg_attr(
758 feature = "serialize",
759 serde(default, skip_serializing_if = "is_default")
760 )]
761 pub renderpass: Option<String>,
762
763 #[cfg_attr(
764 feature = "serialize",
765 serde(default, skip_serializing_if = "is_default")
766 )]
767 pub videocoding: Option<String>,
768
769 #[cfg_attr(
770 feature = "serialize",
771 serde(default, skip_serializing_if = "is_default")
772 )]
773 pub conditionalrendering: Option<bool>,
774
775 #[cfg_attr(
776 feature = "serialize",
777 serde(default, skip_serializing_if = "is_default")
778 )]
779 pub cmdbufferlevel: Option<String>,
780
781 #[cfg_attr(
782 feature = "serialize",
783 serde(default, skip_serializing_if = "is_default")
784 )]
785 pub allownoqueues: Option<String>,
786
787 #[cfg_attr(
788 feature = "serialize",
789 serde(default, skip_serializing_if = "is_default")
790 )]
791 pub pipeline: Option<String>,
792
793 #[cfg_attr(
794 feature = "serialize",
795 serde(default, skip_serializing_if = "is_default")
796 )]
797 pub comment: Option<String>,
798
799 #[cfg_attr(
800 feature = "serialize",
801 serde(default, skip_serializing_if = "is_default")
802 )]
803 pub proto: NameWithType,
804
805 #[cfg_attr(
806 feature = "serialize",
807 serde(default, skip_serializing_if = "is_default")
808 )]
809 pub params: Vec<CommandParam>,
810
811 #[cfg_attr(
812 feature = "serialize",
813 serde(default, skip_serializing_if = "is_default")
814 )]
815 pub alias: Option<String>,
816
817 #[cfg_attr(
818 feature = "serialize",
819 serde(default, skip_serializing_if = "is_default")
820 )]
821 pub description: Option<String>,
822
823 #[cfg_attr(
824 feature = "serialize",
825 serde(default, skip_serializing_if = "is_default")
826 )]
827 pub implicitexternsyncparams: Vec<String>,
828
829 #[cfg_attr(
830 feature = "serialize",
831 serde(default, skip_serializing_if = "is_default")
832 )]
833 pub api: Option<String>,
834
835 #[cfg_attr(
836 feature = "serialize",
837 serde(default, skip_serializing_if = "is_default")
838 )]
839 pub export: Option<String>,
840
841 #[cfg_attr(
842 feature = "serialize",
843 serde(default, skip_serializing_if = "is_default")
844 )]
845 pub code: String,
846}
847
848#[derive(Debug, Clone, PartialEq, Eq, Default)]
850#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
851#[non_exhaustive]
852pub struct CommandParam {
853 #[cfg_attr(
855 feature = "serialize",
856 serde(default, skip_serializing_if = "is_default")
857 )]
858 pub len: Option<String>,
859
860 #[cfg_attr(
862 feature = "serialize",
863 serde(default, skip_serializing_if = "is_default")
864 )]
865 pub altlen: Option<String>,
866
867 #[cfg_attr(
869 feature = "serialize",
870 serde(default, skip_serializing_if = "is_default")
871 )]
872 pub externsync: Option<String>,
873
874 #[cfg_attr(
876 feature = "serialize",
877 serde(default, skip_serializing_if = "is_default")
878 )]
879 pub optional: Option<String>,
880
881 #[cfg_attr(
883 feature = "serialize",
884 serde(default, skip_serializing_if = "is_default")
885 )]
886 pub noautovalidity: Option<String>,
887
888 #[cfg_attr(
889 feature = "serialize",
890 serde(default, skip_serializing_if = "is_default")
891 )]
892 pub objecttype: Option<String>,
893
894 #[cfg_attr(
896 feature = "serialize",
897 serde(default, skip_serializing_if = "is_default")
898 )]
899 pub definition: NameWithType,
900
901 #[cfg_attr(
906 feature = "serialize",
907 serde(default, skip_serializing_if = "is_default")
908 )]
909 pub validstructs: Vec<String>,
910
911 #[cfg_attr(
912 feature = "serialize",
913 serde(default, skip_serializing_if = "is_default")
914 )]
915 pub stride: Option<String>,
916
917 #[cfg_attr(
918 feature = "serialize",
919 serde(default, skip_serializing_if = "is_default")
920 )]
921 pub api: Option<String>,
922}
923
924#[derive(Debug, Clone, PartialEq, Eq, Default)]
925#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
926#[non_exhaustive]
927pub struct Feature {
928 #[cfg_attr(
929 feature = "serialize",
930 serde(default, skip_serializing_if = "is_default")
931 )]
932 pub api: String,
933
934 #[cfg_attr(
935 feature = "serialize",
936 serde(default, skip_serializing_if = "is_default")
937 )]
938 pub apitype: Option<String>,
939
940 #[cfg_attr(
941 feature = "serialize",
942 serde(default, skip_serializing_if = "is_default")
943 )]
944 pub name: String,
945
946 #[cfg_attr(
947 feature = "serialize",
948 serde(default, skip_serializing_if = "is_default")
949 )]
950 pub number: Option<String>,
951
952 #[cfg_attr(
953 feature = "serialize",
954 serde(default, skip_serializing_if = "is_default")
955 )]
956 pub depends: Option<String>,
957
958 #[cfg_attr(
959 feature = "serialize",
960 serde(default, skip_serializing_if = "is_default")
961 )]
962 pub protect: Option<String>,
963
964 #[cfg_attr(
965 feature = "serialize",
966 serde(default, skip_serializing_if = "is_default")
967 )]
968 pub comment: Option<String>,
969
970 #[cfg_attr(
971 feature = "serialize",
972 serde(default, skip_serializing_if = "is_default")
973 )]
974 pub children: Vec<FeatureChild>,
975}
976
977pub type FeatureChild = ExtensionChild;
978
979pub type Extensions = CommentedChildren<Extension>;
980
981#[derive(Debug, Clone, PartialEq, Eq, Default)]
982#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
983#[non_exhaustive]
984pub struct Extension {
985 pub name: String,
987
988 #[cfg_attr(
990 feature = "serialize",
991 serde(default, skip_serializing_if = "is_default")
992 )]
993 pub comment: Option<String>,
994
995 #[cfg_attr(
997 feature = "serialize",
998 serde(default, skip_serializing_if = "is_default")
999 )]
1000 pub number: Option<i64>,
1001
1002 #[cfg_attr(
1003 feature = "serialize",
1004 serde(default, skip_serializing_if = "is_default")
1005 )]
1006 pub protect: Option<String>,
1007
1008 #[cfg_attr(
1010 feature = "serialize",
1011 serde(default, skip_serializing_if = "is_default")
1012 )]
1013 pub platform: Option<String>,
1014
1015 #[cfg_attr(
1017 feature = "serialize",
1018 serde(default, skip_serializing_if = "is_default")
1019 )]
1020 pub author: Option<String>,
1021
1022 #[cfg_attr(
1024 feature = "serialize",
1025 serde(default, skip_serializing_if = "is_default")
1026 )]
1027 pub contact: Option<String>,
1028
1029 #[cfg_attr(
1031 feature = "serialize",
1032 serde(default, skip_serializing_if = "is_default")
1033 )]
1034 pub ext_type: Option<String>,
1035
1036 #[cfg_attr(
1037 feature = "serialize",
1038 serde(default, skip_serializing_if = "is_default")
1039 )]
1040 pub requires: Option<String>,
1041
1042 #[cfg_attr(
1043 feature = "serialize",
1044 serde(default, skip_serializing_if = "is_default")
1045 )]
1046 pub requires_core: Option<String>,
1047
1048 #[cfg_attr(
1049 feature = "serialize",
1050 serde(default, skip_serializing_if = "is_default")
1051 )]
1052 pub supported: Option<String>, #[cfg_attr(
1055 feature = "serialize",
1056 serde(default, skip_serializing_if = "is_default")
1057 )]
1058 pub ratified: Option<String>,
1059
1060 #[cfg_attr(
1061 feature = "serialize",
1062 serde(default, skip_serializing_if = "is_default")
1063 )]
1064 pub deprecatedby: Option<String>,
1065
1066 #[cfg_attr(
1068 feature = "serialize",
1069 serde(default, skip_serializing_if = "is_default")
1070 )]
1071 pub promotedto: Option<String>,
1072
1073 #[cfg_attr(
1074 feature = "serialize",
1075 serde(default, skip_serializing_if = "is_default")
1076 )]
1077 pub obsoletedby: Option<String>,
1078
1079 #[cfg_attr(
1081 feature = "serialize",
1082 serde(default, skip_serializing_if = "is_default")
1083 )]
1084 pub provisional: bool,
1085
1086 #[cfg_attr(
1088 feature = "serialize",
1089 serde(default, skip_serializing_if = "is_default")
1090 )]
1091 pub specialuse: Option<String>,
1092
1093 #[cfg_attr(
1095 feature = "serialize",
1096 serde(default, skip_serializing_if = "is_default")
1097 )]
1098 pub sortorder: Option<i64>,
1099
1100 #[cfg_attr(
1101 feature = "serialize",
1102 serde(default, skip_serializing_if = "is_default")
1103 )]
1104 pub depends: Option<String>,
1105
1106 #[cfg_attr(
1107 feature = "serialize",
1108 serde(default, skip_serializing_if = "is_default")
1109 )]
1110 pub nofeatures: bool,
1111
1112 #[cfg_attr(
1114 feature = "serialize",
1115 serde(default, skip_serializing_if = "is_default")
1116 )]
1117 pub children: Vec<ExtensionChild>,
1118}
1119
1120#[derive(Debug, Clone, PartialEq, Eq)]
1124#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1125#[non_exhaustive]
1126pub enum ExtensionChild {
1127 Require {
1129 #[cfg_attr(
1130 feature = "serialize",
1131 serde(default, skip_serializing_if = "is_default")
1132 )]
1133 api: Option<String>,
1134
1135 #[cfg_attr(
1136 feature = "serialize",
1137 serde(default, skip_serializing_if = "is_default")
1138 )]
1139 profile: Option<String>,
1140
1141 #[cfg_attr(
1143 feature = "serialize",
1144 serde(default, skip_serializing_if = "is_default")
1145 )]
1146 extension: Option<String>,
1147
1148 #[cfg_attr(
1149 feature = "serialize",
1150 serde(default, skip_serializing_if = "is_default")
1151 )]
1152 feature: Option<String>,
1153
1154 #[cfg_attr(
1155 feature = "serialize",
1156 serde(default, skip_serializing_if = "is_default")
1157 )]
1158 comment: Option<String>,
1159
1160 #[cfg_attr(
1161 feature = "serialize",
1162 serde(default, skip_serializing_if = "is_default")
1163 )]
1164 depends: Option<String>,
1165
1166 items: Vec<InterfaceItem>,
1168 },
1169
1170 Deprecate {
1171 #[cfg_attr(
1172 feature = "serialize",
1173 serde(default, skip_serializing_if = "is_default")
1174 )]
1175 api: Option<String>,
1176
1177 #[cfg_attr(
1178 feature = "serialize",
1179 serde(default, skip_serializing_if = "is_default")
1180 )]
1181 profile: Option<String>,
1182
1183 #[cfg_attr(
1184 feature = "serialize",
1185 serde(default, skip_serializing_if = "is_default")
1186 )]
1187 comment: Option<String>,
1188
1189 #[cfg_attr(
1190 feature = "serialize",
1191 serde(default, skip_serializing_if = "is_default")
1192 )]
1193 explanationlink: String,
1194
1195 items: Vec<InterfaceItem>,
1196 },
1197
1198 Remove {
1200 #[cfg_attr(
1201 feature = "serialize",
1202 serde(default, skip_serializing_if = "is_default")
1203 )]
1204 api: Option<String>,
1205
1206 #[cfg_attr(
1207 feature = "serialize",
1208 serde(default, skip_serializing_if = "is_default")
1209 )]
1210 profile: Option<String>,
1211
1212 #[cfg_attr(
1213 feature = "serialize",
1214 serde(default, skip_serializing_if = "is_default")
1215 )]
1216 comment: Option<String>,
1217
1218 #[cfg_attr(
1219 feature = "serialize",
1220 serde(default, skip_serializing_if = "is_default")
1221 )]
1222 reasonlink: Option<String>,
1223
1224 #[cfg_attr(
1225 feature = "serialize",
1226 serde(default, skip_serializing_if = "is_default")
1227 )]
1228 items: Vec<InterfaceItem>,
1229 },
1230}
1231
1232#[derive(Debug, Clone, PartialEq, Eq)]
1236#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1237#[non_exhaustive]
1238pub enum InterfaceItem {
1239 Comment(String),
1240
1241 Type {
1242 name: String,
1243
1244 #[cfg_attr(
1245 feature = "serialize",
1246 serde(default, skip_serializing_if = "is_default")
1247 )]
1248 comment: Option<String>,
1249
1250 #[cfg_attr(
1251 feature = "serialize",
1252 serde(default, skip_serializing_if = "is_default")
1253 )]
1254 supersededby: Option<String>,
1255 },
1256
1257 Enum(Enum),
1258
1259 Command {
1260 name: String,
1261
1262 #[cfg_attr(
1263 feature = "serialize",
1264 serde(default, skip_serializing_if = "is_default")
1265 )]
1266 comment: Option<String>,
1267
1268 #[cfg_attr(
1269 feature = "serialize",
1270 serde(default, skip_serializing_if = "is_default")
1271 )]
1272 supersededby: Option<String>,
1273 },
1274
1275 Feature {
1276 name: String,
1277
1278 struct_: String,
1279
1280 #[cfg_attr(
1281 feature = "serialize",
1282 serde(default, skip_serializing_if = "is_default")
1283 )]
1284 comment: Option<String>,
1285 },
1286}
1287
1288pub type Formats = CommentedChildren<Format>;
1289
1290#[derive(Debug, Clone, PartialEq, Eq, Default)]
1291#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1292#[non_exhaustive]
1293pub struct Format {
1294 pub name: String,
1295 pub class: String,
1296 pub blockSize: u8,
1297 pub texelsPerBlock: u8,
1298
1299 #[cfg_attr(
1300 feature = "serialize",
1301 serde(default, skip_serializing_if = "is_default")
1302 )]
1303 pub blockExtent: Option<String>,
1304
1305 #[cfg_attr(
1306 feature = "serialize",
1307 serde(default, skip_serializing_if = "is_default")
1308 )]
1309 pub packed: Option<u8>,
1310
1311 #[cfg_attr(
1312 feature = "serialize",
1313 serde(default, skip_serializing_if = "is_default")
1314 )]
1315 pub compressed: Option<String>,
1316
1317 #[cfg_attr(
1318 feature = "serialize",
1319 serde(default, skip_serializing_if = "is_default")
1320 )]
1321 pub chroma: Option<String>,
1322
1323 pub children: Vec<FormatChild>,
1324}
1325
1326#[derive(Debug, Clone, PartialEq, Eq)]
1327#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1328#[non_exhaustive]
1329pub enum FormatChild {
1330 #[non_exhaustive]
1331 Component {
1332 name: String,
1333 bits: String,
1334 numericFormat: String,
1335 #[cfg_attr(
1336 feature = "serialize",
1337 serde(default, skip_serializing_if = "is_default")
1338 )]
1339 planeIndex: Option<u8>,
1340 },
1341
1342 #[non_exhaustive]
1343 Plane {
1344 index: u8,
1345 widthDivisor: u8,
1346 heightDivisor: u8,
1347 compatible: String,
1348 },
1349
1350 #[non_exhaustive]
1351 SpirvImageFormat { name: String },
1352}
1353
1354#[derive(Debug, Clone, PartialEq, Eq)]
1355#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1356pub struct DynamicState {
1357 pub name: String,
1358 pub shaderstage: String,
1359 pub pipelinesubstate: Option<String>,
1360 pub requiresrasterization: Option<String>,
1361 pub children: Vec<DynamicStateChild>,
1362}
1363
1364pub type DynamicStates = Vec<DynamicState>;
1365
1366#[derive(Debug, Clone, PartialEq, Eq)]
1367#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1368pub enum DynamicStateChild {
1369 DynamicStateCmd(DynamicStateCmd),
1370 Enable(Enable),
1371 StateCondition(StateCondition),
1372}
1373
1374#[derive(Debug, Clone, PartialEq, Eq)]
1375#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1376pub struct DynamicStateCmd {
1377 pub name: String,
1378 pub pipeline: String,
1379 pub pipelineonly: Option<String>,
1380}
1381
1382#[derive(Debug, Clone, PartialEq, Eq)]
1383#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1384pub struct StateCondition {
1385 pub state: Option<String>,
1386 pub special: Option<String>,
1387}
1388
1389#[derive(Debug, Clone, PartialEq, Eq, Default)]
1390#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1391#[non_exhaustive]
1392pub struct NameWithType {
1393 #[cfg_attr(
1394 feature = "serialize",
1395 serde(default, skip_serializing_if = "is_default")
1396 )]
1397 pub type_name: Option<String>,
1398
1399 #[cfg_attr(
1400 feature = "serialize",
1401 serde(default, skip_serializing_if = "is_default")
1402 )]
1403 pub name: String,
1404
1405 #[cfg_attr(
1406 feature = "serialize",
1407 serde(default, skip_serializing_if = "is_default")
1408 )]
1409 pub code: String,
1410}
1411
1412#[derive(Debug, Clone, PartialEq, Eq, Default)]
1413#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1414#[non_exhaustive]
1415pub struct CommentedChildren<T> {
1416 #[cfg_attr(
1417 feature = "serialize",
1418 serde(default, skip_serializing_if = "is_default")
1419 )]
1420 pub comment: Option<String>,
1421
1422 pub children: Vec<T>,
1423}
1424
1425#[derive(Debug, Clone, PartialEq, Eq, Default)]
1426#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1427#[non_exhaustive]
1428pub struct SpirvExtOrCap {
1429 #[cfg_attr(
1430 feature = "serialize",
1431 serde(default, skip_serializing_if = "is_default")
1432 )]
1433 pub name: String,
1434
1435 #[cfg_attr(
1436 feature = "serialize",
1437 serde(default, skip_serializing_if = "is_default")
1438 )]
1439 pub enables: Vec<Enable>,
1440}
1441
1442pub type SpirvExtension = SpirvExtOrCap;
1443pub type SpirvExtensions = CommentedChildren<SpirvExtension>;
1444
1445pub type SpirvCapability = SpirvExtOrCap;
1446pub type SpirvCapabilities = CommentedChildren<SpirvCapability>;
1447
1448#[derive(Debug, Clone, PartialEq, Eq)]
1449#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1450#[non_exhaustive]
1451pub enum SyncChild {
1452 Stage(SyncStage),
1453 Access(SyncAccess),
1454 Pipeline(SyncPipeline),
1455}
1456
1457pub type Sync = CommentedChildren<SyncChild>;
1458
1459#[derive(Debug, Clone, PartialEq, Eq, Default)]
1460#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1461#[non_exhaustive]
1462pub struct SyncSupport {
1463 pub queues: Option<String>,
1464 pub stage: Option<String>,
1465}
1466
1467#[derive(Debug, Clone, PartialEq, Eq, Default)]
1468#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1469#[non_exhaustive]
1470pub struct SyncEquivalent {
1471 pub stage: Option<String>,
1472 pub access: Option<String>,
1473}
1474
1475#[derive(Debug, Clone, PartialEq, Eq, Default)]
1476#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1477#[non_exhaustive]
1478pub struct SyncStage {
1479 pub name: String,
1480 pub alias: Option<String>,
1481 pub syncsupport: Option<SyncSupport>,
1482 pub syncequivalent: Option<SyncEquivalent>,
1483}
1484
1485#[derive(Debug, Clone, PartialEq, Eq, Default)]
1486#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1487#[non_exhaustive]
1488pub struct SyncAccess {
1489 pub name: String,
1490 pub alias: Option<String>,
1491 pub comment: Option<String>,
1492 pub syncsupport: Option<SyncSupport>,
1493 pub syncequivalent: Option<SyncEquivalent>,
1494}
1495
1496#[derive(Debug, Clone, PartialEq, Eq, Default)]
1497#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1498#[non_exhaustive]
1499pub struct SyncPipeline {
1500 pub name: String,
1501 pub depends: Option<String>,
1502 pub children: Vec<SyncPipelineStage>,
1503}
1504
1505#[derive(Debug, Clone, PartialEq, Eq, Default)]
1506#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1507#[non_exhaustive]
1508pub struct SyncPipelineStage {
1509 pub order: Option<String>,
1510 pub before: Option<String>,
1511 pub after: Option<String>,
1512 pub text: String,
1513}
1514
1515pub type VideoCodecs = CommentedChildren<VideoCodec>;
1516
1517#[derive(Debug, Clone, PartialEq, Eq, Default)]
1518#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1519#[non_exhaustive]
1520pub struct VideoCodec {
1521 pub comment: Option<String>,
1522 pub name: String,
1523 pub extend: Option<String>,
1524 pub value: Option<String>,
1525 pub children: Vec<VideoCodecChild>,
1526}
1527
1528#[derive(Debug, Clone, PartialEq, Eq)]
1529#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1530#[non_exhaustive]
1531pub enum VideoCodecChild {
1532 Profiles(VideoProfiles),
1533 Capabilities(VideoCapabilities),
1534 Format(VideoFormat),
1535}
1536
1537#[derive(Debug, Clone, PartialEq, Eq, Default)]
1538#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1539#[non_exhaustive]
1540pub struct VideoProfiles {
1541 pub comment: Option<String>,
1542 pub struct_: String,
1543 pub children: Vec<VideoProfileMember>,
1544}
1545
1546#[derive(Debug, Clone, PartialEq, Eq, Default)]
1547#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1548#[non_exhaustive]
1549pub struct VideoProfileMember {
1550 pub comment: Option<String>,
1551 pub name: String,
1552 pub children: Vec<VideoProfile>,
1553}
1554
1555#[derive(Debug, Clone, PartialEq, Eq, Default)]
1556#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1557#[non_exhaustive]
1558pub struct VideoProfile {
1559 pub comment: Option<String>,
1560 pub name: String,
1561 pub value: String,
1562}
1563
1564#[derive(Debug, Clone, PartialEq, Eq, Default)]
1565#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1566#[non_exhaustive]
1567pub struct VideoCapabilities {
1568 pub comment: Option<String>,
1569 pub struct_: String,
1570}
1571
1572#[derive(Debug, Clone, PartialEq, Eq, Default)]
1573#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1574#[non_exhaustive]
1575pub struct VideoFormat {
1576 pub comment: Option<String>,
1577 pub name: Option<String>,
1578 pub usage: Option<String>,
1579 pub extend: Option<String>,
1580 pub children: Vec<VideoFormatChild>,
1581}
1582
1583#[derive(Debug, Clone, PartialEq, Eq)]
1584#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1585#[non_exhaustive]
1586pub enum VideoFormatChild {
1587 RequireCapabilities(VideoRequireCapabilities),
1588 FormatProperties(VideoFormatProperties),
1589}
1590
1591#[derive(Debug, Clone, PartialEq, Eq, Default)]
1592#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1593#[non_exhaustive]
1594pub struct VideoFormatProperties {
1595 pub comment: Option<String>,
1596 pub struct_: String,
1597}
1598
1599#[derive(Debug, Clone, PartialEq, Eq, Default)]
1600#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1601#[non_exhaustive]
1602pub struct VideoRequireCapabilities {
1603 pub comment: Option<String>,
1604 pub struct_: String,
1605 pub member: String,
1606 pub value: String,
1607}
1608
1609#[derive(Debug, Clone, PartialEq, Eq)]
1610#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1611#[non_exhaustive]
1612pub enum Enable {
1613 Version(String),
1614 Extension(String),
1615 Feature(FeatureEnable),
1616 Property(PropertyEnable),
1617}
1618
1619#[derive(Debug, Clone, PartialEq, Eq, Default)]
1620#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1621#[non_exhaustive]
1622pub struct FeatureEnable {
1623 #[cfg_attr(
1624 feature = "serialize",
1625 serde(default, skip_serializing_if = "is_default")
1626 )]
1627 pub struct_: String,
1628
1629 #[cfg_attr(
1630 feature = "serialize",
1631 serde(default, skip_serializing_if = "is_default")
1632 )]
1633 pub feature: String,
1634
1635 #[cfg_attr(
1636 feature = "serialize",
1637 serde(default, skip_serializing_if = "is_default")
1638 )]
1639 pub requires: Option<String>,
1640
1641 #[cfg_attr(
1642 feature = "serialize",
1643 serde(default, skip_serializing_if = "is_default")
1644 )]
1645 pub alias: Option<String>,
1646}
1647
1648#[derive(Debug, Clone, PartialEq, Eq, Default)]
1649#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1650#[non_exhaustive]
1651pub struct PropertyEnable {
1652 #[cfg_attr(
1653 feature = "serialize",
1654 serde(default, skip_serializing_if = "is_default")
1655 )]
1656 pub property: String,
1657
1658 #[cfg_attr(
1659 feature = "serialize",
1660 serde(default, skip_serializing_if = "is_default")
1661 )]
1662 pub member: String,
1663
1664 #[cfg_attr(
1665 feature = "serialize",
1666 serde(default, skip_serializing_if = "is_default")
1667 )]
1668 pub value: String,
1669
1670 #[cfg_attr(
1671 feature = "serialize",
1672 serde(default, skip_serializing_if = "is_default")
1673 )]
1674 pub requires: Option<String>,
1675}
1676
1677#[cfg(feature = "serialize")]
1678fn is_default<T: Default + Eq>(v: &T) -> bool {
1679 v.eq(&T::default())
1680}