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