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 requiredlimittype: Option<String>,
271
272 #[cfg_attr(
273 feature = "serialize",
274 serde(default, skip_serializing_if = "is_default")
275 )]
276 pub bitvalues: Option<String>,
277
278 #[cfg_attr(
279 feature = "serialize",
280 serde(default, skip_serializing_if = "is_default")
281 )]
282 pub spec: TypeSpec,
283
284 #[cfg_attr(
285 feature = "serialize",
286 serde(default, skip_serializing_if = "is_default")
287 )]
288 pub deprecated: Option<String>,
289}
290
291#[derive(Debug, Clone, PartialEq, Eq)]
293#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
294#[non_exhaustive]
295pub enum TypeSpec {
296 None,
297 Code(TypeCode),
298 Members(Vec<TypeMember>),
299 Funcpointer(FuncpointerCode),
300}
301
302impl Default for TypeSpec {
303 fn default() -> Self {
304 TypeSpec::None
305 }
306}
307
308#[derive(Debug, Clone, PartialEq, Eq, Default)]
309#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
310#[non_exhaustive]
311pub struct TypeCode {
312 pub code: String,
313
314 #[cfg_attr(
315 feature = "serialize",
316 serde(default, skip_serializing_if = "is_default")
317 )]
318 pub markup: Vec<TypeCodeMarkup>,
319}
320
321#[derive(Debug, Clone, PartialEq, Eq)]
322#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
323#[non_exhaustive]
324pub enum TypeCodeMarkup {
325 Name(String),
326 Type(String),
327 ApiEntry(String),
328}
329
330#[derive(Debug, Clone, PartialEq, Eq, Default)]
331#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
332#[non_exhaustive]
333pub struct FuncpointerCode {
334 pub code: String,
336
337 #[cfg_attr(
339 feature = "serialize",
340 serde(default, skip_serializing_if = "is_default")
341 )]
342 pub markup: Vec<TypeCodeMarkup>,
343
344 pub proto: FuncpointerProtoMarkup,
345
346 #[cfg_attr(
347 feature = "serialize",
348 serde(default, skip_serializing_if = "is_default")
349 )]
350 pub params: Vec<FuncpointerParamMarkup>,
351}
352
353pub type FuncpointerProtoMarkup = NameWithType;
354
355pub type FuncpointerParamMarkup = NameWithType;
361
362#[derive(Debug, Clone, PartialEq, Eq)]
364#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
365#[non_exhaustive]
366pub enum TypeMember {
367 Comment(String),
369
370 Definition(TypeMemberDefinition),
372}
373
374#[derive(Debug, Clone, PartialEq, Eq, Default)]
375#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
376#[non_exhaustive]
377pub struct TypeMemberDefinition {
378 #[cfg_attr(
379 feature = "serialize",
380 serde(default, skip_serializing_if = "is_default")
381 )]
382 pub len: Option<String>,
383
384 #[cfg_attr(
385 feature = "serialize",
386 serde(default, skip_serializing_if = "is_default")
387 )]
388 pub altlen: Option<String>,
389
390 #[cfg_attr(
391 feature = "serialize",
392 serde(default, skip_serializing_if = "is_default")
393 )]
394 pub externsync: Option<String>,
395
396 #[cfg_attr(
397 feature = "serialize",
398 serde(default, skip_serializing_if = "is_default")
399 )]
400 pub optional: Option<String>,
401
402 #[cfg_attr(
403 feature = "serialize",
404 serde(default, skip_serializing_if = "is_default")
405 )]
406 pub selector: Option<String>,
407
408 #[cfg_attr(
409 feature = "serialize",
410 serde(default, skip_serializing_if = "is_default")
411 )]
412 pub selection: Option<String>,
413
414 #[cfg_attr(
415 feature = "serialize",
416 serde(default, skip_serializing_if = "is_default")
417 )]
418 pub noautovalidity: Option<String>,
419
420 #[cfg_attr(
421 feature = "serialize",
422 serde(default, skip_serializing_if = "is_default")
423 )]
424 pub validextensionstructs: Option<String>,
425
426 #[cfg_attr(
427 feature = "serialize",
428 serde(default, skip_serializing_if = "is_default")
429 )]
430 pub values: Option<String>,
431
432 #[cfg_attr(
433 feature = "serialize",
434 serde(default, skip_serializing_if = "is_default")
435 )]
436 pub limittype: Option<String>,
437
438 #[cfg_attr(
439 feature = "serialize",
440 serde(default, skip_serializing_if = "is_default")
441 )]
442 pub objecttype: Option<String>,
443
444 #[cfg_attr(
445 feature = "serialize",
446 serde(default, skip_serializing_if = "is_default")
447 )]
448 pub deprecated: Option<String>,
449
450 #[cfg_attr(
451 feature = "serialize",
452 serde(default, skip_serializing_if = "is_default")
453 )]
454 pub api: Option<String>,
455
456 #[cfg_attr(
457 feature = "serialize",
458 serde(default, skip_serializing_if = "is_default")
459 )]
460 pub code: String,
461
462 #[cfg_attr(
463 feature = "serialize",
464 serde(default, skip_serializing_if = "is_default")
465 )]
466 pub markup: Vec<TypeMemberMarkup>,
467
468 #[cfg_attr(
469 feature = "serialize",
470 serde(default, skip_serializing_if = "is_default")
471 )]
472 pub featurelink: Option<String>,
473
474 #[cfg_attr(
475 feature = "serialize",
476 serde(default, skip_serializing_if = "is_default")
477 )]
478 pub flagsextend: Option<String>,
479
480 #[cfg_attr(
481 feature = "serialize",
482 serde(default, skip_serializing_if = "is_default")
483 )]
484 pub flagsextendmember: Option<String>,
485}
486
487#[derive(Debug, Clone, PartialEq, Eq)]
488#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
489#[non_exhaustive]
490pub enum TypeMemberMarkup {
491 Name(String),
492 Type(String),
493 Enum(String),
494 Comment(String),
495}
496
497#[derive(Debug, Clone, PartialEq, Eq, Default)]
498#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
499#[non_exhaustive]
500pub struct Enums {
501 #[cfg_attr(
502 feature = "serialize",
503 serde(default, skip_serializing_if = "is_default")
504 )]
505 pub name: Option<String>,
506
507 #[cfg_attr(
508 feature = "serialize",
509 serde(default, skip_serializing_if = "is_default")
510 )]
511 pub kind: Option<String>,
512
513 #[cfg_attr(
514 feature = "serialize",
515 serde(default, skip_serializing_if = "is_default")
516 )]
517 pub start: Option<i64>,
518
519 #[cfg_attr(
520 feature = "serialize",
521 serde(default, skip_serializing_if = "is_default")
522 )]
523 pub end: Option<i64>,
524
525 #[cfg_attr(
526 feature = "serialize",
527 serde(default, skip_serializing_if = "is_default")
528 )]
529 pub vendor: Option<String>,
530
531 #[cfg_attr(
532 feature = "serialize",
533 serde(default, skip_serializing_if = "is_default")
534 )]
535 pub comment: Option<String>,
536
537 #[cfg_attr(
538 feature = "serialize",
539 serde(default, skip_serializing_if = "is_default")
540 )]
541 pub children: Vec<EnumsChild>,
542
543 #[cfg_attr(
544 feature = "serialize",
545 serde(default, skip_serializing_if = "is_default")
546 )]
547 pub bitwidth: Option<u32>,
548}
549
550#[derive(Debug, Clone, PartialEq, Eq)]
552#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
553#[non_exhaustive]
554pub enum EnumsChild {
555 Enum(Enum),
557
558 Unused(Unused),
560
561 Comment(String),
563}
564
565#[derive(Debug, Clone, PartialEq, Eq, Default)]
567#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
568#[non_exhaustive]
569pub struct Unused {
570 pub start: i64,
572
573 #[cfg_attr(
575 feature = "serialize",
576 serde(default, skip_serializing_if = "is_default")
577 )]
578 pub end: Option<i64>,
579
580 #[cfg_attr(
582 feature = "serialize",
583 serde(default, skip_serializing_if = "is_default")
584 )]
585 pub vendor: Option<String>,
586
587 #[cfg_attr(
589 feature = "serialize",
590 serde(default, skip_serializing_if = "is_default")
591 )]
592 pub comment: Option<String>,
593}
594
595#[derive(Debug, Clone, PartialEq, Eq, Default)]
597#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
598#[non_exhaustive]
599pub struct Enum {
600 pub name: String,
602
603 #[cfg_attr(
605 feature = "serialize",
606 serde(default, skip_serializing_if = "is_default")
607 )]
608 pub comment: Option<String>,
609
610 #[cfg_attr(
611 feature = "serialize",
612 serde(default, skip_serializing_if = "is_default")
613 )]
614 pub type_suffix: Option<String>,
615
616 #[cfg_attr(
617 feature = "serialize",
618 serde(default, skip_serializing_if = "is_default")
619 )]
620 pub api: Option<String>,
621
622 #[cfg_attr(
623 feature = "serialize",
624 serde(default, skip_serializing_if = "is_default")
625 )]
626 pub protect: Option<String>,
627
628 #[cfg_attr(
629 feature = "serialize",
630 serde(default, skip_serializing_if = "is_default")
631 )]
632 pub deprecated: Option<String>,
633
634 #[cfg_attr(
635 feature = "serialize",
636 serde(default, skip_serializing_if = "is_default")
637 )]
638 pub spec: EnumSpec,
639}
640
641#[derive(Debug, Clone, PartialEq, Eq)]
643#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
644#[non_exhaustive]
645pub enum EnumSpec {
646 None,
647
648 Alias {
649 alias: String,
650
651 #[cfg_attr(
652 feature = "serialize",
653 serde(default, skip_serializing_if = "is_default")
654 )]
655 extends: Option<String>,
656 },
657
658 Offset {
659 offset: i64,
660
661 #[cfg_attr(
662 feature = "serialize",
663 serde(default, skip_serializing_if = "is_default")
664 )]
665 extends: String,
666
667 #[cfg_attr(
668 feature = "serialize",
669 serde(default, skip_serializing_if = "is_default")
670 )]
671 extnumber: Option<i64>,
672
673 #[cfg_attr(
674 feature = "serialize",
675 serde(default, skip_serializing_if = "is_default")
676 )]
677 dir: bool,
678 },
679
680 Bitpos {
682 bitpos: i64,
684
685 #[cfg_attr(
687 feature = "serialize",
688 serde(default, skip_serializing_if = "is_default")
689 )]
690 extends: Option<String>,
691 },
692
693 Value {
695 value: String, #[cfg_attr(
700 feature = "serialize",
701 serde(default, skip_serializing_if = "is_default")
702 )]
703 extends: Option<String>,
704 },
705}
706
707impl Default for EnumSpec {
708 fn default() -> Self {
709 EnumSpec::None
710 }
711}
712
713pub type Commands = CommentedChildren<Command>;
714
715#[derive(Debug, Clone, PartialEq, Eq)]
717#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
718#[non_exhaustive]
719pub enum Command {
720 Alias { name: String, alias: String },
722
723 Definition(CommandDefinition),
725}
726
727#[derive(Debug, Clone, PartialEq, Eq, Default)]
728#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
729#[non_exhaustive]
730pub struct CommandDefinition {
731 #[cfg_attr(
732 feature = "serialize",
733 serde(default, skip_serializing_if = "is_default")
734 )]
735 pub tasks: Option<String>,
736
737 #[cfg_attr(
738 feature = "serialize",
739 serde(default, skip_serializing_if = "is_default")
740 )]
741 pub queues: Option<String>,
742
743 #[cfg_attr(
744 feature = "serialize",
745 serde(default, skip_serializing_if = "is_default")
746 )]
747 pub successcodes: Option<String>,
748
749 #[cfg_attr(
750 feature = "serialize",
751 serde(default, skip_serializing_if = "is_default")
752 )]
753 pub errorcodes: Option<String>,
754
755 #[cfg_attr(
756 feature = "serialize",
757 serde(default, skip_serializing_if = "is_default")
758 )]
759 pub renderpass: Option<String>,
760
761 #[cfg_attr(
762 feature = "serialize",
763 serde(default, skip_serializing_if = "is_default")
764 )]
765 pub videocoding: Option<String>,
766
767 #[cfg_attr(
768 feature = "serialize",
769 serde(default, skip_serializing_if = "is_default")
770 )]
771 pub conditionalrendering: Option<bool>,
772
773 #[cfg_attr(
774 feature = "serialize",
775 serde(default, skip_serializing_if = "is_default")
776 )]
777 pub cmdbufferlevel: Option<String>,
778
779 #[cfg_attr(
780 feature = "serialize",
781 serde(default, skip_serializing_if = "is_default")
782 )]
783 pub allownoqueues: Option<String>,
784
785 #[cfg_attr(
786 feature = "serialize",
787 serde(default, skip_serializing_if = "is_default")
788 )]
789 pub pipeline: Option<String>,
790
791 #[cfg_attr(
792 feature = "serialize",
793 serde(default, skip_serializing_if = "is_default")
794 )]
795 pub comment: Option<String>,
796
797 #[cfg_attr(
798 feature = "serialize",
799 serde(default, skip_serializing_if = "is_default")
800 )]
801 pub proto: NameWithType,
802
803 #[cfg_attr(
804 feature = "serialize",
805 serde(default, skip_serializing_if = "is_default")
806 )]
807 pub params: Vec<CommandParam>,
808
809 #[cfg_attr(
810 feature = "serialize",
811 serde(default, skip_serializing_if = "is_default")
812 )]
813 pub alias: Option<String>,
814
815 #[cfg_attr(
816 feature = "serialize",
817 serde(default, skip_serializing_if = "is_default")
818 )]
819 pub description: Option<String>,
820
821 #[cfg_attr(
822 feature = "serialize",
823 serde(default, skip_serializing_if = "is_default")
824 )]
825 pub implicitexternsyncparams: Vec<String>,
826
827 #[cfg_attr(
828 feature = "serialize",
829 serde(default, skip_serializing_if = "is_default")
830 )]
831 pub api: Option<String>,
832
833 #[cfg_attr(
834 feature = "serialize",
835 serde(default, skip_serializing_if = "is_default")
836 )]
837 pub export: Option<String>,
838
839 #[cfg_attr(
840 feature = "serialize",
841 serde(default, skip_serializing_if = "is_default")
842 )]
843 pub code: String,
844}
845
846#[derive(Debug, Clone, PartialEq, Eq, Default)]
848#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
849#[non_exhaustive]
850pub struct CommandParam {
851 #[cfg_attr(
853 feature = "serialize",
854 serde(default, skip_serializing_if = "is_default")
855 )]
856 pub len: Option<String>,
857
858 #[cfg_attr(
860 feature = "serialize",
861 serde(default, skip_serializing_if = "is_default")
862 )]
863 pub altlen: Option<String>,
864
865 #[cfg_attr(
867 feature = "serialize",
868 serde(default, skip_serializing_if = "is_default")
869 )]
870 pub externsync: Option<String>,
871
872 #[cfg_attr(
874 feature = "serialize",
875 serde(default, skip_serializing_if = "is_default")
876 )]
877 pub optional: Option<String>,
878
879 #[cfg_attr(
881 feature = "serialize",
882 serde(default, skip_serializing_if = "is_default")
883 )]
884 pub noautovalidity: Option<String>,
885
886 #[cfg_attr(
887 feature = "serialize",
888 serde(default, skip_serializing_if = "is_default")
889 )]
890 pub objecttype: Option<String>,
891
892 #[cfg_attr(
894 feature = "serialize",
895 serde(default, skip_serializing_if = "is_default")
896 )]
897 pub definition: NameWithType,
898
899 #[cfg_attr(
904 feature = "serialize",
905 serde(default, skip_serializing_if = "is_default")
906 )]
907 pub validstructs: Vec<String>,
908
909 #[cfg_attr(
910 feature = "serialize",
911 serde(default, skip_serializing_if = "is_default")
912 )]
913 pub stride: Option<String>,
914
915 #[cfg_attr(
916 feature = "serialize",
917 serde(default, skip_serializing_if = "is_default")
918 )]
919 pub api: Option<String>,
920}
921
922#[derive(Debug, Clone, PartialEq, Eq, Default)]
923#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
924#[non_exhaustive]
925pub struct Feature {
926 #[cfg_attr(
927 feature = "serialize",
928 serde(default, skip_serializing_if = "is_default")
929 )]
930 pub api: String,
931
932 #[cfg_attr(
933 feature = "serialize",
934 serde(default, skip_serializing_if = "is_default")
935 )]
936 pub apitype: Option<String>,
937
938 #[cfg_attr(
939 feature = "serialize",
940 serde(default, skip_serializing_if = "is_default")
941 )]
942 pub name: String,
943
944 #[cfg_attr(
945 feature = "serialize",
946 serde(default, skip_serializing_if = "is_default")
947 )]
948 pub number: Option<String>,
949
950 #[cfg_attr(
951 feature = "serialize",
952 serde(default, skip_serializing_if = "is_default")
953 )]
954 pub depends: Option<String>,
955
956 #[cfg_attr(
957 feature = "serialize",
958 serde(default, skip_serializing_if = "is_default")
959 )]
960 pub protect: Option<String>,
961
962 #[cfg_attr(
963 feature = "serialize",
964 serde(default, skip_serializing_if = "is_default")
965 )]
966 pub comment: Option<String>,
967
968 #[cfg_attr(
969 feature = "serialize",
970 serde(default, skip_serializing_if = "is_default")
971 )]
972 pub children: Vec<FeatureChild>,
973}
974
975pub type FeatureChild = ExtensionChild;
976
977pub type Extensions = CommentedChildren<Extension>;
978
979#[derive(Debug, Clone, PartialEq, Eq, Default)]
980#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
981#[non_exhaustive]
982pub struct Extension {
983 pub name: String,
985
986 #[cfg_attr(
988 feature = "serialize",
989 serde(default, skip_serializing_if = "is_default")
990 )]
991 pub comment: Option<String>,
992
993 #[cfg_attr(
995 feature = "serialize",
996 serde(default, skip_serializing_if = "is_default")
997 )]
998 pub number: Option<i64>,
999
1000 #[cfg_attr(
1001 feature = "serialize",
1002 serde(default, skip_serializing_if = "is_default")
1003 )]
1004 pub protect: Option<String>,
1005
1006 #[cfg_attr(
1008 feature = "serialize",
1009 serde(default, skip_serializing_if = "is_default")
1010 )]
1011 pub platform: Option<String>,
1012
1013 #[cfg_attr(
1015 feature = "serialize",
1016 serde(default, skip_serializing_if = "is_default")
1017 )]
1018 pub author: Option<String>,
1019
1020 #[cfg_attr(
1022 feature = "serialize",
1023 serde(default, skip_serializing_if = "is_default")
1024 )]
1025 pub contact: Option<String>,
1026
1027 #[cfg_attr(
1029 feature = "serialize",
1030 serde(default, skip_serializing_if = "is_default")
1031 )]
1032 pub ext_type: Option<String>,
1033
1034 #[cfg_attr(
1035 feature = "serialize",
1036 serde(default, skip_serializing_if = "is_default")
1037 )]
1038 pub requires: Option<String>,
1039
1040 #[cfg_attr(
1041 feature = "serialize",
1042 serde(default, skip_serializing_if = "is_default")
1043 )]
1044 pub requires_core: Option<String>,
1045
1046 #[cfg_attr(
1047 feature = "serialize",
1048 serde(default, skip_serializing_if = "is_default")
1049 )]
1050 pub supported: Option<String>, #[cfg_attr(
1053 feature = "serialize",
1054 serde(default, skip_serializing_if = "is_default")
1055 )]
1056 pub ratified: Option<String>,
1057
1058 #[cfg_attr(
1059 feature = "serialize",
1060 serde(default, skip_serializing_if = "is_default")
1061 )]
1062 pub deprecatedby: Option<String>,
1063
1064 #[cfg_attr(
1066 feature = "serialize",
1067 serde(default, skip_serializing_if = "is_default")
1068 )]
1069 pub promotedto: Option<String>,
1070
1071 #[cfg_attr(
1072 feature = "serialize",
1073 serde(default, skip_serializing_if = "is_default")
1074 )]
1075 pub obsoletedby: Option<String>,
1076
1077 #[cfg_attr(
1079 feature = "serialize",
1080 serde(default, skip_serializing_if = "is_default")
1081 )]
1082 pub provisional: bool,
1083
1084 #[cfg_attr(
1086 feature = "serialize",
1087 serde(default, skip_serializing_if = "is_default")
1088 )]
1089 pub specialuse: Option<String>,
1090
1091 #[cfg_attr(
1093 feature = "serialize",
1094 serde(default, skip_serializing_if = "is_default")
1095 )]
1096 pub sortorder: Option<i64>,
1097
1098 #[cfg_attr(
1099 feature = "serialize",
1100 serde(default, skip_serializing_if = "is_default")
1101 )]
1102 pub depends: Option<String>,
1103
1104 #[cfg_attr(
1105 feature = "serialize",
1106 serde(default, skip_serializing_if = "is_default")
1107 )]
1108 pub nofeatures: bool,
1109
1110 #[cfg_attr(
1112 feature = "serialize",
1113 serde(default, skip_serializing_if = "is_default")
1114 )]
1115 pub children: Vec<ExtensionChild>,
1116}
1117
1118#[derive(Debug, Clone, PartialEq, Eq)]
1122#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1123#[non_exhaustive]
1124pub enum ExtensionChild {
1125 Require {
1127 #[cfg_attr(
1128 feature = "serialize",
1129 serde(default, skip_serializing_if = "is_default")
1130 )]
1131 api: Option<String>,
1132
1133 #[cfg_attr(
1134 feature = "serialize",
1135 serde(default, skip_serializing_if = "is_default")
1136 )]
1137 profile: Option<String>,
1138
1139 #[cfg_attr(
1141 feature = "serialize",
1142 serde(default, skip_serializing_if = "is_default")
1143 )]
1144 extension: Option<String>,
1145
1146 #[cfg_attr(
1147 feature = "serialize",
1148 serde(default, skip_serializing_if = "is_default")
1149 )]
1150 feature: Option<String>,
1151
1152 #[cfg_attr(
1153 feature = "serialize",
1154 serde(default, skip_serializing_if = "is_default")
1155 )]
1156 comment: Option<String>,
1157
1158 #[cfg_attr(
1159 feature = "serialize",
1160 serde(default, skip_serializing_if = "is_default")
1161 )]
1162 depends: Option<String>,
1163
1164 items: Vec<InterfaceItem>,
1166 },
1167
1168 Deprecate {
1169 #[cfg_attr(
1170 feature = "serialize",
1171 serde(default, skip_serializing_if = "is_default")
1172 )]
1173 api: Option<String>,
1174
1175 #[cfg_attr(
1176 feature = "serialize",
1177 serde(default, skip_serializing_if = "is_default")
1178 )]
1179 profile: Option<String>,
1180
1181 #[cfg_attr(
1182 feature = "serialize",
1183 serde(default, skip_serializing_if = "is_default")
1184 )]
1185 comment: Option<String>,
1186
1187 #[cfg_attr(
1188 feature = "serialize",
1189 serde(default, skip_serializing_if = "is_default")
1190 )]
1191 explanationlink: String,
1192
1193 items: Vec<InterfaceItem>,
1194 },
1195
1196 Remove {
1198 #[cfg_attr(
1199 feature = "serialize",
1200 serde(default, skip_serializing_if = "is_default")
1201 )]
1202 api: Option<String>,
1203
1204 #[cfg_attr(
1205 feature = "serialize",
1206 serde(default, skip_serializing_if = "is_default")
1207 )]
1208 profile: Option<String>,
1209
1210 #[cfg_attr(
1211 feature = "serialize",
1212 serde(default, skip_serializing_if = "is_default")
1213 )]
1214 comment: Option<String>,
1215
1216 #[cfg_attr(
1217 feature = "serialize",
1218 serde(default, skip_serializing_if = "is_default")
1219 )]
1220 reasonlink: Option<String>,
1221
1222 #[cfg_attr(
1223 feature = "serialize",
1224 serde(default, skip_serializing_if = "is_default")
1225 )]
1226 items: Vec<InterfaceItem>,
1227 },
1228}
1229
1230#[derive(Debug, Clone, PartialEq, Eq)]
1234#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1235#[non_exhaustive]
1236pub enum InterfaceItem {
1237 Comment(String),
1238
1239 Type {
1240 name: String,
1241
1242 #[cfg_attr(
1243 feature = "serialize",
1244 serde(default, skip_serializing_if = "is_default")
1245 )]
1246 comment: Option<String>,
1247
1248 #[cfg_attr(
1249 feature = "serialize",
1250 serde(default, skip_serializing_if = "is_default")
1251 )]
1252 supersededby: Option<String>,
1253 },
1254
1255 Enum(Enum),
1256
1257 Command {
1258 name: String,
1259
1260 #[cfg_attr(
1261 feature = "serialize",
1262 serde(default, skip_serializing_if = "is_default")
1263 )]
1264 comment: Option<String>,
1265
1266 #[cfg_attr(
1267 feature = "serialize",
1268 serde(default, skip_serializing_if = "is_default")
1269 )]
1270 supersededby: Option<String>,
1271 },
1272
1273 Feature {
1274 name: String,
1275
1276 struct_: String,
1277
1278 #[cfg_attr(
1279 feature = "serialize",
1280 serde(default, skip_serializing_if = "is_default")
1281 )]
1282 comment: Option<String>,
1283 },
1284}
1285
1286pub type Formats = CommentedChildren<Format>;
1287
1288#[derive(Debug, Clone, PartialEq, Eq, Default)]
1289#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1290#[non_exhaustive]
1291pub struct Format {
1292 pub name: String,
1293 pub class: String,
1294 pub blockSize: u8,
1295 pub texelsPerBlock: u8,
1296
1297 #[cfg_attr(
1298 feature = "serialize",
1299 serde(default, skip_serializing_if = "is_default")
1300 )]
1301 pub blockExtent: Option<String>,
1302
1303 #[cfg_attr(
1304 feature = "serialize",
1305 serde(default, skip_serializing_if = "is_default")
1306 )]
1307 pub packed: Option<u8>,
1308
1309 #[cfg_attr(
1310 feature = "serialize",
1311 serde(default, skip_serializing_if = "is_default")
1312 )]
1313 pub compressed: Option<String>,
1314
1315 #[cfg_attr(
1316 feature = "serialize",
1317 serde(default, skip_serializing_if = "is_default")
1318 )]
1319 pub chroma: Option<String>,
1320
1321 pub children: Vec<FormatChild>,
1322}
1323
1324#[derive(Debug, Clone, PartialEq, Eq)]
1325#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1326#[non_exhaustive]
1327pub enum FormatChild {
1328 #[non_exhaustive]
1329 Component {
1330 name: String,
1331 bits: String,
1332 numericFormat: String,
1333 #[cfg_attr(
1334 feature = "serialize",
1335 serde(default, skip_serializing_if = "is_default")
1336 )]
1337 planeIndex: Option<u8>,
1338 },
1339
1340 #[non_exhaustive]
1341 Plane {
1342 index: u8,
1343 widthDivisor: u8,
1344 heightDivisor: u8,
1345 compatible: String,
1346 },
1347
1348 #[non_exhaustive]
1349 SpirvImageFormat { name: String },
1350}
1351
1352#[derive(Debug, Clone, PartialEq, Eq, Default)]
1353#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1354#[non_exhaustive]
1355pub struct NameWithType {
1356 #[cfg_attr(
1357 feature = "serialize",
1358 serde(default, skip_serializing_if = "is_default")
1359 )]
1360 pub type_name: Option<String>,
1361
1362 #[cfg_attr(
1363 feature = "serialize",
1364 serde(default, skip_serializing_if = "is_default")
1365 )]
1366 pub name: String,
1367
1368 #[cfg_attr(
1369 feature = "serialize",
1370 serde(default, skip_serializing_if = "is_default")
1371 )]
1372 pub code: String,
1373}
1374
1375#[derive(Debug, Clone, PartialEq, Eq, Default)]
1376#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1377#[non_exhaustive]
1378pub struct CommentedChildren<T> {
1379 #[cfg_attr(
1380 feature = "serialize",
1381 serde(default, skip_serializing_if = "is_default")
1382 )]
1383 pub comment: Option<String>,
1384
1385 pub children: Vec<T>,
1386}
1387
1388#[derive(Debug, Clone, PartialEq, Eq, Default)]
1389#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1390#[non_exhaustive]
1391pub struct SpirvExtOrCap {
1392 #[cfg_attr(
1393 feature = "serialize",
1394 serde(default, skip_serializing_if = "is_default")
1395 )]
1396 pub name: String,
1397
1398 #[cfg_attr(
1399 feature = "serialize",
1400 serde(default, skip_serializing_if = "is_default")
1401 )]
1402 pub enables: Vec<Enable>,
1403}
1404
1405pub type SpirvExtension = SpirvExtOrCap;
1406pub type SpirvExtensions = CommentedChildren<SpirvExtension>;
1407
1408pub type SpirvCapability = SpirvExtOrCap;
1409pub type SpirvCapabilities = CommentedChildren<SpirvCapability>;
1410
1411#[derive(Debug, Clone, PartialEq, Eq)]
1412#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1413#[non_exhaustive]
1414pub enum SyncChild {
1415 Stage(SyncStage),
1416 Access(SyncAccess),
1417 Pipeline(SyncPipeline),
1418}
1419
1420pub type Sync = CommentedChildren<SyncChild>;
1421
1422#[derive(Debug, Clone, PartialEq, Eq, Default)]
1423#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1424#[non_exhaustive]
1425pub struct SyncSupport {
1426 pub queues: Option<String>,
1427 pub stage: Option<String>,
1428}
1429
1430#[derive(Debug, Clone, PartialEq, Eq, Default)]
1431#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1432#[non_exhaustive]
1433pub struct SyncEquivalent {
1434 pub stage: Option<String>,
1435 pub access: Option<String>,
1436}
1437
1438#[derive(Debug, Clone, PartialEq, Eq, Default)]
1439#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1440#[non_exhaustive]
1441pub struct SyncStage {
1442 pub name: String,
1443 pub alias: Option<String>,
1444 pub syncsupport: Option<SyncSupport>,
1445 pub syncequivalent: Option<SyncEquivalent>,
1446}
1447
1448#[derive(Debug, Clone, PartialEq, Eq, Default)]
1449#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1450#[non_exhaustive]
1451pub struct SyncAccess {
1452 pub name: String,
1453 pub alias: Option<String>,
1454 pub comment: Option<String>,
1455 pub syncsupport: Option<SyncSupport>,
1456 pub syncequivalent: Option<SyncEquivalent>,
1457}
1458
1459#[derive(Debug, Clone, PartialEq, Eq, Default)]
1460#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1461#[non_exhaustive]
1462pub struct SyncPipeline {
1463 pub name: String,
1464 pub depends: Option<String>,
1465 pub children: Vec<SyncPipelineStage>,
1466}
1467
1468#[derive(Debug, Clone, PartialEq, Eq, Default)]
1469#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1470#[non_exhaustive]
1471pub struct SyncPipelineStage {
1472 pub order: Option<String>,
1473 pub before: Option<String>,
1474 pub after: Option<String>,
1475 pub text: String,
1476}
1477
1478pub type VideoCodecs = CommentedChildren<VideoCodec>;
1479
1480#[derive(Debug, Clone, PartialEq, Eq, Default)]
1481#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1482#[non_exhaustive]
1483pub struct VideoCodec {
1484 pub comment: Option<String>,
1485 pub name: String,
1486 pub extend: Option<String>,
1487 pub value: Option<String>,
1488 pub children: Vec<VideoCodecChild>,
1489}
1490
1491#[derive(Debug, Clone, PartialEq, Eq)]
1492#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1493#[non_exhaustive]
1494pub enum VideoCodecChild {
1495 Profiles(VideoProfiles),
1496 Capabilities(VideoCapabilities),
1497 Format(VideoFormat),
1498}
1499
1500#[derive(Debug, Clone, PartialEq, Eq, Default)]
1501#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1502#[non_exhaustive]
1503pub struct VideoProfiles {
1504 pub comment: Option<String>,
1505 pub struct_: String,
1506 pub children: Vec<VideoProfileMember>,
1507}
1508
1509#[derive(Debug, Clone, PartialEq, Eq, Default)]
1510#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1511#[non_exhaustive]
1512pub struct VideoProfileMember {
1513 pub comment: Option<String>,
1514 pub name: String,
1515 pub children: Vec<VideoProfile>,
1516}
1517
1518#[derive(Debug, Clone, PartialEq, Eq, Default)]
1519#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1520#[non_exhaustive]
1521pub struct VideoProfile {
1522 pub comment: Option<String>,
1523 pub name: String,
1524 pub value: String,
1525}
1526
1527#[derive(Debug, Clone, PartialEq, Eq, Default)]
1528#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1529#[non_exhaustive]
1530pub struct VideoCapabilities {
1531 pub comment: Option<String>,
1532 pub struct_: String,
1533}
1534
1535#[derive(Debug, Clone, PartialEq, Eq, Default)]
1536#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1537#[non_exhaustive]
1538pub struct VideoFormat {
1539 pub comment: Option<String>,
1540 pub name: Option<String>,
1541 pub usage: Option<String>,
1542 pub extend: Option<String>,
1543 pub children: Vec<VideoFormatChild>,
1544}
1545
1546#[derive(Debug, Clone, PartialEq, Eq)]
1547#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1548#[non_exhaustive]
1549pub enum VideoFormatChild {
1550 RequireCapabilities(VideoRequireCapabilities),
1551 FormatProperties(VideoFormatProperties),
1552}
1553
1554#[derive(Debug, Clone, PartialEq, Eq, Default)]
1555#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1556#[non_exhaustive]
1557pub struct VideoFormatProperties {
1558 pub comment: Option<String>,
1559 pub struct_: String,
1560}
1561
1562#[derive(Debug, Clone, PartialEq, Eq, Default)]
1563#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1564#[non_exhaustive]
1565pub struct VideoRequireCapabilities {
1566 pub comment: Option<String>,
1567 pub struct_: String,
1568 pub member: String,
1569 pub value: String,
1570}
1571
1572#[derive(Debug, Clone, PartialEq, Eq)]
1573#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1574#[non_exhaustive]
1575pub enum Enable {
1576 Version(String),
1577 Extension(String),
1578 Feature(FeatureEnable),
1579 Property(PropertyEnable),
1580}
1581
1582#[derive(Debug, Clone, PartialEq, Eq, Default)]
1583#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1584#[non_exhaustive]
1585pub struct FeatureEnable {
1586 #[cfg_attr(
1587 feature = "serialize",
1588 serde(default, skip_serializing_if = "is_default")
1589 )]
1590 pub struct_: String,
1591
1592 #[cfg_attr(
1593 feature = "serialize",
1594 serde(default, skip_serializing_if = "is_default")
1595 )]
1596 pub feature: String,
1597
1598 #[cfg_attr(
1599 feature = "serialize",
1600 serde(default, skip_serializing_if = "is_default")
1601 )]
1602 pub requires: Option<String>,
1603
1604 #[cfg_attr(
1605 feature = "serialize",
1606 serde(default, skip_serializing_if = "is_default")
1607 )]
1608 pub alias: Option<String>,
1609}
1610
1611#[derive(Debug, Clone, PartialEq, Eq, Default)]
1612#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1613#[non_exhaustive]
1614pub struct PropertyEnable {
1615 #[cfg_attr(
1616 feature = "serialize",
1617 serde(default, skip_serializing_if = "is_default")
1618 )]
1619 pub property: String,
1620
1621 #[cfg_attr(
1622 feature = "serialize",
1623 serde(default, skip_serializing_if = "is_default")
1624 )]
1625 pub member: String,
1626
1627 #[cfg_attr(
1628 feature = "serialize",
1629 serde(default, skip_serializing_if = "is_default")
1630 )]
1631 pub value: String,
1632
1633 #[cfg_attr(
1634 feature = "serialize",
1635 serde(default, skip_serializing_if = "is_default")
1636 )]
1637 pub requires: Option<String>,
1638}
1639
1640#[cfg(feature = "serialize")]
1641fn is_default<T: Default + Eq>(v: &T) -> bool {
1642 v.eq(&T::default())
1643}