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) { 3226aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes {{$exts := Strings (Macro "driver.KnownExtensions") | 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 ¶ 3965948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes #define INIT_PROC(required, obj, proc) do { \ 3970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu data.{{$}}.proc = reinterpret_cast<PFN_vk ## proc>( \ 3980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu get_proc(obj, "vk" # proc)); \ 3995948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes if (UNLIKELY(required && !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}} 417d1abd7456e10f46200a90e8a0e5a1a8bef0a388aJesse Hall INIT_PROC_EXT({{Macro "BaseName" $ext}}, § 4180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 419d1abd7456e10f46200a90e8a0e5a1a8bef0a388aJesse Hall INIT_PROC(§ 4200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 422d1abd7456e10f46200a90e8a0e5a1a8bef0a388aJesse Hall {{if GetAnnotation $ "optional"}}false{{else}}true{{end}}, § 423d1abd7456e10f46200a90e8a0e5a1a8bef0a388aJesse Hall 4240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsInstanceDispatched" $)}} 4250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu instance, § 4260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 4270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu dev, § 4280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "BaseName" $}}); 4310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is exported and instance-dispatched. 4370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsInstanceDispatchTableEntry"}} 4400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionExported" $) (Macro "IsInstanceDispatched" $)}} 443dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu {{/* deprecated and unused internally */}} 444dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu {{if not (eq $.Name "vkEnumerateDeviceLayerProperties")}} 445dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu true 446dbd33bcca26a38d24a1ae25d894175ea9ad1033aChia-I Wu {{end}} 4470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is exported and device-dispatched. 4540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsDeviceDispatchTableEntry"}} 4570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionExported" $) (Macro "IsDeviceDispatched" $)}} 4600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 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 intercepted by vulkan::api. 4680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsIntercepted"}} 4710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $)}} 4740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* Global functions cannot be dispatched at all */}} 4750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if (Macro "IsGloballyDispatched" $)}}true 4760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* VkPhysicalDevice functions that manage device layers */}} 4780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkCreateDevice"}}true 4790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkEnumerateDeviceLayerProperties"}}true 4800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 4810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* Destroy functions of dispatchable objects */}} 4830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 4840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 4850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 492cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 493cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC_EXT macro for vulkan::api. 494cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 495cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 496cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "api.C++.DefineInitProcExtMacro"}} 4978925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu // Exported extension functions may be invoked even when their extensions 4988925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu // are disabled. Dispatch to stubs when that happens. 4995948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes #define INIT_PROC_EXT(ext, required, obj, proc) do { \ 5008925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu if (extensions[driver::ProcHook::ext]) \ 5015948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes INIT_PROC(required, obj, proc); \ 5028925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu else \ 5038925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu data.dispatch.proc = disabled ## proc; \ 504cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu } while(0) 505cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 5068925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5078925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5088925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{/* 5098925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu------------------------------------------------------------------------------- 5108925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu Emits a stub for an exported extension function. 5118925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu------------------------------------------------------------------------------- 5128925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu*/}} 5138925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{define "api.C++.DefineExtensionStub"}} 5148925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{AssertType $ "Function"}} 5158925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5168925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{$ext := GetAnnotation $ "extension"}} 5178925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{if and $ext (Macro "IsFunctionExported" $)}} 5188925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{$ext_name := index $ext.Arguments 0}} 5198925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5208925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{$base := (Macro "BaseName" $)}} 5218925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu 5225beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$p0 := (index $.CallParameters 0)}} 5235beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$ptail := (Tail 1 $.CallParameters)}} 5245beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu 5255beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$first_type := (Macro "Parameter" $p0)}} 5265beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu {{$tail_types := (ForEach $ptail "ParameterType" | JoinWith ", ")}} 5275beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu 5285beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu VKAPI_ATTR {{Node "Type" $.Return}} disabled{{$base}}({{$first_type}}, {{$tail_types}}) { 5295beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu driver::Logger({{$p0.Name}}).Err({{$p0.Name}}, § 5305beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu "{{$ext_name}} not enabled. Exported {{$.Name}} not executed."); 5318925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{if not (IsVoid $.Return.Type)}}return VK_SUCCESS;{{end}} 5328925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu } 5338925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu ¶ 5348925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu {{end}} 5358925efd0a87d96885834a00f3bdef220edf6d8eaChia-I Wu{{end}} 536cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 537cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 538cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 5390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 5400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code for vkGetInstanceProcAddr for function interception. 5410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 5420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 5430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.InterceptInstanceProcAddr"}} 5440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "API"}} 5450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // global functions 5475beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu if (instance == VK_NULL_HANDLE) { 5480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 5490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsGloballyDispatched" $f)}} 5500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (strcmp(pName, "{{$f.Name}}") == 0) return § 5513e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{Macro "BaseName" $f}}); 5520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 5555beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu ALOGE("invalid vkGetInstanceProcAddr(VK_NULL_HANDLE, \"%s\") call", pName); 5560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 5570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 5580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 5590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu static const struct Hook { 5600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu const char* name; 5610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu PFN_vkVoidFunction proc; 5620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } hooks[] = { 5630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 5640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionExported" $f)}} 5650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* hide global functions */}} 5660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsGloballyDispatched" $f)}} 5670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu { "{{$f.Name}}", nullptr }, 5680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect intercepted functions */}} 5700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if (Macro "api.IsIntercepted" $f)}} 5710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>(§ 5723e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Macro "BaseName" $f}}) }, 5730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect vkGetInstanceProcAddr to itself */}} 5750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $f.Name "vkGetInstanceProcAddr"}} 5763e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>({{Macro "BaseName" $f}}) }, 5770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect device functions to themselves as a workaround for 5790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu layers that do not intercept in their vkGetInstanceProcAddr */}} 5800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if (Macro "IsDeviceDispatched" $f)}} 5813e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>({{Macro "BaseName" $f}}) }, 5820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu }; 5870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 5880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu constexpr size_t count = sizeof(hooks) / sizeof(hooks[0]); 5890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu auto hook = std::lower_bound( 5900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu hooks, hooks + count, pName, 5910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu [](const Hook& h, const char* n) { return strcmp(h.name, n) < 0; }); 5920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (hook < hooks + count && strcmp(hook->name, pName) == 0) { 5935beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu if (!hook->proc) { 5945beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu vulkan::driver::Logger(instance).Err( 5955beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu instance, "invalid vkGetInstanceProcAddr(%p, \"%s\") call", 5965beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu instance, pName); 5975beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu } 5980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return hook->proc; 5990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 6000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 6010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 6020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 6030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 6060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code for vkGetDeviceProcAddr for function interception. 6080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 6100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.InterceptDeviceProcAddr"}} 6110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "API"}} 6120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (device == VK_NULL_HANDLE) { 6145beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu ALOGE("invalid vkGetDeviceProcAddr(VK_NULL_HANDLE, ...) call"); 6150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 6160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 6170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 6180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu static const char* const known_non_device_names[] = { 6190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 6200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $f)}} 6210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not (Macro "IsDeviceDispatched" $f)}} 6220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu "{{$f.Name}}", 6230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu }; 6270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 6280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu constexpr size_t count = sizeof(known_non_device_names) / 6290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu sizeof(known_non_device_names[0]); 6300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (!pName || 6310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu std::binary_search( 6320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu known_non_device_names, known_non_device_names + count, pName, 6330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu [](const char* a, const char* b) { return (strcmp(a, b) < 0); })) { 6345beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu vulkan::driver::Logger(device).Err(§ 6355beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu device, "invalid vkGetDeviceProcAddr(%p, \"%s\") call", device,§ 6365beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu (pName) ? pName : "(null)"); 6370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 6380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 6390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 6400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 641c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{range $f := AllCommands $}} 642c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{if (Macro "IsDeviceDispatched" $f)}} 643c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{ if (Macro "api.IsIntercepted" $f)}} 644c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu if (strcmp(pName, "{{$f.Name}}") == 0) return § 645c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>(§ 6463e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Macro "BaseName" $f}}); 647c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{else if eq $f.Name "vkGetDeviceProcAddr"}} 648c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu if (strcmp(pName, "{{$f.Name}}") == 0) return § 649c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>(§ 6503e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Macro "BaseName" $f}}); 651c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{end}} 652c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{end}} 653c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu {{end}} 654c56603e0b35e31c5f1cd134d6b916a16ff710504Chia-I Wu ¶ 6550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 6560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 6590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code to dispatch a function. 6610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 6620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 6630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.Dispatch"}} 6640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 6650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsIntercepted" $)}} 6663e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{Error "$.Name should not be generated"}} 6670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 6680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6693e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{if not (IsVoid $.Return.Type)}}return §{{end}} 6703e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu 6713e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu {{$p0 := index $.CallParameters 0}} 6723e654dc68a954b150c141c4a2e96418883bd7c9bChia-I Wu GetData({{$p0.Name}}).dispatch.§ 6730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "BaseName" $}}({{Macro "Arguments" $}}); 6740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 6750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 6770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 678eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 679eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits a list of extensions intercepted by vulkan::driver. 680eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 681eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 682eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.InterceptedExtensions"}} 683eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_ANDROID_native_buffer 684eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_EXT_debug_report 685d634c483bcbd564acd81dcf5d15fc5fa8ab410f4Courtney GoeltzenleuchterVK_EXT_hdr_metadata 686e278daf850a664a1f15c760c64a74d3649b6f812Courtney GoeltzenleuchterVK_EXT_swapchain_colorspace 687d634c483bcbd564acd81dcf5d15fc5fa8ab410f4Courtney GoeltzenleuchterVK_GOOGLE_display_timing 688eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_android_surface 689948233a57f0f2f6643a70019ef3c8287fd8d3771Ian ElliottVK_KHR_incremental_present 690e278daf850a664a1f15c760c64a74d3649b6f812Courtney GoeltzenleuchterVK_KHR_shared_presentable_image 691eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_surface 692eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_swapchain 6932452cf7e653c425191791a4fb546106d6a277654Chris ForbesVK_KHR_get_surface_capabilities2 694eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 695eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 696eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 697eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 698eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 6996aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes Emits a list of extensions known to vulkan::driver. 7006aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes------------------------------------------------------------------------------ 7016aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes*/}} 7026aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes{{define "driver.KnownExtensions"}} 7036aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes{{Macro "driver.InterceptedExtensions"}} 7046aa30db7a9bbe06b59fddd554d797c6e466ca891Chris ForbesVK_KHR_get_physical_device_properties2 7056aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes{{end}} 7066aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes 7076aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes 7086aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes{{/* 7096aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes------------------------------------------------------------------------------ 710eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits true if an extension is intercepted by vulkan::driver. 711eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 712eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 713eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.IsExtensionIntercepted"}} 714eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext_name := index $.Arguments 0}} 715eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$filters := Strings (Macro "driver.InterceptedExtensions") | SplitOn "\n"}} 716eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 717eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $f := $filters}} 718eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if eq $ext_name $f}}true{{end}} 719eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 720eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 721eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 722eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 723eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 724eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 725eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits true if a function is intercepted by vulkan::driver. 726eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 727eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 728eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.IsIntercepted"}} 729eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 730eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 731eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsFunctionSupported" $)}} 732eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Create functions of dispatchable objects */}} 733eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if eq $.Name "vkCreateInstance"}}true 734eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkCreateDevice"}}true 735ff4a6c772aaf3ff0b71348647330031a059b1f51Chia-I Wu {{else if eq $.Name "vkEnumeratePhysicalDevices"}}true 736eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetDeviceQueue"}}true 737eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkAllocateCommandBuffers"}}true 738eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 739eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Destroy functions of dispatchable objects */}} 740eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 741eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 742eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 743eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Enumeration of extensions */}} 744eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkEnumerateInstanceExtensionProperties"}}true 745eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 746eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 747eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetInstanceProcAddr"}}true 748eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetDeviceProcAddr"}}true 749eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 750eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 751eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 752eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 753eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 754eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.IsExtensionIntercepted" $ext}} 755eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 756eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 757eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 758eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 759eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 760eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 761eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 762eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 76336cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu Emits true if a function needs a ProcHook stub. 764eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 765eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 76636cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu{{define "driver.NeedProcHookStub"}} 767eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 768eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 76936cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if and (Macro "driver.IsIntercepted" $) (Macro "IsDeviceDispatched" $)}} 770eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 771eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 772eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if not (Macro "IsExtensionInternal" $ext)}}true{{end}} 773eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 774eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 775eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 776eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 777eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 778eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 779eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 780eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of struct ProcHook. 781eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 782eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 783eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineProcHookType"}} 784eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu struct ProcHook { 785eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu enum Type { 786eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu GLOBAL, 787eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu INSTANCE, 788eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu DEVICE, 789eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 790eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 791eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu enum Extension { 7926aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes {{$exts := Strings (Macro "driver.KnownExtensions") | SplitOn "\n"}} 793eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $e := $exts}} 794eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{TrimPrefix "VK_" $e}}, 795eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 796eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 797eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_CORE, // valid bit 798eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_COUNT, 799eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_UNKNOWN, 800eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 801eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 802eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const char* name; 803eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Type type; 804eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Extension extension; 805eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 806eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu PFN_vkVoidFunction proc; 80736cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu PFN_vkVoidFunction checked_proc; // always nullptr for non-device hooks 808eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 809eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 810eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 811eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 812eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 813eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 814cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC_EXT macro for vulkan::driver. 815cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 816cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 817cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.C++.DefineInitProcExtMacro"}} 8185948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes #define INIT_PROC_EXT(ext, required, obj, proc) do { \ 819cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu if (extensions[ProcHook::ext]) \ 8205948b3eae87af490b7cec36d043b5a9bca6de8c0Chris Forbes INIT_PROC(required, obj, proc); \ 821cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu } while(0) 822cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 823cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 824cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 825cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 826cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 82736cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu Emits a stub for ProcHook::checked_proc. 828eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 829eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 83036cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu{{define "driver.C++.DefineProcHookStub"}} 831eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 832eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 83336cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if (Macro "driver.NeedProcHookStub" $)}} 834eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 835eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext_name := index $ext.Arguments 0}} 836eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 837eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 838eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 83936cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu VKAPI_ATTR {{Node "Type" $.Return}} checked{{$base}}({{Macro "Parameters" $}}) { 84036cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{$p0 := index $.CallParameters 0}} 84136cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{$ext_hook := Strings ("ProcHook::") (Macro "BaseName" $ext)}} 842eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 84336cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu if (GetData({{$p0.Name}}).hook_extensions[{{$ext_hook}}]) { 84436cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if not (IsVoid $.Return.Type)}}return §{{end}} 84536cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{$base}}({{Macro "Arguments" $}}); 84636cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu } else { 8475beb2ac5e0b676e55be9f0b768ba3fd3697f3216Chia-I Wu Logger({{$p0.Name}}).Err({{$p0.Name}}, "{{$ext_name}} not enabled. {{$.Name}} not executed."); 84836cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu {{if not (IsVoid $.Return.Type)}}return VK_SUCCESS;{{end}} 849eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu } 85036cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu } 851eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 852eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 853eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 854eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 855eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 856eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 857eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 858eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of a global ProcHook. 859eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 860eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 861eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineGlobalProcHook"}} 862eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 863eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 864eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 865eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 866eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 867eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 868eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Error "invalid global extension"}} 869eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 870eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 871eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 872eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 873eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::GLOBAL, 874eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::EXTENSION_CORE, 875ff4a6c772aaf3ff0b71348647330031a059b1f51Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 876eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 877eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 878eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 879eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 880eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 881eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 882eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 883eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of an instance ProcHook. 884eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 885eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 886eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineInstanceProcHook"}} 887eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 888eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 889eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 890eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 891eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 892eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 893eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::INSTANCE, 894eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 895eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 896eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 897eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::{{Macro "BaseName" $ext}}, 898eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 899eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsExtensionInternal" $ext)}} 900eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 901eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 902eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 903622622377a1ac71a81a88e335f170c4a08835f06Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 904eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 905eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 906eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 907eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::EXTENSION_CORE, 908ff4a6c772aaf3ff0b71348647330031a059b1f51Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 909eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 910eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 911eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 912eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 913eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 914eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 915eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 916eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 917eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of a device ProcHook. 918eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 919eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 920eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineDeviceProcHook"}} 921eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 922eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 923eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 924eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 925eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 926eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 927eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::DEVICE, 928eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 929eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 930eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 931eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::{{Macro "BaseName" $ext}}, 932eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 933eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsExtensionInternal" $ext)}} 934eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 935eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 936eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 937622622377a1ac71a81a88e335f170c4a08835f06Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 938eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>(checked{{$base}}), 939eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 940eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 9414901db70b12801cf1966937a58eb7566bfdeb4ceChia-I Wu ProcHook::EXTENSION_CORE, 9424901db70b12801cf1966937a58eb7566bfdeb4ceChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 9434901db70b12801cf1966937a58eb7566bfdeb4ceChia-I Wu nullptr, 944eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 945eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 946eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 947eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 948eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 949eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 9500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 951cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if a function is needed by vulkan::driver. 952cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 953cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 954cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsDriverTableEntry"}} 955cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 956cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 957cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "IsFunctionSupported" $)}} 958cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Create functions of dispatchable objects */}} 959cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{ if eq $.Name "vkCreateDevice"}}true 960cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetDeviceQueue"}}true 961cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkAllocateCommandBuffers"}}true 962cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 963cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Destroy functions of dispatchable objects */}} 964cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 965cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 966cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 967cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Enumeration of extensions */}} 968cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 969cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 970cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* We cache physical devices in loader.cpp */}} 971cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkEnumeratePhysicalDevices"}}true 972cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 973cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetInstanceProcAddr"}}true 974cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetDeviceProcAddr"}}true 975cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 976cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* VK_KHR_swapchain->VK_ANDROID_native_buffer translation */}} 977cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkCreateImage"}}true 978cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyImage"}}true 979cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 98085bb0c5a57be2b456079c14448127fa9bb8cff66Jesse Hall {{else if eq $.Name "vkGetPhysicalDeviceProperties"}}true 9816aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes {{else if eq $.Name "vkGetPhysicalDeviceProperties2KHR"}}true 982cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 983cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 984cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{$ext := GetAnnotation $ "extension"}} 985cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if $ext}} 986cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{$ext_name := index $ext.Arguments 0}} 987cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{ if eq $ext_name "VK_ANDROID_native_buffer"}}true 988cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $ext_name "VK_EXT_debug_report"}}true 989cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 990cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 991cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 992cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 993cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 994cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 995cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 996cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 997cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if an instance-dispatched function is needed by vulkan::driver. 998cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 999cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 1000cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsInstanceDriverTableEntry"}} 1001cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 1002cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1003cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if and (Macro "driver.IsDriverTableEntry" $) (Macro "IsInstanceDispatched" $)}} 1004cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu true 1005cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 1006cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 1007cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1008cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1009cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 1010cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 1011cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if a device-dispatched function is needed by vulkan::driver. 1012cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 1013cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 1014cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsDeviceDriverTableEntry"}} 1015cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 1016cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1017cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if and (Macro "driver.IsDriverTableEntry" $) (Macro "IsDeviceDispatched" $)}} 1018cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu true 1019cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 1020cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 1021cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1022cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 1023cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 1024cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 10250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits a function/extension name without the "vk"/"VK_" prefix. 10260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 10270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "BaseName"}} 10290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if IsFunction $}}{{TrimPrefix "vk" $.Name}} 10300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "extension"}}{{TrimPrefix "VK_" (index $.Arguments 0)}} 10310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}}{{Error "invalid use of BaseName"}} 10320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 10380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits a comma-separated list of C parameter names for the given command. 10390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 10400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "Arguments"}} 10420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ForEach $.CallParameters "ParameterName" | JoinWith ", "}} 10450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsGloballyDispatched"}} 10530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Global")}} 10550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" for supported functions that undergo table dispatch. Only global 10630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu functions and functions handled in the loader top without calling into 10640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu lower layers are not dispatched. 10650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsInstanceDispatched"}} 10680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Instance")}} 10700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" for supported functions that can have device-specific dispatch. 10780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsDeviceDispatched"}} 10810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Device")}} 10830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" if a function is core or from a supportable extension. 10910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsFunctionSupported"}} 10940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10950c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not (GetAnnotation $ "pfn")}} 10960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 10970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not $ext}}true 10980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if not (Macro "IsExtensionBlacklisted" $ext)}}true 10990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 11020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 11050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Decides whether a function should be exported from the Android Vulkan 11070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu library. Functions in the core API and in loader extensions are exported. 11080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 11100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsFunctionExported"}} 11110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 11120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $)}} 11140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 11150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if $ext}} 11160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "IsExtensionExported" $ext}} 11170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 11180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 11190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 11220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 11250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" if an extension is unsupportable on Android. 11270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 11290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsExtensionBlacklisted"}} 11300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := index $.Arguments 0}} 11310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $ext "VK_KHR_display"}}true 11320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_display_swapchain"}}true 113377ad05be8fa7f4d63b384cc134a55e25731cdaf6Jesse Hall {{else if eq $ext "VK_KHR_mir_surface"}}true 11340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_xcb_surface"}}true 113577ad05be8fa7f4d63b384cc134a55e25731cdaf6Jesse Hall {{else if eq $ext "VK_KHR_xlib_surface"}}true 11360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_wayland_surface"}}true 11370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_win32_surface"}}true 1138ad250840766ea76def08c0d9f0b04a09c32dab79Jesse Hall {{else if eq $ext "VK_KHX_external_memory_win32"}}true 1139ad250840766ea76def08c0d9f0b04a09c32dab79Jesse Hall {{else if eq $ext "VK_KHX_win32_keyed_mutex"}}true 1140ad250840766ea76def08c0d9f0b04a09c32dab79Jesse Hall {{else if eq $ext "VK_KHX_external_semaphore_win32"}}true 114177ad05be8fa7f4d63b384cc134a55e25731cdaf6Jesse Hall {{else if eq $ext "VK_EXT_acquire_xlib_display"}}true 114277ad05be8fa7f4d63b384cc134a55e25731cdaf6Jesse Hall {{else if eq $ext "VK_EXT_direct_mode_display"}}true 114377ad05be8fa7f4d63b384cc134a55e25731cdaf6Jesse Hall {{else if eq $ext "VK_EXT_display_surface_counter"}}true 114477ad05be8fa7f4d63b384cc134a55e25731cdaf6Jesse Hall {{else if eq $ext "VK_EXT_display_control"}}true 1145ad250840766ea76def08c0d9f0b04a09c32dab79Jesse Hall {{else if eq $ext "VK_MVK_ios_surface"}}true 1146ad250840766ea76def08c0d9f0b04a09c32dab79Jesse Hall {{else if eq $ext "VK_MVK_macos_surface"}}true 114777ad05be8fa7f4d63b384cc134a55e25731cdaf6Jesse Hall {{else if eq $ext "VK_NN_vi_surface"}}true 1148eb02c479aad0bc442520fe63f7ffa4d77fe2fa24Jesse Hall {{else if eq $ext "VK_NV_external_memory_win32"}}true 1149eb02c479aad0bc442520fe63f7ffa4d77fe2fa24Jesse Hall {{else if eq $ext "VK_NV_win32_keyed_mutex"}}true 11500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 11520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 11540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 11550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 1156d634c483bcbd564acd81dcf5d15fc5fa8ab410f4Courtney Goeltzenleuchter Reports whether an extension has functions exported by the loader. 1157d634c483bcbd564acd81dcf5d15fc5fa8ab410f4Courtney Goeltzenleuchter E.g. applications can directly link to an extension function. 1158d634c483bcbd564acd81dcf5d15fc5fa8ab410f4Courtney Goeltzenleuchter Currently only support WSI extensions this way. 11590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 11600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 11610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsExtensionExported"}} 11620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := index $.Arguments 0}} 11630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $ext "VK_KHR_surface"}}true 11640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_swapchain"}}true 11650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_android_surface"}}true 11660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 11670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 1168eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 1169eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 1170eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 1171eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 1172eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Reports whether an extension is internal to the loader and drivers, 1173eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu so the loader should not enumerate it. 1174eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 1175eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 1176eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "IsExtensionInternal"}} 1177eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := index $.Arguments 0}} 1178eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if eq $ext "VK_ANDROID_native_buffer"}}true 1179eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 1180eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 1181