code-generator.tmpl revision 948233a57f0f2f6643a70019ef3c8287fd8d3771
10c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "Copyright"}} 20c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu/* 30c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* Copyright 2016 The Android Open Source Project 40c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* 50c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* Licensed under the Apache License, Version 2.0 (the "License"); 60c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* you may not use this file except in compliance with the License. 70c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* You may obtain a copy of the License at 80c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* 90c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* http://www.apache.org/licenses/LICENSE-2.0 100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* 110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* Unless required by applicable law or agreed to in writing, software 120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* distributed under the License is distributed on an "AS IS" BASIS, 130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* See the License for the specific language governing permissions and 150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•* limitations under the License. 160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu•*/ 170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶{{end}} 180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{Include "../api/templates/vulkan_common.tmpl"}} 200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{Global "clang-format" (Strings "clang-format" "-style=file")}} 210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{Macro "DefineGlobals" $}} 220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{$ | Macro "api_gen.h" | Format (Global "clang-format") | Write "api_gen.h" }} 230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{$ | Macro "api_gen.cpp" | Format (Global "clang-format") | Write "api_gen.cpp"}} 24eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{$ | Macro "driver_gen.h" | Format (Global "clang-format") | Write "driver_gen.h"}} 25eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{$ | Macro "driver_gen.cpp" | Format (Global "clang-format") | Write "driver_gen.cpp"}} 260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu api_gen.h 300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api_gen.h"}} 330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{Macro "Copyright"}} 340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu// WARNING: This file is generated. See ../README.md for instructions. 360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#ifndef LIBVULKAN_API_GEN_H 380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#define LIBVULKAN_API_GEN_H 390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 408925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu#include <bitset> 410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include <vulkan/vulkan.h> 428925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu#include "driver_gen.h" 430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wunamespace vulkan {« 450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wunamespace api {« 460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wustruct InstanceDispatchTable { 480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsInstanceDispatchTableEntry" $f)}} 51cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.DeclareTableEntry" $f}}; 520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu}; 560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wustruct DeviceDispatchTable { 580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsDeviceDispatchTableEntry" $f)}} 61cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.DeclareTableEntry" $f}}; 620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu}; 660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 678925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wubool InitDispatchTable( 688925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu VkInstance instance, 698925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu PFN_vkGetInstanceProcAddr get_proc, 708925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu const std::bitset<driver::ProcHook::EXTENSION_COUNT> &extensions); 718925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wubool InitDispatchTable( 728925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu VkDevice dev, 738925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu PFN_vkGetDeviceProcAddr get_proc, 748925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu const std::bitset<driver::ProcHook::EXTENSION_COUNT> &extensions); 750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu»} // namespace api 770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu»} // namespace vulkan 780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#endif // LIBVULKAN_API_GEN_H 800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶{{end}} 810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu api_gen.cpp 860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api_gen.cpp"}} 890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{Macro "Copyright"}} 900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu// WARNING: This file is generated. See ../README.md for instructions. 920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include <string.h> 940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include <algorithm> 95a5e161b1207ef447a51e99856097d69d4a6111e1Mark Salyzyn#include <android/log.h> 960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 973e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu// to catch mismatches between vulkan.h and this file 983e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu#undef VK_NO_PROTOTYPES 990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include "api.h" 1000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wunamespace vulkan {« 1020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wunamespace api {« 1030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 104cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "C++.DefineInitProcMacro" "dispatch"}} 105cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 106cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "api.C++.DefineInitProcExtMacro"}} 1070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1088925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wunamespace {« 1098925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu¶ 1108925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu// clang-format off 1118925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu¶ 1128925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{range $f := AllCommands $}} 1138925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{Macro "api.C++.DefineExtensionStub" $f}} 1148925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{end}} 1158925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu// clang-format on 1168925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu¶ 1178925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu»} // anonymous 1188925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu¶ 1198925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wubool InitDispatchTable( 1208925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu VkInstance instance, 1218925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu PFN_vkGetInstanceProcAddr get_proc, 1228925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu const std::bitset<driver::ProcHook::EXTENSION_COUNT> &extensions) { 1230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu auto& data = GetData(instance); 1240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu bool success = true; 1250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 1270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 1280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsInstanceDispatchTableEntry" $f)}} 1290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "C++.InitProc" $f}} 1300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 1330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return success; 1350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu} 1360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1378925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wubool InitDispatchTable( 1388925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu VkDevice dev, 1398925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu PFN_vkGetDeviceProcAddr get_proc, 1408925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu const std::bitset<driver::ProcHook::EXTENSION_COUNT> &extensions) { 1410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu auto& data = GetData(dev); 1420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu bool success = true; 1430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 1450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 1460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsDeviceDispatchTableEntry" $f)}} 1470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "C++.InitProc" $f}} 1480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 1510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return success; 1530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu} 1540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu// clang-format off 1560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1573e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wunamespace {« 1583e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1593e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu// forward declarations needed by GetInstanceProcAddr and GetDeviceProcAddr 1600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{range $f := AllCommands $}} 1613e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if and (Macro "IsFunctionExported" $f) (not (Macro "api.IsIntercepted" $f))}} 1623e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu VKAPI_ATTR {{Node "Type" $f.Return}} {{Macro "BaseName" $f}}({{Macro "Parameters" $f}}); 1633e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{end}} 1643e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu{{end}} 1653e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1663e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu{{range $f := AllCommands $}} 1673e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if and (Macro "IsFunctionExported" $f) (not (Macro "api.IsIntercepted" $f))}} 1683e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu VKAPI_ATTR {{Node "Type" $f.Return}} {{Macro "BaseName" $f}}({{Macro "Parameters" $f}}) { 1690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $f.Name "vkGetInstanceProcAddr"}} 1700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "api.C++.InterceptInstanceProcAddr" $}} 1710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $f.Name "vkGetDeviceProcAddr"}} 1720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "api.C++.InterceptDeviceProcAddr" $}} 1730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 1750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "api.C++.Dispatch" $f}} 1760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 1770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 1800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1813e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu»} // anonymous namespace 1823e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1833e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu// clang-format on 1843e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1853e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu»} // namespace api 1863e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu»} // namespace vulkan 1873e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1883e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu// clang-format off 1893e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1903e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu{{range $f := AllCommands $}} 1913e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if (Macro "IsFunctionExported" $f)}} 1923e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu __attribute__((visibility("default"))) 1933e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu VKAPI_ATTR {{Node "Type" $f.Return}} {{$f.Name}}({{Macro "Parameters" $f}}) { 1943e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if not (IsVoid $f.Return.Type)}}return §{{end}} 1953e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu vulkan::api::{{Macro "BaseName" $f}}({{Macro "Arguments" $f}}); 1963e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu } 1973e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu ¶ 1983e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{end}} 1993e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu{{end}} 2003e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 2010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu// clang-format on 2020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶{{end}} 2030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 2040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 2050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 206eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 207eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu driver_gen.h 208eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 209eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 210eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver_gen.h"}} 211eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{Macro "Copyright"}} 212eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 213eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// WARNING: This file is generated. See ../README.md for instructions. 214eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 215eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#ifndef LIBVULKAN_DRIVER_GEN_H 216eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#define LIBVULKAN_DRIVER_GEN_H 217eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 218cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu#include <bitset> 219eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <vulkan/vulkan.h> 220eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <vulkan/vk_android_native_buffer.h> 221eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 222eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace vulkan {« 223eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace driver {« 224eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 225eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{Macro "driver.C++.DefineProcHookType"}} 226eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 227cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wustruct InstanceDriverTable { 228cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 229cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 230cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsInstanceDriverTableEntry" $f)}} 231cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.DeclareTableEntry" $f}}; 232cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 233cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 234cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 235cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu}; 236cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 237cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wustruct DeviceDriverTable { 238cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 239cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 240cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsDeviceDriverTableEntry" $f)}} 241cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.DeclareTableEntry" $f}}; 242cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 243cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 244cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 245cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu}; 246cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 247eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wuconst ProcHook* GetProcHook(const char* name); 248eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuProcHook::Extension GetProcHookExtension(const char* name); 249eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 250cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wubool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc, 251cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu const std::bitset<ProcHook::EXTENSION_COUNT> &extensions); 252cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wubool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc, 253cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu const std::bitset<ProcHook::EXTENSION_COUNT> &extensions); 254cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 255eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace driver 256eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace vulkan 257eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 258eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#endif // LIBVULKAN_DRIVER_TABLE_H 259eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶{{end}} 260eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 261eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 262eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 263eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 264eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu driver_gen.cpp 265eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 266eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 267eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver_gen.cpp"}} 268eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{Macro "Copyright"}} 269eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 270eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// WARNING: This file is generated. See ../README.md for instructions. 271eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 272eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <string.h> 273eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <algorithm> 274a5e161b1207ef447a51e99856097d69d4a6111e1Mark Salyzyn#include <android/log.h> 275eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 276eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include "driver.h" 277eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 278eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace vulkan {« 279eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace driver {« 280eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 281eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace {« 282eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 283eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// clang-format off 284eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 285eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{range $f := AllCommands $}} 28636cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{Macro "driver.C++.DefineProcHookStub" $f}} 287eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 288eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// clang-format on 289eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 290eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wuconst ProcHook g_proc_hooks[] = { 291eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format off 292eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 293eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "driver.IsIntercepted" $f)}} 294eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if (Macro "IsGloballyDispatched" $f)}} 295eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.C++.DefineGlobalProcHook" $f}} 296eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if (Macro "IsInstanceDispatched" $f)}} 297eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.C++.DefineInstanceProcHook" $f}} 298eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if (Macro "IsDeviceDispatched" $f)}} 299eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.C++.DefineDeviceProcHook" $f}} 300eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 301eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 302eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 303eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format on 304eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu}; 305eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 306eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // anonymous 307eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 308eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wuconst ProcHook* GetProcHook(const char* name) { 309eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const auto& begin = g_proc_hooks; 310eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const auto& end = g_proc_hooks + 311eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu sizeof(g_proc_hooks) / sizeof(g_proc_hooks[0]); 312eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const auto hook = std::lower_bound(begin, end, name, 313eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu [](const ProcHook& e, const char* n) { return strcmp(e.name, n) < 0; }); 314eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu return (hook < end && strcmp(hook->name, name) == 0) ? hook : nullptr; 315eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu} 316eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 317eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuProcHook::Extension GetProcHookExtension(const char* name) { 318eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$exts := Strings (Macro "driver.InterceptedExtensions") | SplitOn "\n"}} 319eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format off 320eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $e := $exts}} 321eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu if (strcmp(name, "{{$e}}") == 0) return ProcHook::{{TrimPrefix "VK_" $e}}; 322eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 323eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format on 324eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu return ProcHook::EXTENSION_UNKNOWN; 325eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu} 326eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 327cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "C++.DefineInitProcMacro" "driver"}} 328cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 329cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "driver.C++.DefineInitProcExtMacro"}} 330cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 331cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wubool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc, 332cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu const std::bitset<ProcHook::EXTENSION_COUNT> &extensions) 333cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{ 334cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu auto& data = GetData(instance); 335cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu bool success = true; 336cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 337cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 338cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 339cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsInstanceDriverTableEntry" $f)}} 340cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.InitProc" $f}} 341cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 342cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 343cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 344cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 345cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu return success; 346cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu} 347cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 348cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wubool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc, 349cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu const std::bitset<ProcHook::EXTENSION_COUNT> &extensions) 350cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{ 351cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu auto& data = GetData(dev); 352cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu bool success = true; 353cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 354cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 355cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 356cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsDeviceDriverTableEntry" $f)}} 357cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.InitProc" $f}} 358cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 359cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 360cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 361cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 362cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu return success; 363cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu} 364cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 365eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace driver 366eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace vulkan 367eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 368eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// clang-format on 369eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶{{end}} 370eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 371eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 372eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 3730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 374cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits a declaration of a dispatch/driver table entry. 3750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 3760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 377cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "C++.DeclareTableEntry"}} 3780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 3790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "FunctionPtrName" $}} {{Macro "BaseName" $}} 3810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 3820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 3850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 386cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC macro. 3870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 3880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 389cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "C++.DefineInitProcMacro"}} 3900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu #define UNLIKELY(expr) __builtin_expect((expr), 0) 3910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 3925948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes #define INIT_PROC(required, obj, proc) do { \ 3930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu data.{{$}}.proc = reinterpret_cast<PFN_vk ## proc>( \ 3940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu get_proc(obj, "vk" # proc)); \ 3955948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes if (UNLIKELY(required && !data.{{$}}.proc)) { \ 3960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ALOGE("missing " # obj " proc: vk" # proc); \ 3970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu success = false; \ 3980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } \ 3990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } while(0) 4000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 4050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code to invoke INIT_PROC or INIT_PROC_EXT. 4060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 4070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "C++.InitProc"}} 4090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 4125948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes {{$required := (Macro "IsRequiredFunction" $)}} 4130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if $ext}} 4145948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes INIT_PROC_EXT({{Macro "BaseName" $ext}}, {{$required}}, § 4150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 4165948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes INIT_PROC({{$required}}, § 4170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsInstanceDispatched" $)}} 4200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu instance, § 4210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 4220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu dev, § 4230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "BaseName" $}}); 4260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4315948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes Emits true if a function /must/ be resolved. The only time this is not 4325948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes the case is for extension-added functions added in a later revision of the 4335948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes extension, and where we have to cope with drivers written against an older 4345948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes revision. 4355948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes------------------------------------------------------------------------------ 4365948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes*/}} 4375948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes{{define "IsRequiredFunction"}} 4385948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes {{AssertType $ "Function"}} 4395948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes 4405948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes {{if eq $.Name "vkGetSwapchainGrallocUsage2ANDROID"}} 4415948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes false 4425948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes {{else}} 4435948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes true 4445948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes {{end}} 4455948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes{{end}} 4465948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes 4475948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes 4485948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes{{/* 4495948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes------------------------------------------------------------------------------ 4500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is exported and instance-dispatched. 4510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsInstanceDispatchTableEntry"}} 4540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionExported" $) (Macro "IsInstanceDispatched" $)}} 457dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu {{/* deprecated and unused internally */}} 458dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu {{if not (eq $.Name "vkEnumerateDeviceLayerProperties")}} 459dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu true 460dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu {{end}} 4610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is exported and device-dispatched. 4680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsDeviceDispatchTableEntry"}} 4710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionExported" $) (Macro "IsDeviceDispatched" $)}} 4740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 4750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is intercepted by vulkan::api. 4820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsIntercepted"}} 4850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $)}} 4880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* Global functions cannot be dispatched at all */}} 4890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if (Macro "IsGloballyDispatched" $)}}true 4900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* VkPhysicalDevice functions that manage device layers */}} 4920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkCreateDevice"}}true 4930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkEnumerateDeviceLayerProperties"}}true 4940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 4950c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* Destroy functions of dispatchable objects */}} 4970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 4980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 4990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 5030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 506cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 507cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC_EXT macro for vulkan::api. 508cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 509cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 510cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "api.C++.DefineInitProcExtMacro"}} 5118925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu // Exported extension functions may be invoked even when their extensions 5128925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu // are disabled. Dispatch to stubs when that happens. 5135948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes #define INIT_PROC_EXT(ext, required, obj, proc) do { \ 5148925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu if (extensions[driver::ProcHook::ext]) \ 5155948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes INIT_PROC(required, obj, proc); \ 5168925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu else \ 5178925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu data.dispatch.proc = disabled ## proc; \ 518cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu } while(0) 519cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 5208925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5218925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5228925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{/* 5238925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu------------------------------------------------------------------------------- 5248925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu Emits a stub for an exported extension function. 5258925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu------------------------------------------------------------------------------- 5268925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu*/}} 5278925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{define "api.C++.DefineExtensionStub"}} 5288925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{AssertType $ "Function"}} 5298925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5308925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{$ext := GetAnnotation $ "extension"}} 5318925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{if and $ext (Macro "IsFunctionExported" $)}} 5328925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{$ext_name := index $ext.Arguments 0}} 5338925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5348925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{$base := (Macro "BaseName" $)}} 5358925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5365beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$p0 := (index $.CallParameters 0)}} 5375beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$ptail := (Tail 1 $.CallParameters)}} 5385beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu 5395beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$first_type := (Macro "Parameter" $p0)}} 5405beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$tail_types := (ForEach $ptail "ParameterType" | JoinWith ", ")}} 5415beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu 5425beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu VKAPI_ATTR {{Node "Type" $.Return}} disabled{{$base}}({{$first_type}}, {{$tail_types}}) { 5435beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu driver::Logger({{$p0.Name}}).Err({{$p0.Name}}, § 5445beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu "{{$ext_name}} not enabled. Exported {{$.Name}} not executed."); 5458925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{if not (IsVoid $.Return.Type)}}return VK_SUCCESS;{{end}} 5468925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu } 5478925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu ¶ 5488925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{end}} 5498925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{end}} 550cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 551cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 552cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 5530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 5540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code for vkGetInstanceProcAddr for function interception. 5550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 5560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 5570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.InterceptInstanceProcAddr"}} 5580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "API"}} 5590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // global functions 5615beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu if (instance == VK_NULL_HANDLE) { 5620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 5630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsGloballyDispatched" $f)}} 5640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (strcmp(pName, "{{$f.Name}}") == 0) return § 5653e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{Macro "BaseName" $f}}); 5660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 5695beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu ALOGE("invalid vkGetInstanceProcAddr(VK_NULL_HANDLE, \"%s\") call", pName); 5700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 5710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 5720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 5730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu static const struct Hook { 5740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu const char* name; 5750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu PFN_vkVoidFunction proc; 5760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } hooks[] = { 5770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 5780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionExported" $f)}} 5790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* hide global functions */}} 5800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsGloballyDispatched" $f)}} 5810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu { "{{$f.Name}}", nullptr }, 5820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect intercepted functions */}} 5840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if (Macro "api.IsIntercepted" $f)}} 5850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>(§ 5863e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Macro "BaseName" $f}}) }, 5870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect vkGetInstanceProcAddr to itself */}} 5890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $f.Name "vkGetInstanceProcAddr"}} 5903e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>({{Macro "BaseName" $f}}) }, 5910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect device functions to themselves as a workaround for 5930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu layers that do not intercept in their vkGetInstanceProcAddr */}} 5940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if (Macro "IsDeviceDispatched" $f)}} 5953e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>({{Macro "BaseName" $f}}) }, 5960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu }; 6010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 6020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu constexpr size_t count = sizeof(hooks) / sizeof(hooks[0]); 6030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu auto hook = std::lower_bound( 6040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu hooks, hooks + count, pName, 6050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu [](const Hook& h, const char* n) { return strcmp(h.name, n) < 0; }); 6060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (hook < hooks + count && strcmp(hook->name, pName) == 0) { 6075beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu if (!hook->proc) { 6085beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu vulkan::driver::Logger(instance).Err( 6095beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu instance, "invalid vkGetInstanceProcAddr(%p, \"%s\") call", 6105beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu instance, pName); 6115beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu } 6120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return hook->proc; 6130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 6140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 6150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 6160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 6170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 6200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code for vkGetDeviceProcAddr for function interception. 6220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 6240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.InterceptDeviceProcAddr"}} 6250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "API"}} 6260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (device == VK_NULL_HANDLE) { 6285beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu ALOGE("invalid vkGetDeviceProcAddr(VK_NULL_HANDLE, ...) call"); 6290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 6300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 6310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 6320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu static const char* const known_non_device_names[] = { 6330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 6340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $f)}} 6350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not (Macro "IsDeviceDispatched" $f)}} 6360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu "{{$f.Name}}", 6370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu }; 6410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 6420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu constexpr size_t count = sizeof(known_non_device_names) / 6430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu sizeof(known_non_device_names[0]); 6440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (!pName || 6450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu std::binary_search( 6460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu known_non_device_names, known_non_device_names + count, pName, 6470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu [](const char* a, const char* b) { return (strcmp(a, b) < 0); })) { 6485beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu vulkan::driver::Logger(device).Err(§ 6495beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu device, "invalid vkGetDeviceProcAddr(%p, \"%s\") call", device,§ 6505beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu (pName) ? pName : "(null)"); 6510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 6520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 6530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 6540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 655c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{range $f := AllCommands $}} 656c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{if (Macro "IsDeviceDispatched" $f)}} 657c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{ if (Macro "api.IsIntercepted" $f)}} 658c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu if (strcmp(pName, "{{$f.Name}}") == 0) return § 659c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>(§ 6603e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Macro "BaseName" $f}}); 661c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{else if eq $f.Name "vkGetDeviceProcAddr"}} 662c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu if (strcmp(pName, "{{$f.Name}}") == 0) return § 663c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>(§ 6643e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Macro "BaseName" $f}}); 665c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{end}} 666c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{end}} 667c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{end}} 668c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu ¶ 6690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 6700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 6730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code to dispatch a function. 6750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 6770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.Dispatch"}} 6780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 6790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsIntercepted" $)}} 6803e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Error "$.Name should not be generated"}} 6810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6833e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if not (IsVoid $.Return.Type)}}return §{{end}} 6843e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu 6853e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{$p0 := index $.CallParameters 0}} 6863e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu GetData({{$p0.Name}}).dispatch.§ 6870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "BaseName" $}}({{Macro "Arguments" $}}); 6880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 6890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 692eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 693eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits a list of extensions intercepted by vulkan::driver. 694eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 695eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 696eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.InterceptedExtensions"}} 697eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_ANDROID_native_buffer 698eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_EXT_debug_report 699eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_android_surface 700948233a57f0f2f6643a70019ef3c8287fd8d3771Ian ElliottVK_KHR_incremental_present 701eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_surface 702eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_swapchain 703eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 704eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 705eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 706eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 707eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 708eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits true if an extension is intercepted by vulkan::driver. 709eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 710eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 711eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.IsExtensionIntercepted"}} 712eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext_name := index $.Arguments 0}} 713eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$filters := Strings (Macro "driver.InterceptedExtensions") | SplitOn "\n"}} 714eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 715eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $f := $filters}} 716eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if eq $ext_name $f}}true{{end}} 717eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 718eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 719eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 720eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 721eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 722eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 723eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits true if a function is intercepted by vulkan::driver. 724eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 725eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 726eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.IsIntercepted"}} 727eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 728eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 729eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsFunctionSupported" $)}} 730eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Create functions of dispatchable objects */}} 731eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if eq $.Name "vkCreateInstance"}}true 732eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkCreateDevice"}}true 733ff4a6c772aaf3ff0b71348647330031a059b1f51Chia-I Wu {{else if eq $.Name "vkEnumeratePhysicalDevices"}}true 734eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetDeviceQueue"}}true 735eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkAllocateCommandBuffers"}}true 736eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 737eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Destroy functions of dispatchable objects */}} 738eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 739eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 740eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 741eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Enumeration of extensions */}} 742eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkEnumerateInstanceExtensionProperties"}}true 743eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 744eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 745eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetInstanceProcAddr"}}true 746eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetDeviceProcAddr"}}true 747eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 748eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 749eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 750eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 751eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 752eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.IsExtensionIntercepted" $ext}} 753eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 754eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 755eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 756eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 757eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 758eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 759eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 760eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 76136cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu Emits true if a function needs a ProcHook stub. 762eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 763eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 76436cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu{{define "driver.NeedProcHookStub"}} 765eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 766eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 76736cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if and (Macro "driver.IsIntercepted" $) (Macro "IsDeviceDispatched" $)}} 768eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 769eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 770eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if not (Macro "IsExtensionInternal" $ext)}}true{{end}} 771eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 772eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 773eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 774eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 775eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 776eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 777eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 778eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of struct ProcHook. 779eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 780eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 781eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineProcHookType"}} 782eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu struct ProcHook { 783eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu enum Type { 784eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu GLOBAL, 785eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu INSTANCE, 786eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu DEVICE, 787eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 788eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 789eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu enum Extension { 790eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$exts := Strings (Macro "driver.InterceptedExtensions") | SplitOn "\n"}} 791eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $e := $exts}} 792eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{TrimPrefix "VK_" $e}}, 793eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 794eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 795eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_CORE, // valid bit 796eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_COUNT, 797eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_UNKNOWN, 798eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 799eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 800eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const char* name; 801eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Type type; 802eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Extension extension; 803eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 804eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu PFN_vkVoidFunction proc; 80536cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu PFN_vkVoidFunction checked_proc; // always nullptr for non-device hooks 806eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 807eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 808eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 809eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 810eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 811eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 812cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC_EXT macro for vulkan::driver. 813cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 814cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 815cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.C++.DefineInitProcExtMacro"}} 8165948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes #define INIT_PROC_EXT(ext, required, obj, proc) do { \ 817cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu if (extensions[ProcHook::ext]) \ 8185948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes INIT_PROC(required, obj, proc); \ 819cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu } while(0) 820cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 821cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 822cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 823cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 824cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 82536cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu Emits a stub for ProcHook::checked_proc. 826eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 827eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 82836cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu{{define "driver.C++.DefineProcHookStub"}} 829eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 830eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 83136cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if (Macro "driver.NeedProcHookStub" $)}} 832eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 833eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext_name := index $ext.Arguments 0}} 834eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 835eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 836eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 83736cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu VKAPI_ATTR {{Node "Type" $.Return}} checked{{$base}}({{Macro "Parameters" $}}) { 83836cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{$p0 := index $.CallParameters 0}} 83936cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{$ext_hook := Strings ("ProcHook::") (Macro "BaseName" $ext)}} 840eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 84136cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu if (GetData({{$p0.Name}}).hook_extensions[{{$ext_hook}}]) { 84236cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if not (IsVoid $.Return.Type)}}return §{{end}} 84336cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{$base}}({{Macro "Arguments" $}}); 84436cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu } else { 8455beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu Logger({{$p0.Name}}).Err({{$p0.Name}}, "{{$ext_name}} not enabled. {{$.Name}} not executed."); 84636cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if not (IsVoid $.Return.Type)}}return VK_SUCCESS;{{end}} 847eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu } 84836cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu } 849eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 850eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 851eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 852eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 853eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 854eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 855eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 856eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of a global ProcHook. 857eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 858eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 859eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineGlobalProcHook"}} 860eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 861eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 862eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 863eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 864eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 865eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 866eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Error "invalid global extension"}} 867eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 868eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 869eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 870eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 871eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::GLOBAL, 872eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::EXTENSION_CORE, 873ff4a6c772aaf3ff0b71348647330031a059b1f51Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 874eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 875eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 876eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 877eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 878eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 879eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 880eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 881eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of an instance ProcHook. 882eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 883eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 884eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineInstanceProcHook"}} 885eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 886eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 887eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 888eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 889eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 890eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 891eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::INSTANCE, 892eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 893eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 894eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 895eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::{{Macro "BaseName" $ext}}, 896eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 897eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsExtensionInternal" $ext)}} 898eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 899eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 900eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 901622622377a1ac71a81a88e335f170c4a08835f06Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 902eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 903eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 904eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 905eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::EXTENSION_CORE, 906ff4a6c772aaf3ff0b71348647330031a059b1f51Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 907eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 908eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 909eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 910eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 911eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 912eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 913eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 914eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 915eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of a device ProcHook. 916eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 917eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 918eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineDeviceProcHook"}} 919eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 920eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 921eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 922eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 923eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 924eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 925eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::DEVICE, 926eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 927eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 928eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 929eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::{{Macro "BaseName" $ext}}, 930eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 931eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsExtensionInternal" $ext)}} 932eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 933eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 934eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 935622622377a1ac71a81a88e335f170c4a08835f06Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 936eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>(checked{{$base}}), 937eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 938eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 9394901db70b12801cf1966937a58eb7566bfdeb4ceChia-I Wu ProcHook::EXTENSION_CORE, 9404901db70b12801cf1966937a58eb7566bfdeb4ceChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 9414901db70b12801cf1966937a58eb7566bfdeb4ceChia-I Wu nullptr, 942eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 943eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 944eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 945eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 946eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 947eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 9480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 949cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if a function is needed by vulkan::driver. 950cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 951cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 952cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsDriverTableEntry"}} 953cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 954cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 955cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "IsFunctionSupported" $)}} 956cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Create functions of dispatchable objects */}} 957cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{ if eq $.Name "vkCreateDevice"}}true 958cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetDeviceQueue"}}true 959cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkAllocateCommandBuffers"}}true 960cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 961cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Destroy functions of dispatchable objects */}} 962cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 963cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 964cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 965cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Enumeration of extensions */}} 966cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 967cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 968cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* We cache physical devices in loader.cpp */}} 969cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkEnumeratePhysicalDevices"}}true 970cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 971cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetInstanceProcAddr"}}true 972cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetDeviceProcAddr"}}true 973cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 974cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* VK_KHR_swapchain->VK_ANDROID_native_buffer translation */}} 975cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkCreateImage"}}true 976cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyImage"}}true 977cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 978cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 979cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 980cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{$ext := GetAnnotation $ "extension"}} 981cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if $ext}} 982cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{$ext_name := index $ext.Arguments 0}} 983cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{ if eq $ext_name "VK_ANDROID_native_buffer"}}true 984cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $ext_name "VK_EXT_debug_report"}}true 985cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 986cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 987cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 988cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 989cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 990cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 991cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 992cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 993cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if an instance-dispatched function is needed by vulkan::driver. 994cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 995cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 996cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsInstanceDriverTableEntry"}} 997cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 998cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 999cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if and (Macro "driver.IsDriverTableEntry" $) (Macro "IsInstanceDispatched" $)}} 1000cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu true 1001cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 1002cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 1003cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1004cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1005cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 1006cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 1007cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if a device-dispatched function is needed by vulkan::driver. 1008cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 1009cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 1010cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsDeviceDriverTableEntry"}} 1011cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 1012cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1013cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if and (Macro "driver.IsDriverTableEntry" $) (Macro "IsDeviceDispatched" $)}} 1014cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu true 1015cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 1016cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 1017cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1018cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1019cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 1020cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 10210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits a function/extension name without the "vk"/"VK_" prefix. 10220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 10230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "BaseName"}} 10250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if IsFunction $}}{{TrimPrefix "vk" $.Name}} 10260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "extension"}}{{TrimPrefix "VK_" (index $.Arguments 0)}} 10270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}}{{Error "invalid use of BaseName"}} 10280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 10340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits a comma-separated list of C parameter names for the given command. 10350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 10360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "Arguments"}} 10380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ForEach $.CallParameters "ParameterName" | JoinWith ", "}} 10410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsGloballyDispatched"}} 10490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Global")}} 10510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" for supported functions that undergo table dispatch. Only global 10590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu functions and functions handled in the loader top without calling into 10600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu lower layers are not dispatched. 10610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsInstanceDispatched"}} 10640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Instance")}} 10660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" for supported functions that can have device-specific dispatch. 10740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsDeviceDispatched"}} 10770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Device")}} 10790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" if a function is core or from a supportable extension. 10870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsFunctionSupported"}} 10900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not (GetAnnotation $ "pfn")}} 10920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 10930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not $ext}}true 10940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if not (Macro "IsExtensionBlacklisted" $ext)}}true 10950c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 11010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Decides whether a function should be exported from the Android Vulkan 11030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu library. Functions in the core API and in loader extensions are exported. 11040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 11060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsFunctionExported"}} 11070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 11080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $)}} 11100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 11110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if $ext}} 11120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "IsExtensionExported" $ext}} 11130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 11140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 11150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 11180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 11210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" if an extension is unsupportable on Android. 11230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 11250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsExtensionBlacklisted"}} 11260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := index $.Arguments 0}} 11270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $ext "VK_KHR_display"}}true 11280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_display_swapchain"}}true 11290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_xlib_surface"}}true 11300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_xcb_surface"}}true 11310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_wayland_surface"}}true 11320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_mir_surface"}}true 11330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_win32_surface"}}true 11340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 11360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 11390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Reports whether an extension is implemented entirely by the loader, 11410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu so drivers should not enumerate it. 11420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 11440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsExtensionExported"}} 11450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := index $.Arguments 0}} 11460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $ext "VK_KHR_surface"}}true 11470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_swapchain"}}true 11480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_android_surface"}}true 1149948233a57f0f2f6643a70019ef3c8287fd8d3771Ian Elliott {{else if eq $ext "VK_KHR_incremental_present"}}true 11500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 1152eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 1153eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 1154eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 1155eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 1156eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Reports whether an extension is internal to the loader and drivers, 1157eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu so the loader should not enumerate it. 1158eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 1159eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 1160eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "IsExtensionInternal"}} 1161eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := index $.Arguments 0}} 1162eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if eq $ext "VK_ANDROID_native_buffer"}}true 1163eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 1164eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 1165