|  | {{/* | 
|  | * 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}} |