blob: ce37a13908687f5c7a3277a2267072265e76cea3 [file] [log] [blame]
Jesse Halld27f6aa2015-08-15 17:58:48 -07001{{$clang_style := "{BasedOnStyle: Google, AccessModifierOffset: -4, ColumnLimit: 200, ContinuationIndentWidth: 8, IndentWidth: 4, AlignOperands: true, CommentPragmas: '.*'}"}}
2{{Global "clang-format" (Strings "clang-format" "-style" $clang_style)}}
3
4
5{{/*
6-------------------------------------------------------------------------------
7 Emits the C translation for the specified type.
8-------------------------------------------------------------------------------
9*/}}
10{{define "Type.Class" }}{{if GetAnnotation $.Type "internal"}}struct {{end}}{{Macro "StructName" $.Type}}{{end}}
11{{define "Type.Pseudonym" }}{{$.Type.Name}}{{end}}
12{{define "Type.Enum" }}{{$.Type.Name}}{{end}}
13{{define "Type.StaticArray"}}{{Node "Type" $.Type.ValueType}}{{end}}
14{{define "Type.Pointer" }}{{if $.Type.Const}}{{Node "ConstType" $.Type.To}}{{else}}{{Node "Type" $.Type.To}}{{end}}*{{end}}
15{{define "Type.Slice" }}{{Log "%T %+v" $.Node $.Node}}{{Node "Type" $.Type.To}}*{{end}}
16{{define "Type#bool" }}bool{{end}}
17{{define "Type#int" }}int{{end}}
18{{define "Type#uint" }}unsigned int{{end}}
19{{define "Type#s8" }}int8_t{{end}}
20{{define "Type#u8" }}uint8_t{{end}}
21{{define "Type#s16" }}int16_t{{end}}
22{{define "Type#u16" }}uint16_t{{end}}
23{{define "Type#s32" }}int32_t{{end}}
24{{define "Type#u32" }}uint32_t{{end}}
25{{define "Type#f32" }}float{{end}}
26{{define "Type#s64" }}int64_t{{end}}
27{{define "Type#u64" }}uint64_t{{end}}
28{{define "Type#f64" }}double{{end}}
29{{define "Type#void" }}void{{end}}
30{{define "Type#char" }}char{{end}}
31
32{{define "ConstType_Default"}}const {{Node "Type" $.Type}}{{end}}
33{{define "ConstType.Pointer"}}{{Node "Type" $.Type}} const{{end}}
34
35
36{{/*
37-------------------------------------------------------------------------------
38 Emits the C translation for the specified documentation block (string array).
39-------------------------------------------------------------------------------
40*/}}
41{{define "Docs"}}
42 {{if $}}// {{$ | JoinWith "\n// "}}{{end}}
43{{end}}
44
45
46{{/*
47-------------------------------------------------------------------------------
48 Emits the name of a bitfield entry.
49-------------------------------------------------------------------------------
50*/}}
51{{define "BitfieldEntryName"}}
52 {{AssertType $ "EnumEntry"}}
53
54 {{Macro "EnumEntry" $}}
55{{end}}
56
57
58{{/*
59-------------------------------------------------------------------------------
60 Emits the name of an enum type.
61-------------------------------------------------------------------------------
62*/}}
63{{define "EnumName"}}{{AssertType $ "Enum"}}{{$.Name}}{{end}}
64
65
66{{/*
67-------------------------------------------------------------------------------
68 Emits the name of an enum entry.
69-------------------------------------------------------------------------------
70*/}}
71{{define "EnumEntry"}}
72 {{AssertType $.Owner "Enum"}}
73 {{AssertType $.Name "string"}}
74
75 {{$.Name}}
76{{end}}
77
78
79{{/*
80-------------------------------------------------------------------------------
81 Emits the name of the first entry of an enum.
82-------------------------------------------------------------------------------
83*/}}
84{{define "EnumFirstEntry"}}
85 {{AssertType $ "Enum"}}
86
87 {{range $i, $e := $.Entries}}
88 {{if not $i}}{{$e.Name}}{{end}}
89 {{end}}
90{{end}}
91
92
93{{/*
94-------------------------------------------------------------------------------
95 Emits the name of the last entry of an enum.
96-------------------------------------------------------------------------------
97*/}}{{define "EnumLastEntry"}}
98 {{AssertType $ "Enum"}}
99
100 {{range $i, $e := $.Entries}}
101 {{if not (HasMore $i $.Entries)}}{{$e.Name}}{{end}}
102 {{end}}
103{{end}}
104
105
106{{/*
107-------------------------------------------------------------------------------
108 Emits the name of a struct (class) type.
109-------------------------------------------------------------------------------
110*/}}
111{{define "StructName"}}{{AssertType $ "Class"}}{{$.Name}}{{end}}
112
113
114{{/*
115-------------------------------------------------------------------------------
116 Emits the name of a function.
117-------------------------------------------------------------------------------
118*/}}
119{{define "FunctionName"}}{{AssertType $ "Function"}}{{$.Name}}{{end}}
120
121
122{{/*
123-------------------------------------------------------------------------------
124 Emits the fixed-size-array postfix for pseudonym types annotated with @array
125-------------------------------------------------------------------------------
126*/}}
127{{define "ArrayPostfix"}}{{Node "ArrayPostfix" $}}{{end}}
128{{define "ArrayPostfix.StaticArray"}}[{{$.Type.Size}}]{{end}}
129{{define "ArrayPostfix_Default"}}{{end}}
130
131
132{{/*
133-------------------------------------------------------------------------------
134 Emits a C type and name for the given parameter
135-------------------------------------------------------------------------------
136*/}}
137{{define "Parameter"}}
138 {{AssertType $ "Parameter"}}
139
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700140 {{if GetAnnotation $ "readonly"}}const {{end}}{{Macro "ParameterType" $}} {{$.Name}}{{Macro "ArrayPostfix" $}}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700141{{end}}
142
143
144{{/*
145-------------------------------------------------------------------------------
146 Emits a C name for the given parameter
147-------------------------------------------------------------------------------
148*/}}
149{{define "ParameterName"}}
150 {{AssertType $ "Parameter"}}
151
152 {{$.Name}}
153{{end}}
154
155
156{{/*
157-------------------------------------------------------------------------------
158 Emits a C type for the given parameter
159-------------------------------------------------------------------------------
160*/}}
161{{define "ParameterType"}}{{AssertType $ "Parameter"}}{{Node "Type" $}}{{end}}
162
163
164{{/*
165-------------------------------------------------------------------------------
166 Emits a comma-separated list of C type-name paired parameters for the given
167 command.
168-------------------------------------------------------------------------------
169*/}}
170{{define "Parameters"}}
171 {{AssertType $ "Function"}}
172
173 {{ForEach $.CallParameters "Parameter" | JoinWith ", "}}
174 {{if not $.CallParameters}}void{{end}}
175{{end}}
176
177
178{{/*
179-------------------------------------------------------------------------------
180 Emits the C function pointer name for the specified command.
181-------------------------------------------------------------------------------
182*/}}
183{{define "FunctionPtrName"}}
184 {{AssertType $ "Function"}}
185
186 PFN_{{$.Name}}
187{{end}}
188
189
190{{/*
191-------------------------------------------------------------------------------
192 Parses const variables as text Globals.
193-------------------------------------------------------------------------------
194*/}}
195{{define "DefineGlobals"}}
196 {{AssertType $ "API"}}
197
198 {{range $d := $.Definitions}}
199 {{Global $d.Name $d.Expression}}
200 {{end}}
201{{end}}
Jesse Hall04f4f472015-08-16 19:51:04 -0700202
203
204{{/*
205-------------------------------------------------------------------------------
206 Given a function, return "Global", "Instance", or "Device" depending on which
207 dispatch table the function belongs to.
208-------------------------------------------------------------------------------
209*/}}
210{{define "Vtbl#VkInstance" }}Instance{{end}}
211{{define "Vtbl#VkPhysicalDevice"}}Instance{{end}}
212{{define "Vtbl#VkDevice" }}Device{{end}}
213{{define "Vtbl#VkQueue" }}Device{{end}}
Jesse Hall3fbc8562015-11-29 22:10:52 -0800214{{define "Vtbl#VkCommandBuffer" }}Device{{end}}
Jesse Hall04f4f472015-08-16 19:51:04 -0700215{{define "Vtbl_Default" }}Global{{end}}
216{{define "Vtbl"}}
217 {{AssertType $ "Function"}}
218
219 {{range $i, $p := $.CallParameters}}
220 {{if not $i}}{{Node "Vtbl" $p}}{{end}}
221 {{end}}
222{{end}}