| {{/* | 
 |  * Copyright 2015 The Android Open Source Project | 
 |  * | 
 |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
 |  * you may not use this file except in compliance with the License. | 
 |  * You may obtain a copy of the License at | 
 |  * | 
 |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, software | 
 |  * distributed under the License is distributed on an "AS IS" BASIS, | 
 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  * See the License for the specific language governing permissions and | 
 |  * limitations under the License. | 
 |  */}} | 
 |  | 
 | {{Include "../api/templates/vulkan_common.tmpl"}} | 
 | {{Global "clang-format" (Strings "clang-format" "-style=file")}} | 
 | {{Macro "DefineGlobals" $}} | 
 | {{$ | Macro "null_driver_gen.h"   | Format (Global "clang-format") | Write "null_driver_gen.h"  }} | 
 | {{$ | Macro "null_driver_gen.cpp" | Format (Global "clang-format") | Write "null_driver_gen.cpp"}} | 
 |  | 
 |  | 
 | {{/* | 
 | ------------------------------------------------------------------------------- | 
 |   null_driver_gen.h | 
 | ------------------------------------------------------------------------------- | 
 | */}} | 
 | {{define "null_driver_gen.h"}} | 
 | /* | 
 | •* Copyright 2015 The Android Open Source Project | 
 | •* | 
 | •* Licensed under the Apache License, Version 2.0 (the "License"); | 
 | •* you may not use this file except in compliance with the License. | 
 | •* You may obtain a copy of the License at | 
 | •* | 
 | •*      http://www.apache.org/licenses/LICENSE-2.0 | 
 | •* | 
 | •* Unless required by applicable law or agreed to in writing, software | 
 | •* distributed under the License is distributed on an "AS IS" BASIS, | 
 | •* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | •* See the License for the specific language governing permissions and | 
 | •* limitations under the License. | 
 | •*/ | 
 | ¶ | 
 | // WARNING: This file is generated. See ../README.md for instructions. | 
 | ¶ | 
 | #ifndef NULLDRV_NULL_DRIVER_H | 
 | #define NULLDRV_NULL_DRIVER_H 1 | 
 | ¶ | 
 | #include <vulkan/vk_android_native_buffer.h> | 
 | #include <vulkan/vulkan.h> | 
 | ¶ | 
 | namespace null_driver {« | 
 | ¶ | 
 | PFN_vkVoidFunction GetGlobalProcAddr(const char* name); | 
 | PFN_vkVoidFunction GetInstanceProcAddr(const char* name); | 
 | ¶ | 
 | // clang-format off | 
 |   {{range $f := AllCommands $}} | 
 |     {{if (Macro "IsDriverFunction" $f)}} | 
 | VKAPI_ATTR {{Node "Type" $f.Return}} {{Macro "BaseName" $f}}({{Macro "Parameters" $f}}); | 
 |     {{end}} | 
 |   {{end}} | 
 | VKAPI_ATTR VkResult GetSwapchainGrallocUsageANDROID(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage); | 
 | VKAPI_ATTR VkResult AcquireImageANDROID(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore, VkFence fence); | 
 | VKAPI_ATTR VkResult QueueSignalReleaseImageANDROID(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image, int* pNativeFenceFd); | 
 | // clang-format on | 
 | ¶ | 
 | »}  // namespace null_driver | 
 | ¶ | 
 | #endif  // NULLDRV_NULL_DRIVER_H | 
 | ¶{{end}} | 
 |  | 
 |  | 
 | {{/* | 
 | ------------------------------------------------------------------------------- | 
 |   null_driver_gen.cpp | 
 | ------------------------------------------------------------------------------- | 
 | */}} | 
 | {{define "null_driver_gen.cpp"}} | 
 | /* | 
 | •* Copyright 2015 The Android Open Source Project | 
 | •* | 
 | •* Licensed under the Apache License, Version 2.0 (the "License"); | 
 | •* you may not use this file except in compliance with the License. | 
 | •* You may obtain a copy of the License at | 
 | •* | 
 | •*      http://www.apache.org/licenses/LICENSE-2.0 | 
 | •* | 
 | •* Unless required by applicable law or agreed to in writing, software | 
 | •* distributed under the License is distributed on an "AS IS" BASIS, | 
 | •* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | •* See the License for the specific language governing permissions and | 
 | •* limitations under the License. | 
 | •*/ | 
 | ¶ | 
 | // WARNING: This file is generated. See ../README.md for instructions. | 
 | ¶ | 
 | #include "null_driver_gen.h" | 
 | #include <algorithm> | 
 | ¶ | 
 | using namespace null_driver; | 
 | ¶ | 
 | namespace { | 
 | ¶ | 
 | struct NameProc { | 
 |     const char* name; | 
 |     PFN_vkVoidFunction proc; | 
 | }; | 
 | ¶ | 
 | PFN_vkVoidFunction Lookup(const char* name, | 
 |                           const NameProc* begin, | 
 |                           const NameProc* end) { | 
 |     const auto& entry = std::lower_bound( | 
 |         begin, end, name, | 
 |         [](const NameProc& e, const char* n) { return strcmp(e.name, n) < 0; }); | 
 |     if (entry == end || strcmp(entry->name, name) != 0) | 
 |         return nullptr; | 
 |     return entry->proc; | 
 | } | 
 | ¶ | 
 | template <size_t N> | 
 | PFN_vkVoidFunction Lookup(const char* name, const NameProc (&procs)[N]) { | 
 |     return Lookup(name, procs, procs + N); | 
 | } | 
 | ¶ | 
 | const NameProc kGlobalProcs[] = {« | 
 |   // clang-format off | 
 |   {{range $f := SortBy (AllCommands $) "FunctionName"}} | 
 |     {{if and (Macro "IsDriverFunction" $f) (eq (Macro "Vtbl" $f) "Global")}} | 
 |       {"{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>(§ | 
 |         static_cast<{{Macro "FunctionPtrName" $f}}>(§ | 
 |           {{Macro "BaseName" $f}}))}, | 
 |     {{end}} | 
 |   {{end}} | 
 |   // clang-format on | 
 | »}; | 
 | ¶ | 
 | const NameProc kInstanceProcs[] = {« | 
 |   // clang-format off | 
 |   {{range $f := SortBy (AllCommands $) "FunctionName"}} | 
 |     {{if (Macro "IsDriverFunction" $f)}} | 
 |       {"{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>(§ | 
 |         static_cast<{{Macro "FunctionPtrName" $f}}>(§ | 
 |           {{Macro "BaseName" $f}}))}, | 
 |     {{end}} | 
 |   {{end}} | 
 |   // clang-format on | 
 | »}; | 
 | ¶ | 
 | } // namespace | 
 | ¶ | 
 | namespace null_driver { | 
 | ¶ | 
 | PFN_vkVoidFunction GetGlobalProcAddr(const char* name) { | 
 |     return Lookup(name, kGlobalProcs); | 
 | } | 
 | ¶ | 
 | PFN_vkVoidFunction GetInstanceProcAddr(const char* name) {« | 
 |     PFN_vkVoidFunction pfn; | 
 |     if ((pfn = Lookup(name, kInstanceProcs))) | 
 |         return pfn; | 
 |     if (strcmp(name, "vkGetSwapchainGrallocUsageANDROID") == 0) | 
 |         return reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkGetSwapchainGrallocUsageANDROID>(GetSwapchainGrallocUsageANDROID)); | 
 |     if (strcmp(name, "vkAcquireImageANDROID") == 0) | 
 |         return reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAcquireImageANDROID>(AcquireImageANDROID)); | 
 |     if (strcmp(name, "vkQueueSignalReleaseImageANDROID") == 0) | 
 |         return reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueSignalReleaseImageANDROID>(QueueSignalReleaseImageANDROID)); | 
 |     return nullptr; | 
 | »} | 
 | ¶ | 
 | } // namespace null_driver | 
 | ¶ | 
 | {{end}} | 
 |  | 
 |  | 
 | {{/* | 
 | ------------------------------------------------------------------------------- | 
 |   Emits a function name without the "vk" prefix. | 
 | ------------------------------------------------------------------------------- | 
 | */}} | 
 | {{define "BaseName"}} | 
 |   {{AssertType $ "Function"}} | 
 |   {{TrimPrefix "vk" $.Name}} | 
 | {{end}} | 
 |  | 
 |  | 
 | {{/* | 
 | ------------------------------------------------------------------------------ | 
 |   Emits 'true' if the API function is implemented by the driver. | 
 | ------------------------------------------------------------------------------ | 
 | */}} | 
 | {{define "IsDriverFunction"}} | 
 |   {{AssertType $ "Function"}} | 
 |  | 
 |   {{if not (GetAnnotation $ "pfn")}} | 
 |     {{$ext := GetAnnotation $ "extension"}} | 
 |     {{if $ext}} | 
 |       {{Macro "IsDriverExtension" $ext}} | 
 |     {{else}} | 
 |       true | 
 |     {{end}} | 
 |   {{end}} | 
 | {{end}} | 
 |  | 
 |  | 
 | {{/* | 
 | ------------------------------------------------------------------------------ | 
 |   Reports whether an extension is implemented by the driver. | 
 | ------------------------------------------------------------------------------ | 
 | */}} | 
 | {{define "IsDriverExtension"}} | 
 |   {{$ext := index $.Arguments 0}} | 
 |   {{     if eq $ext "VK_ANDROID_native_buffer"}}true | 
 |   {{else if eq $ext "VK_EXT_debug_report"}}true | 
 |   {{end}} | 
 | {{end}} |