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
116pub type VendorIds = CommentedChildren<VendorId>;
117
118#[derive(Debug, Clone, PartialEq, Eq, Default)]
123#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
124#[non_exhaustive]
125pub struct VendorId {
126 pub name: String,
128
129 pub id: u32,
131
132 #[cfg_attr(
134 feature = "serialize",
135 serde(default, skip_serializing_if = "is_default")
136 )]
137 pub comment: Option<String>,
138}
139
140pub type Platforms = CommentedChildren<Platform>;
141
142#[derive(Debug, Clone, PartialEq, Eq, Default)]
149#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
150#[non_exhaustive]
151pub struct Platform {
152 pub name: String,
154
155 pub protect: String,
157
158 #[cfg_attr(
160 feature = "serialize",
161 serde(default, skip_serializing_if = "is_default")
162 )]
163 pub comment: Option<String>,
164}
165
166pub type Tags = CommentedChildren<Tag>;
167
168#[derive(Debug, Clone, PartialEq, Eq, Default)]
174#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
175#[non_exhaustive]
176pub struct Tag {
177 pub name: String,
179 pub author: String,
181 pub contact: String,
183}
184
185pub type Types = CommentedChildren<TypesChild>;
186
187#[derive(Debug, Clone, PartialEq, Eq)]
189#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
190#[non_exhaustive]
191pub enum TypesChild {
192 Type(Type),
193 Comment(String),
194}
195
196#[derive(Debug, Clone, PartialEq, Eq, Default)]
197#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
198#[non_exhaustive]
199pub struct Type {
200 #[cfg_attr(
201 feature = "serialize",
202 serde(default, skip_serializing_if = "is_default")
203 )]
204 pub name: Option<String>,
205
206 #[cfg_attr(
207 feature = "serialize",
208 serde(default, skip_serializing_if = "is_default")
209 )]
210 pub alias: Option<String>,
211
212 #[cfg_attr(
213 feature = "serialize",
214 serde(default, skip_serializing_if = "is_default")
215 )]
216 pub api: Option<String>,
217
218 #[cfg_attr(
219 feature = "serialize",
220 serde(default, skip_serializing_if = "is_default")
221 )]
222 pub requires: Option<String>,
223
224 #[cfg_attr(
225 feature = "serialize",
226 serde(default, skip_serializing_if = "is_default")
227 )]
228 pub category: Option<String>,
229
230 #[cfg_attr(
231 feature = "serialize",
232 serde(default, skip_serializing_if = "is_default")
233 )]
234 pub comment: Option<String>,
235
236 #[cfg_attr(
237 feature = "serialize",
238 serde(default, skip_serializing_if = "is_default")
239 )]
240 pub parent: Option<String>,
241
242 #[cfg_attr(
243 feature = "serialize",
244 serde(default, skip_serializing_if = "is_default")
245 )]
246 pub returnedonly: Option<String>,
247
248 #[cfg_attr(
249 feature = "serialize",
250 serde(default, skip_serializing_if = "is_default")
251 )]
252 pub structextends: Option<String>,
253
254 #[cfg_attr(
255 feature = "serialize",
256 serde(default, skip_serializing_if = "is_default")
257 )]
258 pub allowduplicate: Option<String>,
259
260 #[cfg_attr(
261 feature = "serialize",
262 serde(default, skip_serializing_if = "is_default")
263 )]
264 pub objtypeenum: Option<String>,
265
266 #[cfg_attr(
267 feature = "serialize",
268 serde(default, skip_serializing_if = "is_default")
269 )]
270 pub bitvalues: Option<String>,
271
272 #[cfg_attr(
273 feature = "serialize",
274 serde(default, skip_serializing_if = "is_default")
275 )]
276 pub spec: TypeSpec,
277
278 #[cfg_attr(
279 feature = "serialize",
280 serde(default, skip_serializing_if = "is_default")
281 )]
282 pub deprecated: Option<String>,
283}
284
285#[derive(Debug, Clone, PartialEq, Eq)]
287#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
288#[non_exhaustive]
289pub enum TypeSpec {
290 None,
291 Code(TypeCode),
292 Members(Vec<TypeMember>),
293}
294
295impl Default for TypeSpec {
296 fn default() -> Self {
297 TypeSpec::None
298 }
299}
300
301#[derive(Debug, Clone, PartialEq, Eq, Default)]
302#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
303#[non_exhaustive]
304pub struct TypeCode {
305 pub code: String,
306
307 #[cfg_attr(
308 feature = "serialize",
309 serde(default, skip_serializing_if = "is_default")
310 )]
311 pub markup: Vec<TypeCodeMarkup>,
312}
313
314#[derive(Debug, Clone, PartialEq, Eq)]
315#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
316#[non_exhaustive]
317pub enum TypeCodeMarkup {
318 Name(String),
319 Type(String),
320 ApiEntry(String),
321}
322
323#[derive(Debug, Clone, PartialEq, Eq)]
325#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
326#[non_exhaustive]
327pub enum TypeMember {
328 Comment(String),
330
331 Definition(TypeMemberDefinition),
333}
334
335#[derive(Debug, Clone, PartialEq, Eq, Default)]
336#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
337#[non_exhaustive]
338pub struct TypeMemberDefinition {
339 #[cfg_attr(
340 feature = "serialize",
341 serde(default, skip_serializing_if = "is_default")
342 )]
343 pub len: Option<String>,
344
345 #[cfg_attr(
346 feature = "serialize",
347 serde(default, skip_serializing_if = "is_default")
348 )]
349 pub altlen: Option<String>,
350
351 #[cfg_attr(
352 feature = "serialize",
353 serde(default, skip_serializing_if = "is_default")
354 )]
355 pub externsync: Option<String>,
356
357 #[cfg_attr(
358 feature = "serialize",
359 serde(default, skip_serializing_if = "is_default")
360 )]
361 pub optional: Option<String>,
362
363 #[cfg_attr(
364 feature = "serialize",
365 serde(default, skip_serializing_if = "is_default")
366 )]
367 pub selector: Option<String>,
368
369 #[cfg_attr(
370 feature = "serialize",
371 serde(default, skip_serializing_if = "is_default")
372 )]
373 pub selection: Option<String>,
374
375 #[cfg_attr(
376 feature = "serialize",
377 serde(default, skip_serializing_if = "is_default")
378 )]
379 pub noautovalidity: Option<String>,
380
381 #[cfg_attr(
382 feature = "serialize",
383 serde(default, skip_serializing_if = "is_default")
384 )]
385 pub validextensionstructs: Option<String>,
386
387 #[cfg_attr(
388 feature = "serialize",
389 serde(default, skip_serializing_if = "is_default")
390 )]
391 pub values: Option<String>,
392
393 #[cfg_attr(
394 feature = "serialize",
395 serde(default, skip_serializing_if = "is_default")
396 )]
397 pub limittype: Option<String>,
398
399 #[cfg_attr(
400 feature = "serialize",
401 serde(default, skip_serializing_if = "is_default")
402 )]
403 pub objecttype: Option<String>,
404
405 #[cfg_attr(
406 feature = "serialize",
407 serde(default, skip_serializing_if = "is_default")
408 )]
409 pub deprecated: Option<String>,
410
411 #[cfg_attr(
412 feature = "serialize",
413 serde(default, skip_serializing_if = "is_default")
414 )]
415 pub api: Option<String>,
416
417 #[cfg_attr(
418 feature = "serialize",
419 serde(default, skip_serializing_if = "is_default")
420 )]
421 pub code: String,
422
423 #[cfg_attr(
424 feature = "serialize",
425 serde(default, skip_serializing_if = "is_default")
426 )]
427 pub markup: Vec<TypeMemberMarkup>,
428
429 #[cfg_attr(
430 feature = "serialize",
431 serde(default, skip_serializing_if = "is_default")
432 )]
433 pub featurelink: Option<String>,
434}
435
436#[derive(Debug, Clone, PartialEq, Eq)]
437#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
438#[non_exhaustive]
439pub enum TypeMemberMarkup {
440 Name(String),
441 Type(String),
442 Enum(String),
443 Comment(String),
444}
445
446#[derive(Debug, Clone, PartialEq, Eq, Default)]
447#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
448#[non_exhaustive]
449pub struct Enums {
450 #[cfg_attr(
451 feature = "serialize",
452 serde(default, skip_serializing_if = "is_default")
453 )]
454 pub name: Option<String>,
455
456 #[cfg_attr(
457 feature = "serialize",
458 serde(default, skip_serializing_if = "is_default")
459 )]
460 pub kind: Option<String>,
461
462 #[cfg_attr(
463 feature = "serialize",
464 serde(default, skip_serializing_if = "is_default")
465 )]
466 pub start: Option<i64>,
467
468 #[cfg_attr(
469 feature = "serialize",
470 serde(default, skip_serializing_if = "is_default")
471 )]
472 pub end: Option<i64>,
473
474 #[cfg_attr(
475 feature = "serialize",
476 serde(default, skip_serializing_if = "is_default")
477 )]
478 pub vendor: Option<String>,
479
480 #[cfg_attr(
481 feature = "serialize",
482 serde(default, skip_serializing_if = "is_default")
483 )]
484 pub comment: Option<String>,
485
486 #[cfg_attr(
487 feature = "serialize",
488 serde(default, skip_serializing_if = "is_default")
489 )]
490 pub children: Vec<EnumsChild>,
491
492 #[cfg_attr(
493 feature = "serialize",
494 serde(default, skip_serializing_if = "is_default")
495 )]
496 pub bitwidth: Option<u32>,
497}
498
499#[derive(Debug, Clone, PartialEq, Eq)]
501#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
502#[non_exhaustive]
503pub enum EnumsChild {
504 Enum(Enum),
506
507 Unused(Unused),
509
510 Comment(String),
512}
513
514#[derive(Debug, Clone, PartialEq, Eq, Default)]
516#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
517#[non_exhaustive]
518pub struct Unused {
519 pub start: i64,
521
522 #[cfg_attr(
524 feature = "serialize",
525 serde(default, skip_serializing_if = "is_default")
526 )]
527 pub end: Option<i64>,
528
529 #[cfg_attr(
531 feature = "serialize",
532 serde(default, skip_serializing_if = "is_default")
533 )]
534 pub vendor: Option<String>,
535
536 #[cfg_attr(
538 feature = "serialize",
539 serde(default, skip_serializing_if = "is_default")
540 )]
541 pub comment: Option<String>,
542}
543
544#[derive(Debug, Clone, PartialEq, Eq, Default)]
546#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
547#[non_exhaustive]
548pub struct Enum {
549 pub name: String,
551
552 #[cfg_attr(
554 feature = "serialize",
555 serde(default, skip_serializing_if = "is_default")
556 )]
557 pub comment: Option<String>,
558
559 #[cfg_attr(
560 feature = "serialize",
561 serde(default, skip_serializing_if = "is_default")
562 )]
563 pub type_suffix: Option<String>,
564
565 #[cfg_attr(
566 feature = "serialize",
567 serde(default, skip_serializing_if = "is_default")
568 )]
569 pub api: Option<String>,
570
571 #[cfg_attr(
572 feature = "serialize",
573 serde(default, skip_serializing_if = "is_default")
574 )]
575 pub protect: Option<String>,
576
577 #[cfg_attr(
578 feature = "serialize",
579 serde(default, skip_serializing_if = "is_default")
580 )]
581 pub deprecated: Option<String>,
582
583 #[cfg_attr(
584 feature = "serialize",
585 serde(default, skip_serializing_if = "is_default")
586 )]
587 pub spec: EnumSpec,
588}
589
590#[derive(Debug, Clone, PartialEq, Eq)]
592#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
593#[non_exhaustive]
594pub enum EnumSpec {
595 None,
596
597 Alias {
598 alias: String,
599
600 #[cfg_attr(
601 feature = "serialize",
602 serde(default, skip_serializing_if = "is_default")
603 )]
604 extends: Option<String>,
605 },
606
607 Offset {
608 offset: i64,
609
610 #[cfg_attr(
611 feature = "serialize",
612 serde(default, skip_serializing_if = "is_default")
613 )]
614 extends: String,
615
616 #[cfg_attr(
617 feature = "serialize",
618 serde(default, skip_serializing_if = "is_default")
619 )]
620 extnumber: Option<i64>,
621
622 #[cfg_attr(
623 feature = "serialize",
624 serde(default, skip_serializing_if = "is_default")
625 )]
626 dir: bool,
627 },
628
629 Bitpos {
631 bitpos: i64,
633
634 #[cfg_attr(
636 feature = "serialize",
637 serde(default, skip_serializing_if = "is_default")
638 )]
639 extends: Option<String>,
640 },
641
642 Value {
644 value: String, #[cfg_attr(
649 feature = "serialize",
650 serde(default, skip_serializing_if = "is_default")
651 )]
652 extends: Option<String>,
653 },
654}
655
656impl Default for EnumSpec {
657 fn default() -> Self {
658 EnumSpec::None
659 }
660}
661
662pub type Commands = CommentedChildren<Command>;
663
664#[derive(Debug, Clone, PartialEq, Eq)]
666#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
667#[non_exhaustive]
668pub enum Command {
669 Alias { name: String, alias: String },
671
672 Definition(CommandDefinition),
674}
675
676#[derive(Debug, Clone, PartialEq, Eq, Default)]
677#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
678#[non_exhaustive]
679pub struct CommandDefinition {
680 #[cfg_attr(
681 feature = "serialize",
682 serde(default, skip_serializing_if = "is_default")
683 )]
684 pub tasks: Option<String>,
685
686 #[cfg_attr(
687 feature = "serialize",
688 serde(default, skip_serializing_if = "is_default")
689 )]
690 pub queues: Option<String>,
691
692 #[cfg_attr(
693 feature = "serialize",
694 serde(default, skip_serializing_if = "is_default")
695 )]
696 pub successcodes: Option<String>,
697
698 #[cfg_attr(
699 feature = "serialize",
700 serde(default, skip_serializing_if = "is_default")
701 )]
702 pub errorcodes: Option<String>,
703
704 #[cfg_attr(
705 feature = "serialize",
706 serde(default, skip_serializing_if = "is_default")
707 )]
708 pub renderpass: Option<String>,
709
710 #[cfg_attr(
711 feature = "serialize",
712 serde(default, skip_serializing_if = "is_default")
713 )]
714 pub videocoding: Option<String>,
715
716 #[cfg_attr(
717 feature = "serialize",
718 serde(default, skip_serializing_if = "is_default")
719 )]
720 pub cmdbufferlevel: Option<String>,
721
722 #[cfg_attr(
723 feature = "serialize",
724 serde(default, skip_serializing_if = "is_default")
725 )]
726 pub pipeline: Option<String>,
727
728 #[cfg_attr(
729 feature = "serialize",
730 serde(default, skip_serializing_if = "is_default")
731 )]
732 pub comment: Option<String>,
733
734 #[cfg_attr(
735 feature = "serialize",
736 serde(default, skip_serializing_if = "is_default")
737 )]
738 pub proto: NameWithType,
739
740 #[cfg_attr(
741 feature = "serialize",
742 serde(default, skip_serializing_if = "is_default")
743 )]
744 pub params: Vec<CommandParam>,
745
746 #[cfg_attr(
747 feature = "serialize",
748 serde(default, skip_serializing_if = "is_default")
749 )]
750 pub alias: Option<String>,
751
752 #[cfg_attr(
753 feature = "serialize",
754 serde(default, skip_serializing_if = "is_default")
755 )]
756 pub description: Option<String>,
757
758 #[cfg_attr(
759 feature = "serialize",
760 serde(default, skip_serializing_if = "is_default")
761 )]
762 pub implicitexternsyncparams: Vec<String>,
763
764 #[cfg_attr(
765 feature = "serialize",
766 serde(default, skip_serializing_if = "is_default")
767 )]
768 pub api: Option<String>,
769
770 #[cfg_attr(
771 feature = "serialize",
772 serde(default, skip_serializing_if = "is_default")
773 )]
774 pub code: String,
775}
776
777#[derive(Debug, Clone, PartialEq, Eq, Default)]
779#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
780#[non_exhaustive]
781pub struct CommandParam {
782 #[cfg_attr(
784 feature = "serialize",
785 serde(default, skip_serializing_if = "is_default")
786 )]
787 pub len: Option<String>,
788
789 #[cfg_attr(
791 feature = "serialize",
792 serde(default, skip_serializing_if = "is_default")
793 )]
794 pub altlen: Option<String>,
795
796 #[cfg_attr(
798 feature = "serialize",
799 serde(default, skip_serializing_if = "is_default")
800 )]
801 pub externsync: Option<String>,
802
803 #[cfg_attr(
805 feature = "serialize",
806 serde(default, skip_serializing_if = "is_default")
807 )]
808 pub optional: Option<String>,
809
810 #[cfg_attr(
812 feature = "serialize",
813 serde(default, skip_serializing_if = "is_default")
814 )]
815 pub noautovalidity: Option<String>,
816
817 #[cfg_attr(
818 feature = "serialize",
819 serde(default, skip_serializing_if = "is_default")
820 )]
821 pub objecttype: Option<String>,
822
823 #[cfg_attr(
825 feature = "serialize",
826 serde(default, skip_serializing_if = "is_default")
827 )]
828 pub definition: NameWithType,
829
830 #[cfg_attr(
835 feature = "serialize",
836 serde(default, skip_serializing_if = "is_default")
837 )]
838 pub validstructs: Vec<String>,
839
840 #[cfg_attr(
841 feature = "serialize",
842 serde(default, skip_serializing_if = "is_default")
843 )]
844 pub stride: Option<String>,
845
846 #[cfg_attr(
847 feature = "serialize",
848 serde(default, skip_serializing_if = "is_default")
849 )]
850 pub api: Option<String>,
851}
852
853#[derive(Debug, Clone, PartialEq, Eq, Default)]
854#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
855#[non_exhaustive]
856pub struct Feature {
857 #[cfg_attr(
858 feature = "serialize",
859 serde(default, skip_serializing_if = "is_default")
860 )]
861 pub api: String,
862
863 #[cfg_attr(
864 feature = "serialize",
865 serde(default, skip_serializing_if = "is_default")
866 )]
867 pub name: String,
868
869 #[cfg_attr(
870 feature = "serialize",
871 serde(default, skip_serializing_if = "is_default")
872 )]
873 pub number: Option<String>,
874
875 #[cfg_attr(
876 feature = "serialize",
877 serde(default, skip_serializing_if = "is_default")
878 )]
879 pub depends: Option<String>,
880
881 #[cfg_attr(
882 feature = "serialize",
883 serde(default, skip_serializing_if = "is_default")
884 )]
885 pub protect: Option<String>,
886
887 #[cfg_attr(
888 feature = "serialize",
889 serde(default, skip_serializing_if = "is_default")
890 )]
891 pub comment: Option<String>,
892
893 #[cfg_attr(
894 feature = "serialize",
895 serde(default, skip_serializing_if = "is_default")
896 )]
897 pub children: Vec<FeatureChild>,
898}
899
900pub type FeatureChild = ExtensionChild;
901
902pub type Extensions = CommentedChildren<Extension>;
903
904#[derive(Debug, Clone, PartialEq, Eq, Default)]
905#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
906#[non_exhaustive]
907pub struct Extension {
908 pub name: String,
910
911 #[cfg_attr(
913 feature = "serialize",
914 serde(default, skip_serializing_if = "is_default")
915 )]
916 pub comment: Option<String>,
917
918 #[cfg_attr(
920 feature = "serialize",
921 serde(default, skip_serializing_if = "is_default")
922 )]
923 pub number: Option<i64>,
924
925 #[cfg_attr(
926 feature = "serialize",
927 serde(default, skip_serializing_if = "is_default")
928 )]
929 pub protect: Option<String>,
930
931 #[cfg_attr(
933 feature = "serialize",
934 serde(default, skip_serializing_if = "is_default")
935 )]
936 pub platform: Option<String>,
937
938 #[cfg_attr(
940 feature = "serialize",
941 serde(default, skip_serializing_if = "is_default")
942 )]
943 pub author: Option<String>,
944
945 #[cfg_attr(
947 feature = "serialize",
948 serde(default, skip_serializing_if = "is_default")
949 )]
950 pub contact: Option<String>,
951
952 #[cfg_attr(
954 feature = "serialize",
955 serde(default, skip_serializing_if = "is_default")
956 )]
957 pub ext_type: Option<String>,
958
959 #[cfg_attr(
960 feature = "serialize",
961 serde(default, skip_serializing_if = "is_default")
962 )]
963 pub requires: Option<String>,
964
965 #[cfg_attr(
966 feature = "serialize",
967 serde(default, skip_serializing_if = "is_default")
968 )]
969 pub requires_core: Option<String>,
970
971 #[cfg_attr(
972 feature = "serialize",
973 serde(default, skip_serializing_if = "is_default")
974 )]
975 pub supported: Option<String>, #[cfg_attr(
978 feature = "serialize",
979 serde(default, skip_serializing_if = "is_default")
980 )]
981 pub ratified: Option<String>,
982
983 #[cfg_attr(
984 feature = "serialize",
985 serde(default, skip_serializing_if = "is_default")
986 )]
987 pub deprecatedby: Option<String>,
988
989 #[cfg_attr(
991 feature = "serialize",
992 serde(default, skip_serializing_if = "is_default")
993 )]
994 pub promotedto: Option<String>,
995
996 #[cfg_attr(
997 feature = "serialize",
998 serde(default, skip_serializing_if = "is_default")
999 )]
1000 pub obsoletedby: Option<String>,
1001
1002 #[cfg_attr(
1004 feature = "serialize",
1005 serde(default, skip_serializing_if = "is_default")
1006 )]
1007 pub provisional: bool,
1008
1009 #[cfg_attr(
1011 feature = "serialize",
1012 serde(default, skip_serializing_if = "is_default")
1013 )]
1014 pub specialuse: Option<String>,
1015
1016 #[cfg_attr(
1018 feature = "serialize",
1019 serde(default, skip_serializing_if = "is_default")
1020 )]
1021 pub sortorder: Option<i64>,
1022
1023 #[cfg_attr(
1024 feature = "serialize",
1025 serde(default, skip_serializing_if = "is_default")
1026 )]
1027 pub depends: Option<String>,
1028
1029 #[cfg_attr(
1030 feature = "serialize",
1031 serde(default, skip_serializing_if = "is_default")
1032 )]
1033 pub nofeatures: bool,
1034
1035 #[cfg_attr(
1037 feature = "serialize",
1038 serde(default, skip_serializing_if = "is_default")
1039 )]
1040 pub children: Vec<ExtensionChild>,
1041}
1042
1043#[derive(Debug, Clone, PartialEq, Eq)]
1047#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1048#[non_exhaustive]
1049pub enum ExtensionChild {
1050 Require {
1052 #[cfg_attr(
1053 feature = "serialize",
1054 serde(default, skip_serializing_if = "is_default")
1055 )]
1056 api: Option<String>,
1057
1058 #[cfg_attr(
1059 feature = "serialize",
1060 serde(default, skip_serializing_if = "is_default")
1061 )]
1062 profile: Option<String>,
1063
1064 #[cfg_attr(
1066 feature = "serialize",
1067 serde(default, skip_serializing_if = "is_default")
1068 )]
1069 extension: Option<String>,
1070
1071 #[cfg_attr(
1072 feature = "serialize",
1073 serde(default, skip_serializing_if = "is_default")
1074 )]
1075 feature: Option<String>,
1076
1077 #[cfg_attr(
1078 feature = "serialize",
1079 serde(default, skip_serializing_if = "is_default")
1080 )]
1081 comment: Option<String>,
1082
1083 #[cfg_attr(
1084 feature = "serialize",
1085 serde(default, skip_serializing_if = "is_default")
1086 )]
1087 depends: Option<String>,
1088
1089 items: Vec<InterfaceItem>,
1091 },
1092
1093 Deprecate {
1094 #[cfg_attr(
1095 feature = "serialize",
1096 serde(default, skip_serializing_if = "is_default")
1097 )]
1098 api: Option<String>,
1099
1100 #[cfg_attr(
1101 feature = "serialize",
1102 serde(default, skip_serializing_if = "is_default")
1103 )]
1104 profile: Option<String>,
1105
1106 #[cfg_attr(
1107 feature = "serialize",
1108 serde(default, skip_serializing_if = "is_default")
1109 )]
1110 comment: Option<String>,
1111
1112 #[cfg_attr(
1113 feature = "serialize",
1114 serde(default, skip_serializing_if = "is_default")
1115 )]
1116 explanationlink: String,
1117
1118 items: Vec<InterfaceItem>,
1119 },
1120
1121 Remove {
1123 #[cfg_attr(
1124 feature = "serialize",
1125 serde(default, skip_serializing_if = "is_default")
1126 )]
1127 api: Option<String>,
1128
1129 #[cfg_attr(
1130 feature = "serialize",
1131 serde(default, skip_serializing_if = "is_default")
1132 )]
1133 profile: Option<String>,
1134
1135 #[cfg_attr(
1136 feature = "serialize",
1137 serde(default, skip_serializing_if = "is_default")
1138 )]
1139 comment: Option<String>,
1140
1141 #[cfg_attr(
1142 feature = "serialize",
1143 serde(default, skip_serializing_if = "is_default")
1144 )]
1145 reasonlink: Option<String>,
1146
1147 #[cfg_attr(
1148 feature = "serialize",
1149 serde(default, skip_serializing_if = "is_default")
1150 )]
1151 items: Vec<InterfaceItem>,
1152 },
1153}
1154
1155#[derive(Debug, Clone, PartialEq, Eq)]
1159#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1160#[non_exhaustive]
1161pub enum InterfaceItem {
1162 Comment(String),
1163
1164 Type {
1165 name: String,
1166
1167 #[cfg_attr(
1168 feature = "serialize",
1169 serde(default, skip_serializing_if = "is_default")
1170 )]
1171 comment: Option<String>,
1172 },
1173
1174 Enum(Enum),
1175
1176 Command {
1177 name: String,
1178
1179 #[cfg_attr(
1180 feature = "serialize",
1181 serde(default, skip_serializing_if = "is_default")
1182 )]
1183 comment: Option<String>,
1184 },
1185
1186 Feature {
1187 name: String,
1188
1189 struct_: String,
1190
1191 #[cfg_attr(
1192 feature = "serialize",
1193 serde(default, skip_serializing_if = "is_default")
1194 )]
1195 comment: Option<String>,
1196 },
1197}
1198
1199pub type Formats = CommentedChildren<Format>;
1200
1201#[derive(Debug, Clone, PartialEq, Eq, Default)]
1202#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1203#[non_exhaustive]
1204pub struct Format {
1205 pub name: String,
1206 pub class: String,
1207 pub blockSize: u8,
1208 pub texelsPerBlock: u8,
1209
1210 #[cfg_attr(
1211 feature = "serialize",
1212 serde(default, skip_serializing_if = "is_default")
1213 )]
1214 pub blockExtent: Option<String>,
1215
1216 #[cfg_attr(
1217 feature = "serialize",
1218 serde(default, skip_serializing_if = "is_default")
1219 )]
1220 pub packed: Option<u8>,
1221
1222 #[cfg_attr(
1223 feature = "serialize",
1224 serde(default, skip_serializing_if = "is_default")
1225 )]
1226 pub compressed: Option<String>,
1227
1228 #[cfg_attr(
1229 feature = "serialize",
1230 serde(default, skip_serializing_if = "is_default")
1231 )]
1232 pub chroma: Option<String>,
1233
1234 pub children: Vec<FormatChild>,
1235}
1236
1237#[derive(Debug, Clone, PartialEq, Eq)]
1238#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1239#[non_exhaustive]
1240pub enum FormatChild {
1241 #[non_exhaustive]
1242 Component {
1243 name: String,
1244 bits: String,
1245 numericFormat: String,
1246 #[cfg_attr(
1247 feature = "serialize",
1248 serde(default, skip_serializing_if = "is_default")
1249 )]
1250 planeIndex: Option<u8>,
1251 },
1252
1253 #[non_exhaustive]
1254 Plane {
1255 index: u8,
1256 widthDivisor: u8,
1257 heightDivisor: u8,
1258 compatible: String,
1259 },
1260
1261 #[non_exhaustive]
1262 SpirvImageFormat { name: String },
1263}
1264
1265#[derive(Debug, Clone, PartialEq, Eq, Default)]
1266#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1267#[non_exhaustive]
1268pub struct NameWithType {
1269 #[cfg_attr(
1270 feature = "serialize",
1271 serde(default, skip_serializing_if = "is_default")
1272 )]
1273 pub type_name: Option<String>,
1274
1275 #[cfg_attr(
1276 feature = "serialize",
1277 serde(default, skip_serializing_if = "is_default")
1278 )]
1279 pub name: String,
1280
1281 #[cfg_attr(
1282 feature = "serialize",
1283 serde(default, skip_serializing_if = "is_default")
1284 )]
1285 pub code: String,
1286}
1287
1288#[derive(Debug, Clone, PartialEq, Eq, Default)]
1289#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1290#[non_exhaustive]
1291pub struct CommentedChildren<T> {
1292 #[cfg_attr(
1293 feature = "serialize",
1294 serde(default, skip_serializing_if = "is_default")
1295 )]
1296 pub comment: Option<String>,
1297
1298 pub children: Vec<T>,
1299}
1300
1301#[derive(Debug, Clone, PartialEq, Eq, Default)]
1302#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1303#[non_exhaustive]
1304pub struct SpirvExtOrCap {
1305 #[cfg_attr(
1306 feature = "serialize",
1307 serde(default, skip_serializing_if = "is_default")
1308 )]
1309 pub name: String,
1310
1311 #[cfg_attr(
1312 feature = "serialize",
1313 serde(default, skip_serializing_if = "is_default")
1314 )]
1315 pub enables: Vec<Enable>,
1316}
1317
1318pub type SpirvExtension = SpirvExtOrCap;
1319pub type SpirvExtensions = CommentedChildren<SpirvExtension>;
1320
1321pub type SpirvCapability = SpirvExtOrCap;
1322pub type SpirvCapabilities = CommentedChildren<SpirvCapability>;
1323
1324#[derive(Debug, Clone, PartialEq, Eq)]
1325#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1326#[non_exhaustive]
1327pub enum SyncChild {
1328 Stage(SyncStage),
1329 Access(SyncAccess),
1330 Pipeline(SyncPipeline),
1331}
1332
1333pub type Sync = CommentedChildren<SyncChild>;
1334
1335#[derive(Debug, Clone, PartialEq, Eq, Default)]
1336#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1337#[non_exhaustive]
1338pub struct SyncSupport {
1339 pub queues: Option<String>,
1340 pub stage: Option<String>,
1341}
1342
1343#[derive(Debug, Clone, PartialEq, Eq, Default)]
1344#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1345#[non_exhaustive]
1346pub struct SyncEquivalent {
1347 pub stage: Option<String>,
1348 pub access: Option<String>,
1349}
1350
1351#[derive(Debug, Clone, PartialEq, Eq, Default)]
1352#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1353#[non_exhaustive]
1354pub struct SyncStage {
1355 pub name: String,
1356 pub alias: Option<String>,
1357 pub syncsupport: Option<SyncSupport>,
1358 pub syncequivalent: Option<SyncEquivalent>,
1359}
1360
1361#[derive(Debug, Clone, PartialEq, Eq, Default)]
1362#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1363#[non_exhaustive]
1364pub struct SyncAccess {
1365 pub name: String,
1366 pub alias: Option<String>,
1367 pub comment: Option<String>,
1368 pub syncsupport: Option<SyncSupport>,
1369 pub syncequivalent: Option<SyncEquivalent>,
1370}
1371
1372#[derive(Debug, Clone, PartialEq, Eq, Default)]
1373#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1374#[non_exhaustive]
1375pub struct SyncPipeline {
1376 pub name: String,
1377 pub depends: Option<String>,
1378 pub children: Vec<SyncPipelineStage>,
1379}
1380
1381#[derive(Debug, Clone, PartialEq, Eq, Default)]
1382#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1383#[non_exhaustive]
1384pub struct SyncPipelineStage {
1385 pub order: Option<String>,
1386 pub before: Option<String>,
1387 pub after: Option<String>,
1388 pub text: String,
1389}
1390
1391pub type VideoCodecs = CommentedChildren<VideoCodec>;
1392
1393#[derive(Debug, Clone, PartialEq, Eq, Default)]
1394#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1395#[non_exhaustive]
1396pub struct VideoCodec {
1397 pub comment: Option<String>,
1398 pub name: String,
1399 pub extend: Option<String>,
1400 pub value: Option<String>,
1401 pub children: Vec<VideoCodecChild>,
1402}
1403
1404#[derive(Debug, Clone, PartialEq, Eq)]
1405#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1406#[non_exhaustive]
1407pub enum VideoCodecChild {
1408 Profiles(VideoProfiles),
1409 Capabilities(VideoCapabilities),
1410 Format(VideoFormat),
1411}
1412
1413#[derive(Debug, Clone, PartialEq, Eq, Default)]
1414#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1415#[non_exhaustive]
1416pub struct VideoProfiles {
1417 pub comment: Option<String>,
1418 pub struct_: String,
1419 pub children: Vec<VideoProfileMember>,
1420}
1421
1422#[derive(Debug, Clone, PartialEq, Eq, Default)]
1423#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1424#[non_exhaustive]
1425pub struct VideoProfileMember {
1426 pub comment: Option<String>,
1427 pub name: String,
1428 pub children: Vec<VideoProfile>,
1429}
1430
1431#[derive(Debug, Clone, PartialEq, Eq, Default)]
1432#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1433#[non_exhaustive]
1434pub struct VideoProfile {
1435 pub comment: Option<String>,
1436 pub name: String,
1437 pub value: String,
1438}
1439
1440#[derive(Debug, Clone, PartialEq, Eq, Default)]
1441#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1442#[non_exhaustive]
1443pub struct VideoCapabilities {
1444 pub comment: Option<String>,
1445 pub struct_: String,
1446}
1447
1448#[derive(Debug, Clone, PartialEq, Eq, Default)]
1449#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1450#[non_exhaustive]
1451pub struct VideoFormat {
1452 pub comment: Option<String>,
1453 pub name: Option<String>,
1454 pub usage: Option<String>,
1455 pub extend: Option<String>,
1456 pub children: Vec<VideoFormatChild>,
1457}
1458
1459#[derive(Debug, Clone, PartialEq, Eq)]
1460#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1461#[non_exhaustive]
1462pub enum VideoFormatChild {
1463 RequireCapabilities(VideoRequireCapabilities),
1464 FormatProperties(VideoFormatProperties),
1465}
1466
1467#[derive(Debug, Clone, PartialEq, Eq, Default)]
1468#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1469#[non_exhaustive]
1470pub struct VideoFormatProperties {
1471 pub comment: Option<String>,
1472 pub struct_: String,
1473}
1474
1475#[derive(Debug, Clone, PartialEq, Eq, Default)]
1476#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1477#[non_exhaustive]
1478pub struct VideoRequireCapabilities {
1479 pub comment: Option<String>,
1480 pub struct_: String,
1481 pub member: String,
1482 pub value: String,
1483}
1484
1485#[derive(Debug, Clone, PartialEq, Eq)]
1486#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1487#[non_exhaustive]
1488pub enum Enable {
1489 Version(String),
1490 Extension(String),
1491 Feature(FeatureEnable),
1492 Property(PropertyEnable),
1493}
1494
1495#[derive(Debug, Clone, PartialEq, Eq, Default)]
1496#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1497#[non_exhaustive]
1498pub struct FeatureEnable {
1499 #[cfg_attr(
1500 feature = "serialize",
1501 serde(default, skip_serializing_if = "is_default")
1502 )]
1503 pub struct_: String,
1504
1505 #[cfg_attr(
1506 feature = "serialize",
1507 serde(default, skip_serializing_if = "is_default")
1508 )]
1509 pub feature: String,
1510
1511 #[cfg_attr(
1512 feature = "serialize",
1513 serde(default, skip_serializing_if = "is_default")
1514 )]
1515 pub requires: Option<String>,
1516
1517 #[cfg_attr(
1518 feature = "serialize",
1519 serde(default, skip_serializing_if = "is_default")
1520 )]
1521 pub alias: Option<String>,
1522}
1523
1524#[derive(Debug, Clone, PartialEq, Eq, Default)]
1525#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1526#[non_exhaustive]
1527pub struct PropertyEnable {
1528 #[cfg_attr(
1529 feature = "serialize",
1530 serde(default, skip_serializing_if = "is_default")
1531 )]
1532 pub property: String,
1533
1534 #[cfg_attr(
1535 feature = "serialize",
1536 serde(default, skip_serializing_if = "is_default")
1537 )]
1538 pub member: String,
1539
1540 #[cfg_attr(
1541 feature = "serialize",
1542 serde(default, skip_serializing_if = "is_default")
1543 )]
1544 pub value: String,
1545
1546 #[cfg_attr(
1547 feature = "serialize",
1548 serde(default, skip_serializing_if = "is_default")
1549 )]
1550 pub requires: Option<String>,
1551}
1552
1553#[cfg(feature = "serialize")]
1554fn is_default<T: Default + Eq>(v: &T) -> bool {
1555 v.eq(&T::default())
1556}