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
475#[derive(Debug, Clone, PartialEq, Eq)]
476#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
477#[non_exhaustive]
478pub enum TypeMemberMarkup {
479 Name(String),
480 Type(String),
481 Enum(String),
482 Comment(String),
483}
484
485#[derive(Debug, Clone, PartialEq, Eq, Default)]
486#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
487#[non_exhaustive]
488pub struct Enums {
489 #[cfg_attr(
490 feature = "serialize",
491 serde(default, skip_serializing_if = "is_default")
492 )]
493 pub name: Option<String>,
494
495 #[cfg_attr(
496 feature = "serialize",
497 serde(default, skip_serializing_if = "is_default")
498 )]
499 pub kind: Option<String>,
500
501 #[cfg_attr(
502 feature = "serialize",
503 serde(default, skip_serializing_if = "is_default")
504 )]
505 pub start: Option<i64>,
506
507 #[cfg_attr(
508 feature = "serialize",
509 serde(default, skip_serializing_if = "is_default")
510 )]
511 pub end: Option<i64>,
512
513 #[cfg_attr(
514 feature = "serialize",
515 serde(default, skip_serializing_if = "is_default")
516 )]
517 pub vendor: Option<String>,
518
519 #[cfg_attr(
520 feature = "serialize",
521 serde(default, skip_serializing_if = "is_default")
522 )]
523 pub comment: Option<String>,
524
525 #[cfg_attr(
526 feature = "serialize",
527 serde(default, skip_serializing_if = "is_default")
528 )]
529 pub children: Vec<EnumsChild>,
530
531 #[cfg_attr(
532 feature = "serialize",
533 serde(default, skip_serializing_if = "is_default")
534 )]
535 pub bitwidth: Option<u32>,
536}
537
538#[derive(Debug, Clone, PartialEq, Eq)]
540#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
541#[non_exhaustive]
542pub enum EnumsChild {
543 Enum(Enum),
545
546 Unused(Unused),
548
549 Comment(String),
551}
552
553#[derive(Debug, Clone, PartialEq, Eq, Default)]
555#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
556#[non_exhaustive]
557pub struct Unused {
558 pub start: i64,
560
561 #[cfg_attr(
563 feature = "serialize",
564 serde(default, skip_serializing_if = "is_default")
565 )]
566 pub end: Option<i64>,
567
568 #[cfg_attr(
570 feature = "serialize",
571 serde(default, skip_serializing_if = "is_default")
572 )]
573 pub vendor: Option<String>,
574
575 #[cfg_attr(
577 feature = "serialize",
578 serde(default, skip_serializing_if = "is_default")
579 )]
580 pub comment: Option<String>,
581}
582
583#[derive(Debug, Clone, PartialEq, Eq, Default)]
585#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
586#[non_exhaustive]
587pub struct Enum {
588 pub name: String,
590
591 #[cfg_attr(
593 feature = "serialize",
594 serde(default, skip_serializing_if = "is_default")
595 )]
596 pub comment: Option<String>,
597
598 #[cfg_attr(
599 feature = "serialize",
600 serde(default, skip_serializing_if = "is_default")
601 )]
602 pub type_suffix: Option<String>,
603
604 #[cfg_attr(
605 feature = "serialize",
606 serde(default, skip_serializing_if = "is_default")
607 )]
608 pub api: Option<String>,
609
610 #[cfg_attr(
611 feature = "serialize",
612 serde(default, skip_serializing_if = "is_default")
613 )]
614 pub protect: Option<String>,
615
616 #[cfg_attr(
617 feature = "serialize",
618 serde(default, skip_serializing_if = "is_default")
619 )]
620 pub deprecated: Option<String>,
621
622 #[cfg_attr(
623 feature = "serialize",
624 serde(default, skip_serializing_if = "is_default")
625 )]
626 pub spec: EnumSpec,
627}
628
629#[derive(Debug, Clone, PartialEq, Eq)]
631#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
632#[non_exhaustive]
633pub enum EnumSpec {
634 None,
635
636 Alias {
637 alias: String,
638
639 #[cfg_attr(
640 feature = "serialize",
641 serde(default, skip_serializing_if = "is_default")
642 )]
643 extends: Option<String>,
644 },
645
646 Offset {
647 offset: i64,
648
649 #[cfg_attr(
650 feature = "serialize",
651 serde(default, skip_serializing_if = "is_default")
652 )]
653 extends: String,
654
655 #[cfg_attr(
656 feature = "serialize",
657 serde(default, skip_serializing_if = "is_default")
658 )]
659 extnumber: Option<i64>,
660
661 #[cfg_attr(
662 feature = "serialize",
663 serde(default, skip_serializing_if = "is_default")
664 )]
665 dir: bool,
666 },
667
668 Bitpos {
670 bitpos: i64,
672
673 #[cfg_attr(
675 feature = "serialize",
676 serde(default, skip_serializing_if = "is_default")
677 )]
678 extends: Option<String>,
679 },
680
681 Value {
683 value: String, #[cfg_attr(
688 feature = "serialize",
689 serde(default, skip_serializing_if = "is_default")
690 )]
691 extends: Option<String>,
692 },
693}
694
695impl Default for EnumSpec {
696 fn default() -> Self {
697 EnumSpec::None
698 }
699}
700
701pub type Commands = CommentedChildren<Command>;
702
703#[derive(Debug, Clone, PartialEq, Eq)]
705#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
706#[non_exhaustive]
707pub enum Command {
708 Alias { name: String, alias: String },
710
711 Definition(CommandDefinition),
713}
714
715#[derive(Debug, Clone, PartialEq, Eq, Default)]
716#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
717#[non_exhaustive]
718pub struct CommandDefinition {
719 #[cfg_attr(
720 feature = "serialize",
721 serde(default, skip_serializing_if = "is_default")
722 )]
723 pub tasks: Option<String>,
724
725 #[cfg_attr(
726 feature = "serialize",
727 serde(default, skip_serializing_if = "is_default")
728 )]
729 pub queues: Option<String>,
730
731 #[cfg_attr(
732 feature = "serialize",
733 serde(default, skip_serializing_if = "is_default")
734 )]
735 pub successcodes: Option<String>,
736
737 #[cfg_attr(
738 feature = "serialize",
739 serde(default, skip_serializing_if = "is_default")
740 )]
741 pub errorcodes: Option<String>,
742
743 #[cfg_attr(
744 feature = "serialize",
745 serde(default, skip_serializing_if = "is_default")
746 )]
747 pub renderpass: Option<String>,
748
749 #[cfg_attr(
750 feature = "serialize",
751 serde(default, skip_serializing_if = "is_default")
752 )]
753 pub videocoding: Option<String>,
754
755 #[cfg_attr(
756 feature = "serialize",
757 serde(default, skip_serializing_if = "is_default")
758 )]
759 pub conditionalrendering: Option<bool>,
760
761 #[cfg_attr(
762 feature = "serialize",
763 serde(default, skip_serializing_if = "is_default")
764 )]
765 pub cmdbufferlevel: Option<String>,
766
767 #[cfg_attr(
768 feature = "serialize",
769 serde(default, skip_serializing_if = "is_default")
770 )]
771 pub allownoqueues: Option<String>,
772
773 #[cfg_attr(
774 feature = "serialize",
775 serde(default, skip_serializing_if = "is_default")
776 )]
777 pub pipeline: Option<String>,
778
779 #[cfg_attr(
780 feature = "serialize",
781 serde(default, skip_serializing_if = "is_default")
782 )]
783 pub comment: Option<String>,
784
785 #[cfg_attr(
786 feature = "serialize",
787 serde(default, skip_serializing_if = "is_default")
788 )]
789 pub proto: NameWithType,
790
791 #[cfg_attr(
792 feature = "serialize",
793 serde(default, skip_serializing_if = "is_default")
794 )]
795 pub params: Vec<CommandParam>,
796
797 #[cfg_attr(
798 feature = "serialize",
799 serde(default, skip_serializing_if = "is_default")
800 )]
801 pub alias: Option<String>,
802
803 #[cfg_attr(
804 feature = "serialize",
805 serde(default, skip_serializing_if = "is_default")
806 )]
807 pub description: Option<String>,
808
809 #[cfg_attr(
810 feature = "serialize",
811 serde(default, skip_serializing_if = "is_default")
812 )]
813 pub implicitexternsyncparams: Vec<String>,
814
815 #[cfg_attr(
816 feature = "serialize",
817 serde(default, skip_serializing_if = "is_default")
818 )]
819 pub api: Option<String>,
820
821 #[cfg_attr(
822 feature = "serialize",
823 serde(default, skip_serializing_if = "is_default")
824 )]
825 pub export: Option<String>,
826
827 #[cfg_attr(
828 feature = "serialize",
829 serde(default, skip_serializing_if = "is_default")
830 )]
831 pub code: String,
832}
833
834#[derive(Debug, Clone, PartialEq, Eq, Default)]
836#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
837#[non_exhaustive]
838pub struct CommandParam {
839 #[cfg_attr(
841 feature = "serialize",
842 serde(default, skip_serializing_if = "is_default")
843 )]
844 pub len: Option<String>,
845
846 #[cfg_attr(
848 feature = "serialize",
849 serde(default, skip_serializing_if = "is_default")
850 )]
851 pub altlen: Option<String>,
852
853 #[cfg_attr(
855 feature = "serialize",
856 serde(default, skip_serializing_if = "is_default")
857 )]
858 pub externsync: Option<String>,
859
860 #[cfg_attr(
862 feature = "serialize",
863 serde(default, skip_serializing_if = "is_default")
864 )]
865 pub optional: Option<String>,
866
867 #[cfg_attr(
869 feature = "serialize",
870 serde(default, skip_serializing_if = "is_default")
871 )]
872 pub noautovalidity: Option<String>,
873
874 #[cfg_attr(
875 feature = "serialize",
876 serde(default, skip_serializing_if = "is_default")
877 )]
878 pub objecttype: Option<String>,
879
880 #[cfg_attr(
882 feature = "serialize",
883 serde(default, skip_serializing_if = "is_default")
884 )]
885 pub definition: NameWithType,
886
887 #[cfg_attr(
892 feature = "serialize",
893 serde(default, skip_serializing_if = "is_default")
894 )]
895 pub validstructs: Vec<String>,
896
897 #[cfg_attr(
898 feature = "serialize",
899 serde(default, skip_serializing_if = "is_default")
900 )]
901 pub stride: Option<String>,
902
903 #[cfg_attr(
904 feature = "serialize",
905 serde(default, skip_serializing_if = "is_default")
906 )]
907 pub api: Option<String>,
908}
909
910#[derive(Debug, Clone, PartialEq, Eq, Default)]
911#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
912#[non_exhaustive]
913pub struct Feature {
914 #[cfg_attr(
915 feature = "serialize",
916 serde(default, skip_serializing_if = "is_default")
917 )]
918 pub api: String,
919
920 #[cfg_attr(
921 feature = "serialize",
922 serde(default, skip_serializing_if = "is_default")
923 )]
924 pub apitype: Option<String>,
925
926 #[cfg_attr(
927 feature = "serialize",
928 serde(default, skip_serializing_if = "is_default")
929 )]
930 pub name: String,
931
932 #[cfg_attr(
933 feature = "serialize",
934 serde(default, skip_serializing_if = "is_default")
935 )]
936 pub number: Option<String>,
937
938 #[cfg_attr(
939 feature = "serialize",
940 serde(default, skip_serializing_if = "is_default")
941 )]
942 pub depends: Option<String>,
943
944 #[cfg_attr(
945 feature = "serialize",
946 serde(default, skip_serializing_if = "is_default")
947 )]
948 pub protect: Option<String>,
949
950 #[cfg_attr(
951 feature = "serialize",
952 serde(default, skip_serializing_if = "is_default")
953 )]
954 pub comment: Option<String>,
955
956 #[cfg_attr(
957 feature = "serialize",
958 serde(default, skip_serializing_if = "is_default")
959 )]
960 pub children: Vec<FeatureChild>,
961}
962
963pub type FeatureChild = ExtensionChild;
964
965pub type Extensions = CommentedChildren<Extension>;
966
967#[derive(Debug, Clone, PartialEq, Eq, Default)]
968#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
969#[non_exhaustive]
970pub struct Extension {
971 pub name: String,
973
974 #[cfg_attr(
976 feature = "serialize",
977 serde(default, skip_serializing_if = "is_default")
978 )]
979 pub comment: Option<String>,
980
981 #[cfg_attr(
983 feature = "serialize",
984 serde(default, skip_serializing_if = "is_default")
985 )]
986 pub number: Option<i64>,
987
988 #[cfg_attr(
989 feature = "serialize",
990 serde(default, skip_serializing_if = "is_default")
991 )]
992 pub protect: Option<String>,
993
994 #[cfg_attr(
996 feature = "serialize",
997 serde(default, skip_serializing_if = "is_default")
998 )]
999 pub platform: Option<String>,
1000
1001 #[cfg_attr(
1003 feature = "serialize",
1004 serde(default, skip_serializing_if = "is_default")
1005 )]
1006 pub author: Option<String>,
1007
1008 #[cfg_attr(
1010 feature = "serialize",
1011 serde(default, skip_serializing_if = "is_default")
1012 )]
1013 pub contact: Option<String>,
1014
1015 #[cfg_attr(
1017 feature = "serialize",
1018 serde(default, skip_serializing_if = "is_default")
1019 )]
1020 pub ext_type: Option<String>,
1021
1022 #[cfg_attr(
1023 feature = "serialize",
1024 serde(default, skip_serializing_if = "is_default")
1025 )]
1026 pub requires: Option<String>,
1027
1028 #[cfg_attr(
1029 feature = "serialize",
1030 serde(default, skip_serializing_if = "is_default")
1031 )]
1032 pub requires_core: Option<String>,
1033
1034 #[cfg_attr(
1035 feature = "serialize",
1036 serde(default, skip_serializing_if = "is_default")
1037 )]
1038 pub supported: Option<String>, #[cfg_attr(
1041 feature = "serialize",
1042 serde(default, skip_serializing_if = "is_default")
1043 )]
1044 pub ratified: Option<String>,
1045
1046 #[cfg_attr(
1047 feature = "serialize",
1048 serde(default, skip_serializing_if = "is_default")
1049 )]
1050 pub deprecatedby: Option<String>,
1051
1052 #[cfg_attr(
1054 feature = "serialize",
1055 serde(default, skip_serializing_if = "is_default")
1056 )]
1057 pub promotedto: Option<String>,
1058
1059 #[cfg_attr(
1060 feature = "serialize",
1061 serde(default, skip_serializing_if = "is_default")
1062 )]
1063 pub obsoletedby: Option<String>,
1064
1065 #[cfg_attr(
1067 feature = "serialize",
1068 serde(default, skip_serializing_if = "is_default")
1069 )]
1070 pub provisional: bool,
1071
1072 #[cfg_attr(
1074 feature = "serialize",
1075 serde(default, skip_serializing_if = "is_default")
1076 )]
1077 pub specialuse: Option<String>,
1078
1079 #[cfg_attr(
1081 feature = "serialize",
1082 serde(default, skip_serializing_if = "is_default")
1083 )]
1084 pub sortorder: Option<i64>,
1085
1086 #[cfg_attr(
1087 feature = "serialize",
1088 serde(default, skip_serializing_if = "is_default")
1089 )]
1090 pub depends: Option<String>,
1091
1092 #[cfg_attr(
1093 feature = "serialize",
1094 serde(default, skip_serializing_if = "is_default")
1095 )]
1096 pub nofeatures: bool,
1097
1098 #[cfg_attr(
1100 feature = "serialize",
1101 serde(default, skip_serializing_if = "is_default")
1102 )]
1103 pub children: Vec<ExtensionChild>,
1104}
1105
1106#[derive(Debug, Clone, PartialEq, Eq)]
1110#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1111#[non_exhaustive]
1112pub enum ExtensionChild {
1113 Require {
1115 #[cfg_attr(
1116 feature = "serialize",
1117 serde(default, skip_serializing_if = "is_default")
1118 )]
1119 api: Option<String>,
1120
1121 #[cfg_attr(
1122 feature = "serialize",
1123 serde(default, skip_serializing_if = "is_default")
1124 )]
1125 profile: Option<String>,
1126
1127 #[cfg_attr(
1129 feature = "serialize",
1130 serde(default, skip_serializing_if = "is_default")
1131 )]
1132 extension: Option<String>,
1133
1134 #[cfg_attr(
1135 feature = "serialize",
1136 serde(default, skip_serializing_if = "is_default")
1137 )]
1138 feature: Option<String>,
1139
1140 #[cfg_attr(
1141 feature = "serialize",
1142 serde(default, skip_serializing_if = "is_default")
1143 )]
1144 comment: Option<String>,
1145
1146 #[cfg_attr(
1147 feature = "serialize",
1148 serde(default, skip_serializing_if = "is_default")
1149 )]
1150 depends: Option<String>,
1151
1152 items: Vec<InterfaceItem>,
1154 },
1155
1156 Deprecate {
1157 #[cfg_attr(
1158 feature = "serialize",
1159 serde(default, skip_serializing_if = "is_default")
1160 )]
1161 api: Option<String>,
1162
1163 #[cfg_attr(
1164 feature = "serialize",
1165 serde(default, skip_serializing_if = "is_default")
1166 )]
1167 profile: Option<String>,
1168
1169 #[cfg_attr(
1170 feature = "serialize",
1171 serde(default, skip_serializing_if = "is_default")
1172 )]
1173 comment: Option<String>,
1174
1175 #[cfg_attr(
1176 feature = "serialize",
1177 serde(default, skip_serializing_if = "is_default")
1178 )]
1179 explanationlink: String,
1180
1181 items: Vec<InterfaceItem>,
1182 },
1183
1184 Remove {
1186 #[cfg_attr(
1187 feature = "serialize",
1188 serde(default, skip_serializing_if = "is_default")
1189 )]
1190 api: Option<String>,
1191
1192 #[cfg_attr(
1193 feature = "serialize",
1194 serde(default, skip_serializing_if = "is_default")
1195 )]
1196 profile: Option<String>,
1197
1198 #[cfg_attr(
1199 feature = "serialize",
1200 serde(default, skip_serializing_if = "is_default")
1201 )]
1202 comment: Option<String>,
1203
1204 #[cfg_attr(
1205 feature = "serialize",
1206 serde(default, skip_serializing_if = "is_default")
1207 )]
1208 reasonlink: Option<String>,
1209
1210 #[cfg_attr(
1211 feature = "serialize",
1212 serde(default, skip_serializing_if = "is_default")
1213 )]
1214 items: Vec<InterfaceItem>,
1215 },
1216}
1217
1218#[derive(Debug, Clone, PartialEq, Eq)]
1222#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1223#[non_exhaustive]
1224pub enum InterfaceItem {
1225 Comment(String),
1226
1227 Type {
1228 name: String,
1229
1230 #[cfg_attr(
1231 feature = "serialize",
1232 serde(default, skip_serializing_if = "is_default")
1233 )]
1234 comment: Option<String>,
1235
1236 #[cfg_attr(
1237 feature = "serialize",
1238 serde(default, skip_serializing_if = "is_default")
1239 )]
1240 supersededby: Option<String>,
1241 },
1242
1243 Enum(Enum),
1244
1245 Command {
1246 name: String,
1247
1248 #[cfg_attr(
1249 feature = "serialize",
1250 serde(default, skip_serializing_if = "is_default")
1251 )]
1252 comment: Option<String>,
1253
1254 #[cfg_attr(
1255 feature = "serialize",
1256 serde(default, skip_serializing_if = "is_default")
1257 )]
1258 supersededby: Option<String>,
1259 },
1260
1261 Feature {
1262 name: String,
1263
1264 struct_: String,
1265
1266 #[cfg_attr(
1267 feature = "serialize",
1268 serde(default, skip_serializing_if = "is_default")
1269 )]
1270 comment: Option<String>,
1271 },
1272}
1273
1274pub type Formats = CommentedChildren<Format>;
1275
1276#[derive(Debug, Clone, PartialEq, Eq, Default)]
1277#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1278#[non_exhaustive]
1279pub struct Format {
1280 pub name: String,
1281 pub class: String,
1282 pub blockSize: u8,
1283 pub texelsPerBlock: u8,
1284
1285 #[cfg_attr(
1286 feature = "serialize",
1287 serde(default, skip_serializing_if = "is_default")
1288 )]
1289 pub blockExtent: Option<String>,
1290
1291 #[cfg_attr(
1292 feature = "serialize",
1293 serde(default, skip_serializing_if = "is_default")
1294 )]
1295 pub packed: Option<u8>,
1296
1297 #[cfg_attr(
1298 feature = "serialize",
1299 serde(default, skip_serializing_if = "is_default")
1300 )]
1301 pub compressed: Option<String>,
1302
1303 #[cfg_attr(
1304 feature = "serialize",
1305 serde(default, skip_serializing_if = "is_default")
1306 )]
1307 pub chroma: Option<String>,
1308
1309 pub children: Vec<FormatChild>,
1310}
1311
1312#[derive(Debug, Clone, PartialEq, Eq)]
1313#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1314#[non_exhaustive]
1315pub enum FormatChild {
1316 #[non_exhaustive]
1317 Component {
1318 name: String,
1319 bits: String,
1320 numericFormat: String,
1321 #[cfg_attr(
1322 feature = "serialize",
1323 serde(default, skip_serializing_if = "is_default")
1324 )]
1325 planeIndex: Option<u8>,
1326 },
1327
1328 #[non_exhaustive]
1329 Plane {
1330 index: u8,
1331 widthDivisor: u8,
1332 heightDivisor: u8,
1333 compatible: String,
1334 },
1335
1336 #[non_exhaustive]
1337 SpirvImageFormat { name: String },
1338}
1339
1340#[derive(Debug, Clone, PartialEq, Eq, Default)]
1341#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1342#[non_exhaustive]
1343pub struct NameWithType {
1344 #[cfg_attr(
1345 feature = "serialize",
1346 serde(default, skip_serializing_if = "is_default")
1347 )]
1348 pub type_name: Option<String>,
1349
1350 #[cfg_attr(
1351 feature = "serialize",
1352 serde(default, skip_serializing_if = "is_default")
1353 )]
1354 pub name: String,
1355
1356 #[cfg_attr(
1357 feature = "serialize",
1358 serde(default, skip_serializing_if = "is_default")
1359 )]
1360 pub code: String,
1361}
1362
1363#[derive(Debug, Clone, PartialEq, Eq, Default)]
1364#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1365#[non_exhaustive]
1366pub struct CommentedChildren<T> {
1367 #[cfg_attr(
1368 feature = "serialize",
1369 serde(default, skip_serializing_if = "is_default")
1370 )]
1371 pub comment: Option<String>,
1372
1373 pub children: Vec<T>,
1374}
1375
1376#[derive(Debug, Clone, PartialEq, Eq, Default)]
1377#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1378#[non_exhaustive]
1379pub struct SpirvExtOrCap {
1380 #[cfg_attr(
1381 feature = "serialize",
1382 serde(default, skip_serializing_if = "is_default")
1383 )]
1384 pub name: String,
1385
1386 #[cfg_attr(
1387 feature = "serialize",
1388 serde(default, skip_serializing_if = "is_default")
1389 )]
1390 pub enables: Vec<Enable>,
1391}
1392
1393pub type SpirvExtension = SpirvExtOrCap;
1394pub type SpirvExtensions = CommentedChildren<SpirvExtension>;
1395
1396pub type SpirvCapability = SpirvExtOrCap;
1397pub type SpirvCapabilities = CommentedChildren<SpirvCapability>;
1398
1399#[derive(Debug, Clone, PartialEq, Eq)]
1400#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1401#[non_exhaustive]
1402pub enum SyncChild {
1403 Stage(SyncStage),
1404 Access(SyncAccess),
1405 Pipeline(SyncPipeline),
1406}
1407
1408pub type Sync = CommentedChildren<SyncChild>;
1409
1410#[derive(Debug, Clone, PartialEq, Eq, Default)]
1411#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1412#[non_exhaustive]
1413pub struct SyncSupport {
1414 pub queues: Option<String>,
1415 pub stage: Option<String>,
1416}
1417
1418#[derive(Debug, Clone, PartialEq, Eq, Default)]
1419#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1420#[non_exhaustive]
1421pub struct SyncEquivalent {
1422 pub stage: Option<String>,
1423 pub access: Option<String>,
1424}
1425
1426#[derive(Debug, Clone, PartialEq, Eq, Default)]
1427#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1428#[non_exhaustive]
1429pub struct SyncStage {
1430 pub name: String,
1431 pub alias: Option<String>,
1432 pub syncsupport: Option<SyncSupport>,
1433 pub syncequivalent: Option<SyncEquivalent>,
1434}
1435
1436#[derive(Debug, Clone, PartialEq, Eq, Default)]
1437#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1438#[non_exhaustive]
1439pub struct SyncAccess {
1440 pub name: String,
1441 pub alias: Option<String>,
1442 pub comment: Option<String>,
1443 pub syncsupport: Option<SyncSupport>,
1444 pub syncequivalent: Option<SyncEquivalent>,
1445}
1446
1447#[derive(Debug, Clone, PartialEq, Eq, Default)]
1448#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1449#[non_exhaustive]
1450pub struct SyncPipeline {
1451 pub name: String,
1452 pub depends: Option<String>,
1453 pub children: Vec<SyncPipelineStage>,
1454}
1455
1456#[derive(Debug, Clone, PartialEq, Eq, Default)]
1457#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1458#[non_exhaustive]
1459pub struct SyncPipelineStage {
1460 pub order: Option<String>,
1461 pub before: Option<String>,
1462 pub after: Option<String>,
1463 pub text: String,
1464}
1465
1466pub type VideoCodecs = CommentedChildren<VideoCodec>;
1467
1468#[derive(Debug, Clone, PartialEq, Eq, Default)]
1469#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1470#[non_exhaustive]
1471pub struct VideoCodec {
1472 pub comment: Option<String>,
1473 pub name: String,
1474 pub extend: Option<String>,
1475 pub value: Option<String>,
1476 pub children: Vec<VideoCodecChild>,
1477}
1478
1479#[derive(Debug, Clone, PartialEq, Eq)]
1480#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1481#[non_exhaustive]
1482pub enum VideoCodecChild {
1483 Profiles(VideoProfiles),
1484 Capabilities(VideoCapabilities),
1485 Format(VideoFormat),
1486}
1487
1488#[derive(Debug, Clone, PartialEq, Eq, Default)]
1489#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1490#[non_exhaustive]
1491pub struct VideoProfiles {
1492 pub comment: Option<String>,
1493 pub struct_: String,
1494 pub children: Vec<VideoProfileMember>,
1495}
1496
1497#[derive(Debug, Clone, PartialEq, Eq, Default)]
1498#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1499#[non_exhaustive]
1500pub struct VideoProfileMember {
1501 pub comment: Option<String>,
1502 pub name: String,
1503 pub children: Vec<VideoProfile>,
1504}
1505
1506#[derive(Debug, Clone, PartialEq, Eq, Default)]
1507#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1508#[non_exhaustive]
1509pub struct VideoProfile {
1510 pub comment: Option<String>,
1511 pub name: String,
1512 pub value: String,
1513}
1514
1515#[derive(Debug, Clone, PartialEq, Eq, Default)]
1516#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1517#[non_exhaustive]
1518pub struct VideoCapabilities {
1519 pub comment: Option<String>,
1520 pub struct_: String,
1521}
1522
1523#[derive(Debug, Clone, PartialEq, Eq, Default)]
1524#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1525#[non_exhaustive]
1526pub struct VideoFormat {
1527 pub comment: Option<String>,
1528 pub name: Option<String>,
1529 pub usage: Option<String>,
1530 pub extend: Option<String>,
1531 pub children: Vec<VideoFormatChild>,
1532}
1533
1534#[derive(Debug, Clone, PartialEq, Eq)]
1535#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1536#[non_exhaustive]
1537pub enum VideoFormatChild {
1538 RequireCapabilities(VideoRequireCapabilities),
1539 FormatProperties(VideoFormatProperties),
1540}
1541
1542#[derive(Debug, Clone, PartialEq, Eq, Default)]
1543#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1544#[non_exhaustive]
1545pub struct VideoFormatProperties {
1546 pub comment: Option<String>,
1547 pub struct_: String,
1548}
1549
1550#[derive(Debug, Clone, PartialEq, Eq, Default)]
1551#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1552#[non_exhaustive]
1553pub struct VideoRequireCapabilities {
1554 pub comment: Option<String>,
1555 pub struct_: String,
1556 pub member: String,
1557 pub value: String,
1558}
1559
1560#[derive(Debug, Clone, PartialEq, Eq)]
1561#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1562#[non_exhaustive]
1563pub enum Enable {
1564 Version(String),
1565 Extension(String),
1566 Feature(FeatureEnable),
1567 Property(PropertyEnable),
1568}
1569
1570#[derive(Debug, Clone, PartialEq, Eq, Default)]
1571#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1572#[non_exhaustive]
1573pub struct FeatureEnable {
1574 #[cfg_attr(
1575 feature = "serialize",
1576 serde(default, skip_serializing_if = "is_default")
1577 )]
1578 pub struct_: String,
1579
1580 #[cfg_attr(
1581 feature = "serialize",
1582 serde(default, skip_serializing_if = "is_default")
1583 )]
1584 pub feature: String,
1585
1586 #[cfg_attr(
1587 feature = "serialize",
1588 serde(default, skip_serializing_if = "is_default")
1589 )]
1590 pub requires: Option<String>,
1591
1592 #[cfg_attr(
1593 feature = "serialize",
1594 serde(default, skip_serializing_if = "is_default")
1595 )]
1596 pub alias: Option<String>,
1597}
1598
1599#[derive(Debug, Clone, PartialEq, Eq, Default)]
1600#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1601#[non_exhaustive]
1602pub struct PropertyEnable {
1603 #[cfg_attr(
1604 feature = "serialize",
1605 serde(default, skip_serializing_if = "is_default")
1606 )]
1607 pub property: String,
1608
1609 #[cfg_attr(
1610 feature = "serialize",
1611 serde(default, skip_serializing_if = "is_default")
1612 )]
1613 pub member: String,
1614
1615 #[cfg_attr(
1616 feature = "serialize",
1617 serde(default, skip_serializing_if = "is_default")
1618 )]
1619 pub value: String,
1620
1621 #[cfg_attr(
1622 feature = "serialize",
1623 serde(default, skip_serializing_if = "is_default")
1624 )]
1625 pub requires: Option<String>,
1626}
1627
1628#[cfg(feature = "serialize")]
1629fn is_default<T: Default + Eq>(v: &T) -> bool {
1630 v.eq(&T::default())
1631}