vulkan: import api from upstream
Imported from 74e25b28dc0e198a69add358d541b25291bcde82, which
corresponds to header version 0.138.0.
Change-Id: Ia9bde11a213527b1c366eb4b82aec8650ca13666
(cherry picked from commit 4e262baf54382c455c191a4c1417dec8d17e8926)
diff --git a/vulkan/api/templates/asciidoc.tmpl b/vulkan/api/templates/asciidoc.tmpl
new file mode 100644
index 0000000..3009e19
--- /dev/null
+++ b/vulkan/api/templates/asciidoc.tmpl
@@ -0,0 +1,151 @@
+{{Include "vulkan_common.tmpl"}}
+{{if not (Global "AsciiDocPath")}}{{Global "AsciiDocPath" "../../doc/specs/vulkan/"}}{{end}}
+{{$ | Macro "AsciiDoc.Main"}}
+
+
+{{/*
+-------------------------------------------------------------------------------
+ AsciiDoc generation main entry point.
+-------------------------------------------------------------------------------
+*/}}
+{{define "AsciiDoc.Main"}}
+ {{$docPath := Global "AsciiDocPath"}}
+
+ {{/* Generate AsciiDoc files for API enums and bitfields (flags). */}}
+ {{range $e := $.Enums}}
+ {{if not $e.IsBitfield}}
+ {{$filename := print $docPath "enums/" (Macro "EnumName" $e) ".txt"}}
+ {{Macro "AsciiDoc.Write" "Code" (Macro "AsciiDoc.Enum" $e) "File" $filename}}
+ {{else}}
+ {{$filename := print $docPath "flags/" (Macro "EnumName" $e) ".txt"}}
+ {{Macro "AsciiDoc.Write" "Code" (Macro "AsciiDoc.Flag" $e) "File" $filename}}
+ {{end}}
+ {{end}}
+
+ {{/* Generate AsciiDoc files for API commands (protos). */}}
+ {{range $f := (AllCommands $)}}
+ {{if not (GetAnnotation $f "pfn")}}
+ {{$filename := print $docPath "protos/" $f.Name ".txt"}}
+ {{Macro "AsciiDoc.Write" "Code" (Macro "AsciiDoc.Proto" $f) "File" $filename}}
+ {{end}}
+ {{end}}
+
+ {{/* Generate AsciiDoc files for API structs. */}}
+ {{range $c := $.Classes}}
+ {{if not (GetAnnotation $c "internal")}}
+ {{$filename := print $docPath "structs/" $c.Name ".txt"}}
+ {{Macro "AsciiDoc.Write" "Code" (Macro "AsciiDoc.Struct" $c) "File" $filename}}
+ {{end}}
+ {{end}}
+{{end}}
+
+
+{{/*
+-------------------------------------------------------------------------------
+ Emits the AsciiDoc contents for the specified API enum.
+-------------------------------------------------------------------------------
+*/}}
+{{define "AsciiDoc.Enum"}}
+ {{AssertType $ "Enum"}}
+
+ {{Macro "Docs" $.Docs}}
+ typedef enum {
+ {{range $i, $e := $.Entries}}
+ {{Macro "EnumEntry" $e}} = {{AsSigned $e.Value}}, {{Macro "Docs" $e.Docs}}
+ {{end}}
+ ¶
+ {{$name := Macro "EnumName" $ | TrimRight "ABCDEFGHIJKLMNOQRSTUVWXYZ" | SplitPascalCase | Upper | JoinWith "_"}}
+ {{$first := Macro "EnumFirstEntry" $}}
+ {{$last := Macro "EnumLastEntry" $}}
+ {{$name}}_BEGIN_RANGE = {{$first}},
+ {{$name}}_END_RANGE = {{$last}},
+ {{$name}}_NUM = ({{$last}} - {{$first}} + 1),
+ {{$name}}_MAX_ENUM = 0x7FFFFFFF
+ } {{Macro "EnumName" $}};
+{{end}}
+
+
+{{/*
+-------------------------------------------------------------------------------
+ Emits the AsciiDoc contents for the specified API bitfield.
+-------------------------------------------------------------------------------
+*/}}
+{{define "AsciiDoc.Flag"}}
+ {{AssertType $ "Enum"}}
+
+ {{Macro "Docs" $.Docs}}
+ typedef VkFlags {{Macro "EnumName" $}};
+ {{if $.Entries}}
+ typedef enum {
+ {{range $e := $.Entries}}
+ {{Macro "BitfieldEntryName" $e}} = {{printf "%#.8x" $e.Value}}, {{Macro "Docs" $e.Docs}}
+ {{end}}
+ } {{Macro "EnumName" $ | TrimRight "s"}}Bits;
+ {{end}}
+{{end}}
+
+
+
+{{/*
+-------------------------------------------------------------------------------
+ Emits the AsciiDoc contents for the specified API class.
+-------------------------------------------------------------------------------
+*/}}
+{{define "AsciiDoc.Struct"}}
+ {{AssertType $ "Class"}}
+
+ {{Macro "Docs" $.Docs}}
+ typedef {{if GetAnnotation $ "union"}}union{{else}}struct{{end}} {
+ {{range $f := $.Fields}}
+ {{Node "Type" $f}} {{$f.Name}}{{Macro "ArrayPostfix" (TypeOf $f)}}; {{Macro "Docs" $f.Docs}}
+ {{end}}
+ } {{Macro "StructName" $}};
+{{end}}
+
+
+{{/*
+-------------------------------------------------------------------------------
+ Emits the AsciiDoc contents for the specified API function.
+-------------------------------------------------------------------------------
+*/}}
+{{define "AsciiDoc.Proto"}}
+ {{AssertType $ "Function"}}
+
+ {{Macro "Docs" $.Docs}}
+ {{Node "Type" $.Return}} VKAPI {{Macro "FunctionName" $}}({{Macro "Parameters" $}});
+{{end}}
+
+
+{{/*
+-------------------------------------------------------------------------------
+ Wraps the specified Code in AsciiDoc source tags then writes to the specified File.
+-------------------------------------------------------------------------------
+*/}}
+{{define "AsciiDoc.Write"}}
+ {{AssertType $.Code "string"}}
+ {{AssertType $.File "string"}}
+
+ {{$code := $.Code | Format (Global "clang-format")}}
+ {{JoinWith "\n" (Macro "AsciiDoc.Header") $code (Macro "AsciiDoc.Footer") ""| Write $.File}}
+{{end}}
+
+
+{{/*
+-------------------------------------------------------------------------------
+ Emits an AsciiDoc source header.
+-------------------------------------------------------------------------------
+*/}}
+{{define "AsciiDoc.Header"}}
+[source,{basebackend@docbook:c++:cpp}]
+------------------------------------------------------------------------------
+{{end}}
+
+
+{{/*
+-------------------------------------------------------------------------------
+ Emits an AsciiDoc source footer.
+-------------------------------------------------------------------------------
+*/}}
+{{define "AsciiDoc.Footer"}}
+------------------------------------------------------------------------------
+{{end}}