blob: 3009e19cad172ca5b01299ada3a80ca815056318 [file] [log] [blame]
{{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}}