blob: 66dceb25cfc74f8bad54ecc706670f08dfb3c3ef [file] [log] [blame]
Jesse Hall1f91d392015-12-11 16:28:44 -08001{{/*
2 * Copyright 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */}}
16
17{{Include "../api/templates/vulkan_common.tmpl"}}
18{{Global "clang-format" (Strings "clang-format" "-style=file")}}
19{{Macro "DefineGlobals" $}}
20{{$ | Macro "null_driver_gen.h" | Format (Global "clang-format") | Write "null_driver_gen.h" }}
21{{$ | Macro "null_driver_gen.cpp" | Format (Global "clang-format") | Write "null_driver_gen.cpp"}}
22
23
24{{/*
25-------------------------------------------------------------------------------
26 null_driver_gen.h
27-------------------------------------------------------------------------------
28*/}}
29{{define "null_driver_gen.h"}}
30/*
31•* Copyright 2015 The Android Open Source Project
32•*
33•* Licensed under the Apache License, Version 2.0 (the "License");
34•* you may not use this file except in compliance with the License.
35•* You may obtain a copy of the License at
36•*
37•* http://www.apache.org/licenses/LICENSE-2.0
38•*
39•* Unless required by applicable law or agreed to in writing, software
40•* distributed under the License is distributed on an "AS IS" BASIS,
41•* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
42•* See the License for the specific language governing permissions and
43•* limitations under the License.
44•*/
45
46// This file is generated. Do not edit manually!
47// To regenerate: $ apic template ../api/vulkan.api null_driver.tmpl
48// Requires apic from https://android.googlesource.com/platform/tools/gpu/.
49
50#ifndef NULLDRV_NULL_DRIVER_H
51#define NULLDRV_NULL_DRIVER_H 1
52
Jesse Hall1f91d392015-12-11 16:28:44 -080053#include <vulkan/vk_android_native_buffer.h>
54#include <vulkan/vulkan.h>
55
56namespace null_driver
57
58PFN_vkVoidFunction GetGlobalProcAddr(const char* name);
59PFN_vkVoidFunction GetInstanceProcAddr(const char* name);
60
61// clang-format off
62 {{range $f := AllCommands $}}
63 {{if (Macro "IsDriverFunction" $f)}}
64VKAPI_ATTR {{Node "Type" $f.Return}} {{Macro "BaseName" $f}}({{Macro "Parameters" $f}});
65 {{end}}
66 {{end}}
67VKAPI_ATTR VkResult GetSwapchainGrallocUsageANDROID(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
68VKAPI_ATTR VkResult AcquireImageANDROID(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore, VkFence fence);
Jesse Hall275d76c2016-01-08 22:39:16 -080069VKAPI_ATTR VkResult QueueSignalReleaseImageANDROID(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image, int* pNativeFenceFd);
Jesse Hall1f91d392015-12-11 16:28:44 -080070// clang-format on
71
72»} // namespace null_driver
73
74#endif // NULLDRV_NULL_DRIVER_H
75¶{{end}}
76
77
78{{/*
79-------------------------------------------------------------------------------
80 null_driver_gen.cpp
81-------------------------------------------------------------------------------
82*/}}
83{{define "null_driver_gen.cpp"}}
84/*
85•* Copyright 2015 The Android Open Source Project
86•*
87•* Licensed under the Apache License, Version 2.0 (the "License");
88•* you may not use this file except in compliance with the License.
89•* You may obtain a copy of the License at
90•*
91•* http://www.apache.org/licenses/LICENSE-2.0
92•*
93•* Unless required by applicable law or agreed to in writing, software
94•* distributed under the License is distributed on an "AS IS" BASIS,
95•* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
96•* See the License for the specific language governing permissions and
97•* limitations under the License.
98•*/
99
100// This file is generated. Do not edit manually!
101// To regenerate: $ apic template ../api/vulkan.api null_driver.tmpl
102// Requires apic from https://android.googlesource.com/platform/tools/gpu/.
103
104#include "null_driver_gen.h"
105#include <algorithm>
106
107using namespace null_driver;
108
109namespace {
110
111struct NameProc {
112 const char* name;
113 PFN_vkVoidFunction proc;
114};
115
116PFN_vkVoidFunction Lookup(const char* name,
117 const NameProc* begin,
118 const NameProc* end) {
119 const auto& entry = std::lower_bound(
120 begin, end, name,
121 [](const NameProc& e, const char* n) { return strcmp(e.name, n) < 0; });
122 if (entry == end || strcmp(entry->name, name) != 0)
123 return nullptr;
124 return entry->proc;
125}
126
127template <size_t N>
128PFN_vkVoidFunction Lookup(const char* name, const NameProc (&procs)[N]) {
129 return Lookup(name, procs, procs + N);
130}
131
132const NameProc kGlobalProcs[] =
133 // clang-format off
134 {{range $f := SortBy (AllCommands $) "FunctionName"}}
135 {{if and (Macro "IsDriverFunction" $f) (eq (Macro "Vtbl" $f) "Global")}}
136 {"{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>(§
137 static_cast<{{Macro "FunctionPtrName" $f}}>(§
138 {{Macro "BaseName" $f}}))},
139 {{end}}
140 {{end}}
141 // clang-format on
142»};
143
144const NameProc kInstanceProcs[] =
145 // clang-format off
146 {{range $f := SortBy (AllCommands $) "FunctionName"}}
147 {{if (Macro "IsDriverFunction" $f)}}
148 {"{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>(§
149 static_cast<{{Macro "FunctionPtrName" $f}}>(§
150 {{Macro "BaseName" $f}}))},
151 {{end}}
152 {{end}}
153 // clang-format on
154»};
155
156} // namespace
157
158namespace null_driver {
159
160PFN_vkVoidFunction GetGlobalProcAddr(const char* name) {
161 return Lookup(name, kGlobalProcs);
162}
163
164PFN_vkVoidFunction GetInstanceProcAddr(const char* name)
165 PFN_vkVoidFunction pfn;
166 if ((pfn = Lookup(name, kInstanceProcs)))
167 return pfn;
168 if (strcmp(name, "vkGetSwapchainGrallocUsageANDROID") == 0)
169 return reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkGetSwapchainGrallocUsageANDROID>(GetSwapchainGrallocUsageANDROID));
170 if (strcmp(name, "vkAcquireImageANDROID") == 0)
171 return reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAcquireImageANDROID>(AcquireImageANDROID));
172 if (strcmp(name, "vkQueueSignalReleaseImageANDROID") == 0)
173 return reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueSignalReleaseImageANDROID>(QueueSignalReleaseImageANDROID));
174 return nullptr;
175»}
176
177} // namespace null_driver
178
179{{end}}
180
181
182{{/*
183-------------------------------------------------------------------------------
184 Emits a function name without the "vk" prefix.
185-------------------------------------------------------------------------------
186*/}}
187{{define "BaseName"}}
188 {{AssertType $ "Function"}}
189 {{TrimPrefix "vk" $.Name}}
190{{end}}
191
192
193{{/*
194------------------------------------------------------------------------------
195 Emits 'true' if the API function is implemented by the driver.
196------------------------------------------------------------------------------
197*/}}
198{{define "IsDriverFunction"}}
199 {{AssertType $ "Function"}}
200
201 {{if not (GetAnnotation $ "pfn")}}
202 {{$ext := GetAnnotation $ "extension"}}
203 {{if $ext}}
204 {{Macro "IsDriverExtension" $ext}}
205 {{else}}
206 true
207 {{end}}
208 {{end}}
209{{end}}
210
211
212{{/*
213------------------------------------------------------------------------------
214 Reports whether an extension is implemented by the driver.
215------------------------------------------------------------------------------
216*/}}
217{{define "IsDriverExtension"}}
218 {{$ext := index $.Arguments 0}}
219 {{if eq $ext "VK_ANDROID_native_buffer"}}true
220 {{end}}
221{{end}}