code-generator.tmpl revision 7823e124e00576e20e47ec717cbe8bc89f0f2bf2
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> 947823e124e00576e20e47ec717cbe8bc89f0f2bf2Mark Salyzyn¶ 950c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include <algorithm> 967823e124e00576e20e47ec717cbe8bc89f0f2bf2Mark Salyzyn¶ 977823e124e00576e20e47ec717cbe8bc89f0f2bf2Mark Salyzyn#include <log/log.h> 980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 993e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu// to catch mismatches between vulkan.h and this file 1003e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu#undef VK_NO_PROTOTYPES 1010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include "api.h" 1020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wunamespace vulkan {« 1040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wunamespace api {« 1050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 106cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "C++.DefineInitProcMacro" "dispatch"}} 107cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 108cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "api.C++.DefineInitProcExtMacro"}} 1090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1108925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wunamespace {« 1118925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu¶ 1128925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu// clang-format off 1138925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu¶ 1148925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{range $f := AllCommands $}} 1158925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{Macro "api.C++.DefineExtensionStub" $f}} 1168925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{end}} 1178925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu// clang-format on 1188925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu¶ 1198925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu»} // anonymous 1208925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu¶ 1218925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wubool InitDispatchTable( 1228925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu VkInstance instance, 1238925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu PFN_vkGetInstanceProcAddr get_proc, 1248925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu const std::bitset<driver::ProcHook::EXTENSION_COUNT> &extensions) { 1250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu auto& data = GetData(instance); 1260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu bool success = true; 1270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 1290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 1300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsInstanceDispatchTableEntry" $f)}} 1310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "C++.InitProc" $f}} 1320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 1350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return success; 1370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu} 1380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1398925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wubool InitDispatchTable( 1408925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu VkDevice dev, 1418925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu PFN_vkGetDeviceProcAddr get_proc, 1428925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu const std::bitset<driver::ProcHook::EXTENSION_COUNT> &extensions) { 1430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu auto& data = GetData(dev); 1440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu bool success = true; 1450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 1470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 1480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsDeviceDispatchTableEntry" $f)}} 1490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "C++.InitProc" $f}} 1500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 1530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return success; 1550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu} 1560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu// clang-format off 1580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1593e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wunamespace {« 1603e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1613e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu// forward declarations needed by GetInstanceProcAddr and GetDeviceProcAddr 1620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{range $f := AllCommands $}} 1633e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if and (Macro "IsFunctionExported" $f) (not (Macro "api.IsIntercepted" $f))}} 1643e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu VKAPI_ATTR {{Node "Type" $f.Return}} {{Macro "BaseName" $f}}({{Macro "Parameters" $f}}); 1653e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{end}} 1663e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu{{end}} 1673e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1683e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu{{range $f := AllCommands $}} 1693e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if and (Macro "IsFunctionExported" $f) (not (Macro "api.IsIntercepted" $f))}} 1703e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu VKAPI_ATTR {{Node "Type" $f.Return}} {{Macro "BaseName" $f}}({{Macro "Parameters" $f}}) { 1710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $f.Name "vkGetInstanceProcAddr"}} 1720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "api.C++.InterceptInstanceProcAddr" $}} 1730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $f.Name "vkGetDeviceProcAddr"}} 1740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "api.C++.InterceptDeviceProcAddr" $}} 1750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 1770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "api.C++.Dispatch" $f}} 1780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 1790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 1820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1833e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu»} // anonymous namespace 1843e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1853e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu// clang-format on 1863e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1873e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu»} // namespace api 1883e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu»} // namespace vulkan 1893e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1903e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu// clang-format off 1913e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 1923e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu{{range $f := AllCommands $}} 1933e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if (Macro "IsFunctionExported" $f)}} 1943e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu __attribute__((visibility("default"))) 1953e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu VKAPI_ATTR {{Node "Type" $f.Return}} {{$f.Name}}({{Macro "Parameters" $f}}) { 1963e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if not (IsVoid $f.Return.Type)}}return §{{end}} 1973e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu vulkan::api::{{Macro "BaseName" $f}}({{Macro "Arguments" $f}}); 1983e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu } 1993e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu ¶ 2003e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{end}} 2013e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu{{end}} 2023e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu¶ 2030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu// clang-format on 2040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶{{end}} 2050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 2060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 2070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 208eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 209eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu driver_gen.h 210eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 211eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 212eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver_gen.h"}} 213eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{Macro "Copyright"}} 214eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 215eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// WARNING: This file is generated. See ../README.md for instructions. 216eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 217eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#ifndef LIBVULKAN_DRIVER_GEN_H 218eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#define LIBVULKAN_DRIVER_GEN_H 219eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 220cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu#include <bitset> 221eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <vulkan/vulkan.h> 222eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <vulkan/vk_android_native_buffer.h> 223eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 224eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace vulkan {« 225eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace driver {« 226eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 227eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{Macro "driver.C++.DefineProcHookType"}} 228eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 229cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wustruct InstanceDriverTable { 230cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 231cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 232cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsInstanceDriverTableEntry" $f)}} 233cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.DeclareTableEntry" $f}}; 234cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 235cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 236cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 237cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu}; 238cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 239cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wustruct DeviceDriverTable { 240cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 241cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 242cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsDeviceDriverTableEntry" $f)}} 243cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.DeclareTableEntry" $f}}; 244cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 245cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 246cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 247cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu}; 248cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 249eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wuconst ProcHook* GetProcHook(const char* name); 250eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuProcHook::Extension GetProcHookExtension(const char* name); 251eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 252cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wubool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc, 253cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu const std::bitset<ProcHook::EXTENSION_COUNT> &extensions); 254cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wubool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc, 255cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu const std::bitset<ProcHook::EXTENSION_COUNT> &extensions); 256cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 257eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace driver 258eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace vulkan 259eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 260eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#endif // LIBVULKAN_DRIVER_TABLE_H 261eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶{{end}} 262eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 263eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 264eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 265eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 266eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu driver_gen.cpp 267eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 268eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 269eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver_gen.cpp"}} 270eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{Macro "Copyright"}} 271eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 272eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// WARNING: This file is generated. See ../README.md for instructions. 273eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 274eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <string.h> 2757823e124e00576e20e47ec717cbe8bc89f0f2bf2Mark Salyzyn¶ 276eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <algorithm> 2777823e124e00576e20e47ec717cbe8bc89f0f2bf2Mark Salyzyn¶ 2787823e124e00576e20e47ec717cbe8bc89f0f2bf2Mark Salyzyn#include <log/log.h> 279eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 280eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include "driver.h" 281eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 282eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace vulkan {« 283eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace driver {« 284eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 285eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace {« 286eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 287eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// clang-format off 288eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 289eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{range $f := AllCommands $}} 29036cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{Macro "driver.C++.DefineProcHookStub" $f}} 291eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 292eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// clang-format on 293eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 294eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wuconst ProcHook g_proc_hooks[] = { 295eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format off 296eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 297eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "driver.IsIntercepted" $f)}} 298eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if (Macro "IsGloballyDispatched" $f)}} 299eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.C++.DefineGlobalProcHook" $f}} 300eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if (Macro "IsInstanceDispatched" $f)}} 301eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.C++.DefineInstanceProcHook" $f}} 302eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if (Macro "IsDeviceDispatched" $f)}} 303eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.C++.DefineDeviceProcHook" $f}} 304eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 305eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 306eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 307eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format on 308eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu}; 309eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 310eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // anonymous 311eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 312eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wuconst ProcHook* GetProcHook(const char* name) { 313eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const auto& begin = g_proc_hooks; 314eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const auto& end = g_proc_hooks + 315eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu sizeof(g_proc_hooks) / sizeof(g_proc_hooks[0]); 316eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const auto hook = std::lower_bound(begin, end, name, 317eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu [](const ProcHook& e, const char* n) { return strcmp(e.name, n) < 0; }); 318eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu return (hook < end && strcmp(hook->name, name) == 0) ? hook : nullptr; 319eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu} 320eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 321eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuProcHook::Extension GetProcHookExtension(const char* name) { 322eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$exts := Strings (Macro "driver.InterceptedExtensions") | SplitOn "\n"}} 323eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format off 324eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $e := $exts}} 325eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu if (strcmp(name, "{{$e}}") == 0) return ProcHook::{{TrimPrefix "VK_" $e}}; 326eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 327eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format on 328eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu return ProcHook::EXTENSION_UNKNOWN; 329eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu} 330eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 331cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "C++.DefineInitProcMacro" "driver"}} 332cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 333cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "driver.C++.DefineInitProcExtMacro"}} 334cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 335cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wubool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc, 336cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu const std::bitset<ProcHook::EXTENSION_COUNT> &extensions) 337cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{ 338cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu auto& data = GetData(instance); 339cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu bool success = true; 340cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 341cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 342cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 343cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsInstanceDriverTableEntry" $f)}} 344cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.InitProc" $f}} 345cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 346cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 347cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 348cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 349cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu return success; 350cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu} 351cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 352cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wubool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc, 353cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu const std::bitset<ProcHook::EXTENSION_COUNT> &extensions) 354cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{ 355cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu auto& data = GetData(dev); 356cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu bool success = true; 357cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 358cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 359cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 360cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsDeviceDriverTableEntry" $f)}} 361cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.InitProc" $f}} 362cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 363cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 364cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 365cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 366cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu return success; 367cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu} 368cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 369eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace driver 370eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace vulkan 371eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 372eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// clang-format on 373eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶{{end}} 374eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 375eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 376eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 3770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 378cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits a declaration of a dispatch/driver table entry. 3790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 3800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 381cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "C++.DeclareTableEntry"}} 3820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 3830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "FunctionPtrName" $}} {{Macro "BaseName" $}} 3850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 3860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 3890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 390cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC macro. 3910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 3920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 393cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "C++.DefineInitProcMacro"}} 3940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu #define UNLIKELY(expr) __builtin_expect((expr), 0) 3950c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 3960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu #define INIT_PROC(obj, proc) do { \ 3970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu data.{{$}}.proc = reinterpret_cast<PFN_vk ## proc>( \ 3980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu get_proc(obj, "vk" # proc)); \ 3990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (UNLIKELY(!data.{{$}}.proc)) { \ 4000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ALOGE("missing " # obj " proc: vk" # proc); \ 4010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu success = false; \ 4020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } \ 4030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } while(0) 4040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 4090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code to invoke INIT_PROC or INIT_PROC_EXT. 4100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 4110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "C++.InitProc"}} 4130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 4160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if $ext}} 4170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu INIT_PROC_EXT({{Macro "BaseName" $ext}}, § 4180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 4190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu INIT_PROC(§ 4200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsInstanceDispatched" $)}} 4230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu instance, § 4240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 4250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu dev, § 4260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "BaseName" $}}); 4290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is exported and instance-dispatched. 4350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsInstanceDispatchTableEntry"}} 4380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionExported" $) (Macro "IsInstanceDispatched" $)}} 441dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu {{/* deprecated and unused internally */}} 442dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu {{if not (eq $.Name "vkEnumerateDeviceLayerProperties")}} 443dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu true 444dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu {{end}} 4450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is exported and device-dispatched. 4520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsDeviceDispatchTableEntry"}} 4550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionExported" $) (Macro "IsDeviceDispatched" $)}} 4580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 4590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is intercepted by vulkan::api. 4660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsIntercepted"}} 4690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $)}} 4720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* Global functions cannot be dispatched at all */}} 4730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if (Macro "IsGloballyDispatched" $)}}true 4740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* VkPhysicalDevice functions that manage device layers */}} 4760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkCreateDevice"}}true 4770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkEnumerateDeviceLayerProperties"}}true 4780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 4790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* Destroy functions of dispatchable objects */}} 4810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 4820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 4830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 490cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 491cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC_EXT macro for vulkan::api. 492cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 493cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 494cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "api.C++.DefineInitProcExtMacro"}} 4958925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu // Exported extension functions may be invoked even when their extensions 4968925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu // are disabled. Dispatch to stubs when that happens. 497cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu #define INIT_PROC_EXT(ext, obj, proc) do { \ 4988925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu if (extensions[driver::ProcHook::ext]) \ 4998925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu INIT_PROC(obj, proc); \ 5008925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu else \ 5018925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu data.dispatch.proc = disabled ## proc; \ 502cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu } while(0) 503cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 5048925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5058925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5068925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{/* 5078925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu------------------------------------------------------------------------------- 5088925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu Emits a stub for an exported extension function. 5098925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu------------------------------------------------------------------------------- 5108925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu*/}} 5118925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{define "api.C++.DefineExtensionStub"}} 5128925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{AssertType $ "Function"}} 5138925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5148925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{$ext := GetAnnotation $ "extension"}} 5158925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{if and $ext (Macro "IsFunctionExported" $)}} 5168925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{$ext_name := index $ext.Arguments 0}} 5178925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5188925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{$base := (Macro "BaseName" $)}} 5198925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5205beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$p0 := (index $.CallParameters 0)}} 5215beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$ptail := (Tail 1 $.CallParameters)}} 5225beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu 5235beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$first_type := (Macro "Parameter" $p0)}} 5245beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$tail_types := (ForEach $ptail "ParameterType" | JoinWith ", ")}} 5255beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu 5265beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu VKAPI_ATTR {{Node "Type" $.Return}} disabled{{$base}}({{$first_type}}, {{$tail_types}}) { 5275beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu driver::Logger({{$p0.Name}}).Err({{$p0.Name}}, § 5285beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu "{{$ext_name}} not enabled. Exported {{$.Name}} not executed."); 5298925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{if not (IsVoid $.Return.Type)}}return VK_SUCCESS;{{end}} 5308925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu } 5318925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu ¶ 5328925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{end}} 5338925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{end}} 534cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 535cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 536cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 5370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 5380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code for vkGetInstanceProcAddr for function interception. 5390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 5400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 5410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.InterceptInstanceProcAddr"}} 5420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "API"}} 5430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // global functions 5455beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu if (instance == VK_NULL_HANDLE) { 5460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 5470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsGloballyDispatched" $f)}} 5480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (strcmp(pName, "{{$f.Name}}") == 0) return § 5493e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{Macro "BaseName" $f}}); 5500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 5535beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu ALOGE("invalid vkGetInstanceProcAddr(VK_NULL_HANDLE, \"%s\") call", pName); 5540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 5550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 5560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 5570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu static const struct Hook { 5580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu const char* name; 5590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu PFN_vkVoidFunction proc; 5600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } hooks[] = { 5610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 5620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionExported" $f)}} 5630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* hide global functions */}} 5640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsGloballyDispatched" $f)}} 5650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu { "{{$f.Name}}", nullptr }, 5660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect intercepted functions */}} 5680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if (Macro "api.IsIntercepted" $f)}} 5690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>(§ 5703e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Macro "BaseName" $f}}) }, 5710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect vkGetInstanceProcAddr to itself */}} 5730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $f.Name "vkGetInstanceProcAddr"}} 5743e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>({{Macro "BaseName" $f}}) }, 5750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect device functions to themselves as a workaround for 5770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu layers that do not intercept in their vkGetInstanceProcAddr */}} 5780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if (Macro "IsDeviceDispatched" $f)}} 5793e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>({{Macro "BaseName" $f}}) }, 5800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu }; 5850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 5860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu constexpr size_t count = sizeof(hooks) / sizeof(hooks[0]); 5870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu auto hook = std::lower_bound( 5880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu hooks, hooks + count, pName, 5890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu [](const Hook& h, const char* n) { return strcmp(h.name, n) < 0; }); 5900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (hook < hooks + count && strcmp(hook->name, pName) == 0) { 5915beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu if (!hook->proc) { 5925beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu vulkan::driver::Logger(instance).Err( 5935beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu instance, "invalid vkGetInstanceProcAddr(%p, \"%s\") call", 5945beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu instance, pName); 5955beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu } 5960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return hook->proc; 5970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 5980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 5990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 6000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 6010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 6040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code for vkGetDeviceProcAddr for function interception. 6060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 6080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.InterceptDeviceProcAddr"}} 6090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "API"}} 6100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (device == VK_NULL_HANDLE) { 6125beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu ALOGE("invalid vkGetDeviceProcAddr(VK_NULL_HANDLE, ...) call"); 6130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 6140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 6150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 6160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu static const char* const known_non_device_names[] = { 6170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 6180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $f)}} 6190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not (Macro "IsDeviceDispatched" $f)}} 6200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu "{{$f.Name}}", 6210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu }; 6250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 6260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu constexpr size_t count = sizeof(known_non_device_names) / 6270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu sizeof(known_non_device_names[0]); 6280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (!pName || 6290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu std::binary_search( 6300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu known_non_device_names, known_non_device_names + count, pName, 6310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu [](const char* a, const char* b) { return (strcmp(a, b) < 0); })) { 6325beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu vulkan::driver::Logger(device).Err(§ 6335beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu device, "invalid vkGetDeviceProcAddr(%p, \"%s\") call", device,§ 6345beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu (pName) ? pName : "(null)"); 6350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 6360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 6370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 6380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 639c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{range $f := AllCommands $}} 640c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{if (Macro "IsDeviceDispatched" $f)}} 641c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{ if (Macro "api.IsIntercepted" $f)}} 642c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu if (strcmp(pName, "{{$f.Name}}") == 0) return § 643c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>(§ 6443e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Macro "BaseName" $f}}); 645c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{else if eq $f.Name "vkGetDeviceProcAddr"}} 646c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu if (strcmp(pName, "{{$f.Name}}") == 0) return § 647c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>(§ 6483e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Macro "BaseName" $f}}); 649c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{end}} 650c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{end}} 651c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{end}} 652c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu ¶ 6530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 6540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 6570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code to dispatch a function. 6590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 6610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.Dispatch"}} 6620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 6630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsIntercepted" $)}} 6643e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Error "$.Name should not be generated"}} 6650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6673e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if not (IsVoid $.Return.Type)}}return §{{end}} 6683e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu 6693e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{$p0 := index $.CallParameters 0}} 6703e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu GetData({{$p0.Name}}).dispatch.§ 6710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "BaseName" $}}({{Macro "Arguments" $}}); 6720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 6730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 676eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 677eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits a list of extensions intercepted by vulkan::driver. 678eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 679eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 680eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.InterceptedExtensions"}} 681eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_ANDROID_native_buffer 682eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_EXT_debug_report 683eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_android_surface 684eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_surface 685eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_swapchain 686eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 687eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 688eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 689eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 690eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 691eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits true if an extension is intercepted by vulkan::driver. 692eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 693eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 694eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.IsExtensionIntercepted"}} 695eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext_name := index $.Arguments 0}} 696eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$filters := Strings (Macro "driver.InterceptedExtensions") | SplitOn "\n"}} 697eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 698eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $f := $filters}} 699eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if eq $ext_name $f}}true{{end}} 700eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 701eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 702eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 703eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 704eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 705eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 706eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits true if a function is intercepted by vulkan::driver. 707eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 708eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 709eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.IsIntercepted"}} 710eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 711eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 712eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsFunctionSupported" $)}} 713eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Create functions of dispatchable objects */}} 714eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if eq $.Name "vkCreateInstance"}}true 715eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkCreateDevice"}}true 716ff4a6c772aaf3ff0b71348647330031a059b1f51Chia-I Wu {{else if eq $.Name "vkEnumeratePhysicalDevices"}}true 717eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetDeviceQueue"}}true 718eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkAllocateCommandBuffers"}}true 719eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 720eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Destroy functions of dispatchable objects */}} 721eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 722eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 723eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 724eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Enumeration of extensions */}} 725eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkEnumerateInstanceExtensionProperties"}}true 726eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 727eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 728eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetInstanceProcAddr"}}true 729eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetDeviceProcAddr"}}true 730eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 731eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 732eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 733eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 734eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 735eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.IsExtensionIntercepted" $ext}} 736eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 737eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 738eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 739eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 740eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 741eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 742eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 743eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 74436cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu Emits true if a function needs a ProcHook stub. 745eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 746eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 74736cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu{{define "driver.NeedProcHookStub"}} 748eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 749eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 75036cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if and (Macro "driver.IsIntercepted" $) (Macro "IsDeviceDispatched" $)}} 751eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 752eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 753eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if not (Macro "IsExtensionInternal" $ext)}}true{{end}} 754eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 755eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 756eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 757eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 758eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 759eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 760eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 761eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of struct ProcHook. 762eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 763eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 764eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineProcHookType"}} 765eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu struct ProcHook { 766eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu enum Type { 767eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu GLOBAL, 768eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu INSTANCE, 769eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu DEVICE, 770eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 771eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 772eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu enum Extension { 773eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$exts := Strings (Macro "driver.InterceptedExtensions") | SplitOn "\n"}} 774eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $e := $exts}} 775eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{TrimPrefix "VK_" $e}}, 776eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 777eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 778eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_CORE, // valid bit 779eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_COUNT, 780eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_UNKNOWN, 781eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 782eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 783eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const char* name; 784eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Type type; 785eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Extension extension; 786eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 787eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu PFN_vkVoidFunction proc; 78836cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu PFN_vkVoidFunction checked_proc; // always nullptr for non-device hooks 789eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 790eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 791eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 792eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 793eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 794eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 795cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC_EXT macro for vulkan::driver. 796cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 797cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 798cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.C++.DefineInitProcExtMacro"}} 799cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu #define INIT_PROC_EXT(ext, obj, proc) do { \ 800cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu if (extensions[ProcHook::ext]) \ 801cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu INIT_PROC(obj, proc); \ 802cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu } while(0) 803cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 804cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 805cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 806cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 807cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 80836cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu Emits a stub for ProcHook::checked_proc. 809eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 810eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 81136cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu{{define "driver.C++.DefineProcHookStub"}} 812eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 813eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 81436cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if (Macro "driver.NeedProcHookStub" $)}} 815eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 816eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext_name := index $ext.Arguments 0}} 817eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 818eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 819eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 82036cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu VKAPI_ATTR {{Node "Type" $.Return}} checked{{$base}}({{Macro "Parameters" $}}) { 82136cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{$p0 := index $.CallParameters 0}} 82236cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{$ext_hook := Strings ("ProcHook::") (Macro "BaseName" $ext)}} 823eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 82436cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu if (GetData({{$p0.Name}}).hook_extensions[{{$ext_hook}}]) { 82536cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if not (IsVoid $.Return.Type)}}return §{{end}} 82636cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{$base}}({{Macro "Arguments" $}}); 82736cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu } else { 8285beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu Logger({{$p0.Name}}).Err({{$p0.Name}}, "{{$ext_name}} not enabled. {{$.Name}} not executed."); 82936cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if not (IsVoid $.Return.Type)}}return VK_SUCCESS;{{end}} 830eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu } 83136cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu } 832eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 833eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 834eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 835eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 836eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 837eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 838eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 839eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of a global ProcHook. 840eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 841eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 842eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineGlobalProcHook"}} 843eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 844eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 845eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 846eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 847eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 848eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 849eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Error "invalid global extension"}} 850eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 851eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 852eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 853eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 854eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::GLOBAL, 855eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::EXTENSION_CORE, 856ff4a6c772aaf3ff0b71348647330031a059b1f51Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 857eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 858eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 859eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 860eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 861eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 862eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 863eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 864eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of an instance ProcHook. 865eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 866eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 867eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineInstanceProcHook"}} 868eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 869eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 870eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 871eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 872eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 873eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 874eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::INSTANCE, 875eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 876eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 877eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 878eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::{{Macro "BaseName" $ext}}, 879eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 880eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsExtensionInternal" $ext)}} 881eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 882eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 883eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 884622622377a1ac71a81a88e335f170c4a08835f06Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 885eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 886eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 887eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 888eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::EXTENSION_CORE, 889ff4a6c772aaf3ff0b71348647330031a059b1f51Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 890eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 891eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 892eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 893eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 894eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 895eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 896eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 897eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 898eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of a device ProcHook. 899eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 900eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 901eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineDeviceProcHook"}} 902eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 903eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 904eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 905eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 906eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 907eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 908eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::DEVICE, 909eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 910eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 911eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 912eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::{{Macro "BaseName" $ext}}, 913eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 914eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsExtensionInternal" $ext)}} 915eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 916eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 917eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 918622622377a1ac71a81a88e335f170c4a08835f06Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 919eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>(checked{{$base}}), 920eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 921eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 9224901db70b12801cf1966937a58eb7566bfdeb4ceChia-I Wu ProcHook::EXTENSION_CORE, 9234901db70b12801cf1966937a58eb7566bfdeb4ceChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 9244901db70b12801cf1966937a58eb7566bfdeb4ceChia-I Wu nullptr, 925eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 926eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 927eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 928eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 929eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 930eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 9310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 932cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if a function is needed by vulkan::driver. 933cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 934cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 935cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsDriverTableEntry"}} 936cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 937cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 938cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "IsFunctionSupported" $)}} 939cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Create functions of dispatchable objects */}} 940cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{ if eq $.Name "vkCreateDevice"}}true 941cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetDeviceQueue"}}true 942cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkAllocateCommandBuffers"}}true 943cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 944cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Destroy functions of dispatchable objects */}} 945cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 946cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 947cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 948cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Enumeration of extensions */}} 949cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 950cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 951cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* We cache physical devices in loader.cpp */}} 952cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkEnumeratePhysicalDevices"}}true 953cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 954cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetInstanceProcAddr"}}true 955cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetDeviceProcAddr"}}true 956cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 957cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* VK_KHR_swapchain->VK_ANDROID_native_buffer translation */}} 958cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkCreateImage"}}true 959cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyImage"}}true 960cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 961cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 962cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 963cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{$ext := GetAnnotation $ "extension"}} 964cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if $ext}} 965cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{$ext_name := index $ext.Arguments 0}} 966cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{ if eq $ext_name "VK_ANDROID_native_buffer"}}true 967cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $ext_name "VK_EXT_debug_report"}}true 968cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 969cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 970cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 971cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 972cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 973cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 974cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 975cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 976cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if an instance-dispatched function is needed by vulkan::driver. 977cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 978cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 979cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsInstanceDriverTableEntry"}} 980cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 981cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 982cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if and (Macro "driver.IsDriverTableEntry" $) (Macro "IsInstanceDispatched" $)}} 983cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu true 984cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 985cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 986cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 987cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 988cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 989cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 990cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if a device-dispatched function is needed by vulkan::driver. 991cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 992cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 993cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsDeviceDriverTableEntry"}} 994cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 995cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 996cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if and (Macro "driver.IsDriverTableEntry" $) (Macro "IsDeviceDispatched" $)}} 997cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu true 998cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 999cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 1000cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1001cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1002cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 1003cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 10040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits a function/extension name without the "vk"/"VK_" prefix. 10050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 10060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "BaseName"}} 10080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if IsFunction $}}{{TrimPrefix "vk" $.Name}} 10090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "extension"}}{{TrimPrefix "VK_" (index $.Arguments 0)}} 10100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}}{{Error "invalid use of BaseName"}} 10110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 10170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits a comma-separated list of C parameter names for the given command. 10180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 10190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "Arguments"}} 10210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ForEach $.CallParameters "ParameterName" | JoinWith ", "}} 10240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsGloballyDispatched"}} 10320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Global")}} 10340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" for supported functions that undergo table dispatch. Only global 10420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu functions and functions handled in the loader top without calling into 10430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu lower layers are not dispatched. 10440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsInstanceDispatched"}} 10470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Instance")}} 10490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" for supported functions that can have device-specific dispatch. 10570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsDeviceDispatched"}} 10600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Device")}} 10620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" if a function is core or from a supportable extension. 10700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsFunctionSupported"}} 10730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not (GetAnnotation $ "pfn")}} 10750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 10760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not $ext}}true 10770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if not (Macro "IsExtensionBlacklisted" $ext)}}true 10780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Decides whether a function should be exported from the Android Vulkan 10860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu library. Functions in the core API and in loader extensions are exported. 10870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsFunctionExported"}} 10900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $)}} 10930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 10940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if $ext}} 10950c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "IsExtensionExported" $ext}} 10960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 10970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 11010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 11040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" if an extension is unsupportable on Android. 11060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 11080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsExtensionBlacklisted"}} 11090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := index $.Arguments 0}} 11100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $ext "VK_KHR_display"}}true 11110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_display_swapchain"}}true 11120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_xlib_surface"}}true 11130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_xcb_surface"}}true 11140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_wayland_surface"}}true 11150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_mir_surface"}}true 11160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_win32_surface"}}true 11170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 11190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 11220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Reports whether an extension is implemented entirely by the loader, 11240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu so drivers should not enumerate it. 11250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 11270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsExtensionExported"}} 11280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := index $.Arguments 0}} 11290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $ext "VK_KHR_surface"}}true 11300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_swapchain"}}true 11310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_android_surface"}}true 11320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 1134eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 1135eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 1136eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 1137eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 1138eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Reports whether an extension is internal to the loader and drivers, 1139eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu so the loader should not enumerate it. 1140eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 1141eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 1142eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "IsExtensionInternal"}} 1143eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := index $.Arguments 0}} 1144eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if eq $ext "VK_ANDROID_native_buffer"}}true 1145eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 1146eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 1147