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
1237 Enum(Enum),
1238
1239 Command {
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
1249 Feature {
1250 name: String,
1251
1252 struct_: String,
1253
1254 #[cfg_attr(
1255 feature = "serialize",
1256 serde(default, skip_serializing_if = "is_default")
1257 )]
1258 comment: Option<String>,
1259 },
1260}
1261
1262pub type Formats = CommentedChildren<Format>;
1263
1264#[derive(Debug, Clone, PartialEq, Eq, Default)]
1265#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1266#[non_exhaustive]
1267pub struct Format {
1268 pub name: String,
1269 pub class: String,
1270 pub blockSize: u8,
1271 pub texelsPerBlock: u8,
1272
1273 #[cfg_attr(
1274 feature = "serialize",
1275 serde(default, skip_serializing_if = "is_default")
1276 )]
1277 pub blockExtent: Option<String>,
1278
1279 #[cfg_attr(
1280 feature = "serialize",
1281 serde(default, skip_serializing_if = "is_default")
1282 )]
1283 pub packed: Option<u8>,
1284
1285 #[cfg_attr(
1286 feature = "serialize",
1287 serde(default, skip_serializing_if = "is_default")
1288 )]
1289 pub compressed: Option<String>,
1290
1291 #[cfg_attr(
1292 feature = "serialize",
1293 serde(default, skip_serializing_if = "is_default")
1294 )]
1295 pub chroma: Option<String>,
1296
1297 pub children: Vec<FormatChild>,
1298}
1299
1300#[derive(Debug, Clone, PartialEq, Eq)]
1301#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1302#[non_exhaustive]
1303pub enum FormatChild {
1304 #[non_exhaustive]
1305 Component {
1306 name: String,
1307 bits: String,
1308 numericFormat: String,
1309 #[cfg_attr(
1310 feature = "serialize",
1311 serde(default, skip_serializing_if = "is_default")
1312 )]
1313 planeIndex: Option<u8>,
1314 },
1315
1316 #[non_exhaustive]
1317 Plane {
1318 index: u8,
1319 widthDivisor: u8,
1320 heightDivisor: u8,
1321 compatible: String,
1322 },
1323
1324 #[non_exhaustive]
1325 SpirvImageFormat { name: String },
1326}
1327
1328#[derive(Debug, Clone, PartialEq, Eq, Default)]
1329#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1330#[non_exhaustive]
1331pub struct NameWithType {
1332 #[cfg_attr(
1333 feature = "serialize",
1334 serde(default, skip_serializing_if = "is_default")
1335 )]
1336 pub type_name: Option<String>,
1337
1338 #[cfg_attr(
1339 feature = "serialize",
1340 serde(default, skip_serializing_if = "is_default")
1341 )]
1342 pub name: String,
1343
1344 #[cfg_attr(
1345 feature = "serialize",
1346 serde(default, skip_serializing_if = "is_default")
1347 )]
1348 pub code: String,
1349}
1350
1351#[derive(Debug, Clone, PartialEq, Eq, Default)]
1352#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1353#[non_exhaustive]
1354pub struct CommentedChildren<T> {
1355 #[cfg_attr(
1356 feature = "serialize",
1357 serde(default, skip_serializing_if = "is_default")
1358 )]
1359 pub comment: Option<String>,
1360
1361 pub children: Vec<T>,
1362}
1363
1364#[derive(Debug, Clone, PartialEq, Eq, Default)]
1365#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1366#[non_exhaustive]
1367pub struct SpirvExtOrCap {
1368 #[cfg_attr(
1369 feature = "serialize",
1370 serde(default, skip_serializing_if = "is_default")
1371 )]
1372 pub name: String,
1373
1374 #[cfg_attr(
1375 feature = "serialize",
1376 serde(default, skip_serializing_if = "is_default")
1377 )]
1378 pub enables: Vec<Enable>,
1379}
1380
1381pub type SpirvExtension = SpirvExtOrCap;
1382pub type SpirvExtensions = CommentedChildren<SpirvExtension>;
1383
1384pub type SpirvCapability = SpirvExtOrCap;
1385pub type SpirvCapabilities = CommentedChildren<SpirvCapability>;
1386
1387#[derive(Debug, Clone, PartialEq, Eq)]
1388#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1389#[non_exhaustive]
1390pub enum SyncChild {
1391 Stage(SyncStage),
1392 Access(SyncAccess),
1393 Pipeline(SyncPipeline),
1394}
1395
1396pub type Sync = CommentedChildren<SyncChild>;
1397
1398#[derive(Debug, Clone, PartialEq, Eq, Default)]
1399#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1400#[non_exhaustive]
1401pub struct SyncSupport {
1402 pub queues: Option<String>,
1403 pub stage: Option<String>,
1404}
1405
1406#[derive(Debug, Clone, PartialEq, Eq, Default)]
1407#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1408#[non_exhaustive]
1409pub struct SyncEquivalent {
1410 pub stage: Option<String>,
1411 pub access: Option<String>,
1412}
1413
1414#[derive(Debug, Clone, PartialEq, Eq, Default)]
1415#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1416#[non_exhaustive]
1417pub struct SyncStage {
1418 pub name: String,
1419 pub alias: Option<String>,
1420 pub syncsupport: Option<SyncSupport>,
1421 pub syncequivalent: Option<SyncEquivalent>,
1422}
1423
1424#[derive(Debug, Clone, PartialEq, Eq, Default)]
1425#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1426#[non_exhaustive]
1427pub struct SyncAccess {
1428 pub name: String,
1429 pub alias: Option<String>,
1430 pub comment: Option<String>,
1431 pub syncsupport: Option<SyncSupport>,
1432 pub syncequivalent: Option<SyncEquivalent>,
1433}
1434
1435#[derive(Debug, Clone, PartialEq, Eq, Default)]
1436#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1437#[non_exhaustive]
1438pub struct SyncPipeline {
1439 pub name: String,
1440 pub depends: Option<String>,
1441 pub children: Vec<SyncPipelineStage>,
1442}
1443
1444#[derive(Debug, Clone, PartialEq, Eq, Default)]
1445#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1446#[non_exhaustive]
1447pub struct SyncPipelineStage {
1448 pub order: Option<String>,
1449 pub before: Option<String>,
1450 pub after: Option<String>,
1451 pub text: String,
1452}
1453
1454pub type VideoCodecs = CommentedChildren<VideoCodec>;
1455
1456#[derive(Debug, Clone, PartialEq, Eq, Default)]
1457#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1458#[non_exhaustive]
1459pub struct VideoCodec {
1460 pub comment: Option<String>,
1461 pub name: String,
1462 pub extend: Option<String>,
1463 pub value: Option<String>,
1464 pub children: Vec<VideoCodecChild>,
1465}
1466
1467#[derive(Debug, Clone, PartialEq, Eq)]
1468#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1469#[non_exhaustive]
1470pub enum VideoCodecChild {
1471 Profiles(VideoProfiles),
1472 Capabilities(VideoCapabilities),
1473 Format(VideoFormat),
1474}
1475
1476#[derive(Debug, Clone, PartialEq, Eq, Default)]
1477#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1478#[non_exhaustive]
1479pub struct VideoProfiles {
1480 pub comment: Option<String>,
1481 pub struct_: String,
1482 pub children: Vec<VideoProfileMember>,
1483}
1484
1485#[derive(Debug, Clone, PartialEq, Eq, Default)]
1486#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1487#[non_exhaustive]
1488pub struct VideoProfileMember {
1489 pub comment: Option<String>,
1490 pub name: String,
1491 pub children: Vec<VideoProfile>,
1492}
1493
1494#[derive(Debug, Clone, PartialEq, Eq, Default)]
1495#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1496#[non_exhaustive]
1497pub struct VideoProfile {
1498 pub comment: Option<String>,
1499 pub name: String,
1500 pub value: String,
1501}
1502
1503#[derive(Debug, Clone, PartialEq, Eq, Default)]
1504#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1505#[non_exhaustive]
1506pub struct VideoCapabilities {
1507 pub comment: Option<String>,
1508 pub struct_: String,
1509}
1510
1511#[derive(Debug, Clone, PartialEq, Eq, Default)]
1512#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1513#[non_exhaustive]
1514pub struct VideoFormat {
1515 pub comment: Option<String>,
1516 pub name: Option<String>,
1517 pub usage: Option<String>,
1518 pub extend: Option<String>,
1519 pub children: Vec<VideoFormatChild>,
1520}
1521
1522#[derive(Debug, Clone, PartialEq, Eq)]
1523#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1524#[non_exhaustive]
1525pub enum VideoFormatChild {
1526 RequireCapabilities(VideoRequireCapabilities),
1527 FormatProperties(VideoFormatProperties),
1528}
1529
1530#[derive(Debug, Clone, PartialEq, Eq, Default)]
1531#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1532#[non_exhaustive]
1533pub struct VideoFormatProperties {
1534 pub comment: Option<String>,
1535 pub struct_: String,
1536}
1537
1538#[derive(Debug, Clone, PartialEq, Eq, Default)]
1539#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1540#[non_exhaustive]
1541pub struct VideoRequireCapabilities {
1542 pub comment: Option<String>,
1543 pub struct_: String,
1544 pub member: String,
1545 pub value: String,
1546}
1547
1548#[derive(Debug, Clone, PartialEq, Eq)]
1549#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1550#[non_exhaustive]
1551pub enum Enable {
1552 Version(String),
1553 Extension(String),
1554 Feature(FeatureEnable),
1555 Property(PropertyEnable),
1556}
1557
1558#[derive(Debug, Clone, PartialEq, Eq, Default)]
1559#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1560#[non_exhaustive]
1561pub struct FeatureEnable {
1562 #[cfg_attr(
1563 feature = "serialize",
1564 serde(default, skip_serializing_if = "is_default")
1565 )]
1566 pub struct_: String,
1567
1568 #[cfg_attr(
1569 feature = "serialize",
1570 serde(default, skip_serializing_if = "is_default")
1571 )]
1572 pub feature: String,
1573
1574 #[cfg_attr(
1575 feature = "serialize",
1576 serde(default, skip_serializing_if = "is_default")
1577 )]
1578 pub requires: Option<String>,
1579
1580 #[cfg_attr(
1581 feature = "serialize",
1582 serde(default, skip_serializing_if = "is_default")
1583 )]
1584 pub alias: Option<String>,
1585}
1586
1587#[derive(Debug, Clone, PartialEq, Eq, Default)]
1588#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
1589#[non_exhaustive]
1590pub struct PropertyEnable {
1591 #[cfg_attr(
1592 feature = "serialize",
1593 serde(default, skip_serializing_if = "is_default")
1594 )]
1595 pub property: String,
1596
1597 #[cfg_attr(
1598 feature = "serialize",
1599 serde(default, skip_serializing_if = "is_default")
1600 )]
1601 pub member: String,
1602
1603 #[cfg_attr(
1604 feature = "serialize",
1605 serde(default, skip_serializing_if = "is_default")
1606 )]
1607 pub value: String,
1608
1609 #[cfg_attr(
1610 feature = "serialize",
1611 serde(default, skip_serializing_if = "is_default")
1612 )]
1613 pub requires: Option<String>,
1614}
1615
1616#[cfg(feature = "serialize")]
1617fn is_default<T: Default + Eq>(v: &T) -> bool {
1618 v.eq(&T::default())
1619}