code-generator.tmpl revision cc5e2765a9d56b03b69d0c3f25b94721f82d034e
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¶ 400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include <vulkan/vulkan.h> 410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wunamespace vulkan {« 430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wunamespace api {« 440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wustruct InstanceDispatchTable { 460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsInstanceDispatchTableEntry" $f)}} 49cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.DeclareTableEntry" $f}}; 500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu}; 540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wustruct DeviceDispatchTable { 560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsDeviceDispatchTableEntry" $f)}} 59cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.DeclareTableEntry" $f}}; 600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu}; 640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wubool InitDispatchTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc); 660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wubool InitDispatchTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc); 670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu»} // namespace api 690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu»} // namespace vulkan 700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#endif // LIBVULKAN_API_GEN_H 720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶{{end}} 730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu api_gen.cpp 780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api_gen.cpp"}} 810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{Macro "Copyright"}} 820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu// WARNING: This file is generated. See ../README.md for instructions. 840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include <string.h> 860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include <algorithm> 870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include <log/log.h> 880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu#include "api.h" 900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wunamespace vulkan {« 920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wunamespace api {« 930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 94cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "C++.DefineInitProcMacro" "dispatch"}} 95cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 96cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "api.C++.DefineInitProcExtMacro"}} 970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wubool InitDispatchTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc) { 990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu auto& data = GetData(instance); 1000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu bool success = true; 1010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 1030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 1040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsInstanceDispatchTableEntry" $f)}} 1050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "C++.InitProc" $f}} 1060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 1090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return success; 1110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu} 1120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wubool InitDispatchTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc) { 1140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu auto& data = GetData(dev); 1150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu bool success = true; 1160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 1180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 1190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsDeviceDispatchTableEntry" $f)}} 1200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "C++.InitProc" $f}} 1210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 1240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return success; 1260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu} 1270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu»} // namespace api 1290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu»} // namespace vulkan 1300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu// clang-format off 1320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{range $f := AllCommands $}} 1340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionExported" $f)}} 1350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu __attribute__((visibility("default"))) 1360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu VKAPI_ATTR {{Node "Type" $f.Return}} {{$f.Name}}({{Macro "Parameters" $f}}) { 1370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $f.Name "vkGetInstanceProcAddr"}} 1380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "api.C++.InterceptInstanceProcAddr" $}} 1390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $f.Name "vkGetDeviceProcAddr"}} 1400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "api.C++.InterceptDeviceProcAddr" $}} 1410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 1430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "api.C++.Dispatch" $f}} 1440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 1450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 1460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 1470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 1480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶ 1490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu// clang-format on 1500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu¶{{end}} 1510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 1520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 1530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 154eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 155eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu driver_gen.h 156eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 157eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 158eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver_gen.h"}} 159eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{Macro "Copyright"}} 160eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 161eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// WARNING: This file is generated. See ../README.md for instructions. 162eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 163eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#ifndef LIBVULKAN_DRIVER_GEN_H 164eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#define LIBVULKAN_DRIVER_GEN_H 165eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 166eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <vulkan/vulkan.h> 167eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <vulkan/vk_android_native_buffer.h> 168eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 169eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace vulkan {« 170eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace driver {« 171eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 172eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{Macro "driver.C++.DefineProcHookType"}} 173eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 174cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wustruct InstanceDriverTable { 175cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 176cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 177cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsInstanceDriverTableEntry" $f)}} 178cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.DeclareTableEntry" $f}}; 179cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 180cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 181cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 182cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu}; 183cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 184cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wustruct DeviceDriverTable { 185cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 186cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 187cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsDeviceDriverTableEntry" $f)}} 188cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.DeclareTableEntry" $f}}; 189cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 190cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 191cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 192cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu}; 193cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 194eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wuconst ProcHook* GetProcHook(const char* name); 195eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuProcHook::Extension GetProcHookExtension(const char* name); 196eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 197cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wubool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc); 198cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wubool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc); 199cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 200eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace driver 201eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace vulkan 202eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 203eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#endif // LIBVULKAN_DRIVER_TABLE_H 204eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶{{end}} 205eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 206eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 207eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 208eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 209eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu driver_gen.cpp 210eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 211eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 212eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver_gen.cpp"}} 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#include <string.h> 218eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <algorithm> 219eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <log/log.h> 220eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 221eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include "driver.h" 222eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include "loader.h" 223eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 224eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace vulkan {« 225eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace driver {« 226eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 227eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wunamespace {« 228eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 229eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// clang-format off 230eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 231eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{range $f := AllCommands $}} 232eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.C++.DefineProcHookStubs" $f}} 233eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 234eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// clang-format on 235eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 236eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wuconst ProcHook g_proc_hooks[] = { 237eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format off 238eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 239eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "driver.IsIntercepted" $f)}} 240eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if (Macro "IsGloballyDispatched" $f)}} 241eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.C++.DefineGlobalProcHook" $f}} 242eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if (Macro "IsInstanceDispatched" $f)}} 243eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.C++.DefineInstanceProcHook" $f}} 244eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if (Macro "IsDeviceDispatched" $f)}} 245eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.C++.DefineDeviceProcHook" $f}} 246eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 247eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 248eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 249eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format on 250eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu}; 251eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 252eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // anonymous 253eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 254eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wuconst ProcHook* GetProcHook(const char* name) { 255eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const auto& begin = g_proc_hooks; 256eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const auto& end = g_proc_hooks + 257eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu sizeof(g_proc_hooks) / sizeof(g_proc_hooks[0]); 258eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const auto hook = std::lower_bound(begin, end, name, 259eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu [](const ProcHook& e, const char* n) { return strcmp(e.name, n) < 0; }); 260eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu return (hook < end && strcmp(hook->name, name) == 0) ? hook : nullptr; 261eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu} 262eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 263eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuProcHook::Extension GetProcHookExtension(const char* name) { 264eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$exts := Strings (Macro "driver.InterceptedExtensions") | SplitOn "\n"}} 265eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format off 266eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $e := $exts}} 267eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu if (strcmp(name, "{{$e}}") == 0) return ProcHook::{{TrimPrefix "VK_" $e}}; 268eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 269eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu // clang-format on 270eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu return ProcHook::EXTENSION_UNKNOWN; 271eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu} 272eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 273cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "C++.DefineInitProcMacro" "driver"}} 274cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 275cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{Macro "driver.C++.DefineInitProcExtMacro"}} 276cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 277cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wubool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc) 278cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{ 279cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu auto& data = GetData(instance); 280cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu bool success = true; 281cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 282cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 283cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 284cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsInstanceDriverTableEntry" $f)}} 285cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.InitProc" $f}} 286cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 287cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 288cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 289cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 290cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu return success; 291cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu} 292cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 293cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wubool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc) 294cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{ 295cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu auto& data = GetData(dev); 296cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu bool success = true; 297cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 298cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format off 299cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{range $f := AllCommands $}} 300cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "driver.IsDeviceDriverTableEntry" $f)}} 301cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{Macro "C++.InitProc" $f}} 302cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 303cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 304cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // clang-format on 305cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu ¶ 306cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu return success; 307cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu} 308cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu¶ 309eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace driver 310eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu»} // namespace vulkan 311eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶ 312eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu// clang-format on 313eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu¶{{end}} 314eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 315eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 316eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 3170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 318cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits a declaration of a dispatch/driver table entry. 3190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 3200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 321cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "C++.DeclareTableEntry"}} 3220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 3230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "FunctionPtrName" $}} {{Macro "BaseName" $}} 3250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 3260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 3290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 330cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC macro. 3310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 3320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 333cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "C++.DefineInitProcMacro"}} 3340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu #define UNLIKELY(expr) __builtin_expect((expr), 0) 3350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 3360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu #define INIT_PROC(obj, proc) do { \ 3370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu data.{{$}}.proc = reinterpret_cast<PFN_vk ## proc>( \ 3380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu get_proc(obj, "vk" # proc)); \ 3390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (UNLIKELY(!data.{{$}}.proc)) { \ 3400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ALOGE("missing " # obj " proc: vk" # proc); \ 3410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu success = false; \ 3420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } \ 3430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } while(0) 3440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 3450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 3480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 3490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code to invoke INIT_PROC or INIT_PROC_EXT. 3500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 3510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 3520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "C++.InitProc"}} 3530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 3540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 3560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if $ext}} 3570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu INIT_PROC_EXT({{Macro "BaseName" $ext}}, § 3580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 3590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu INIT_PROC(§ 3600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 3610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsInstanceDispatched" $)}} 3630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu instance, § 3640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 3650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu dev, § 3660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 3670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "BaseName" $}}); 3690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 3700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 3730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 3740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is exported and instance-dispatched. 3750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 3760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 3770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsInstanceDispatchTableEntry"}} 3780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 3790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionExported" $) (Macro "IsInstanceDispatched" $)}} 3810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 3820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 3830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 3840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 3870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 3880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is exported and device-dispatched. 3890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 3900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 3910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsDeviceDispatchTableEntry"}} 3920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 3930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionExported" $) (Macro "IsDeviceDispatched" $)}} 3950c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 3960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 3970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 3980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 3990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 4010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits true if a function is intercepted by vulkan::api. 4030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.IsIntercepted"}} 4060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 4070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $)}} 4090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* Global functions cannot be dispatched at all */}} 4100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if (Macro "IsGloballyDispatched" $)}}true 4110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* VkPhysicalDevice functions that manage device layers */}} 4130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkCreateDevice"}}true 4140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkEnumerateDeviceLayerProperties"}}true 4150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 4160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* Destroy functions of dispatchable objects */}} 4180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 4190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 4200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 4240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 427cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 428cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC_EXT macro for vulkan::api. 429cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 430cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 431cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "api.C++.DefineInitProcExtMacro"}} 432cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu // TODO do we want to point to a stub or nullptr when ext is not enabled? 433cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu #define INIT_PROC_EXT(ext, obj, proc) do { \ 434cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu INIT_PROC(obj, proc); \ 435cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu } while(0) 436cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 437cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 438cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 439cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 4400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code for vkGetInstanceProcAddr for function interception. 4420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 4430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 4440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.InterceptInstanceProcAddr"}} 4450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "API"}} 4460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // global functions 4480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (!instance) { 4490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := AllCommands $}} 4500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsGloballyDispatched" $f)}} 4510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (strcmp(pName, "{{$f.Name}}") == 0) return § 4520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu reinterpret_cast<PFN_vkVoidFunction>(§ 4530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu vulkan::api::{{Macro "BaseName" $f}}); 4540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 4570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ALOGE("vkGetInstanceProcAddr called with %s without instance", pName); 4580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 4590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 4600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 4610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu static const struct Hook { 4620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu const char* name; 4630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu PFN_vkVoidFunction proc; 4640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } hooks[] = { 4650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 4660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionExported" $f)}} 4670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* hide global functions */}} 4680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsGloballyDispatched" $f)}} 4690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu { "{{$f.Name}}", nullptr }, 4700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect intercepted functions */}} 4720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if (Macro "api.IsIntercepted" $f)}} 4730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>(§ 4740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu vulkan::api::{{Macro "BaseName" $f}}) }, 4750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect vkGetInstanceProcAddr to itself */}} 4770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $f.Name "vkGetInstanceProcAddr"}} 4780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>({{$f.Name}}) }, 4790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{/* redirect device functions to themselves as a workaround for 4810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu layers that do not intercept in their vkGetInstanceProcAddr */}} 4820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if (Macro "IsDeviceDispatched" $f)}} 4830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu { "{{$f.Name}}", reinterpret_cast<PFN_vkVoidFunction>({{$f.Name}}) }, 4840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 4850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 4880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu }; 4890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 4900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu constexpr size_t count = sizeof(hooks) / sizeof(hooks[0]); 4910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu auto hook = std::lower_bound( 4920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu hooks, hooks + count, pName, 4930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu [](const Hook& h, const char* n) { return strcmp(h.name, n) < 0; }); 4940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (hook < hooks + count && strcmp(hook->name, pName) == 0) { 4950c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (!hook->proc) 4960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ALOGE("vkGetInstanceProcAddr called with %s with instance", pName); 4970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return hook->proc; 4980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 4990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 5000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 5010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 5020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 5050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 5060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code for vkGetDeviceProcAddr for function interception. 5070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 5080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 5090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.InterceptDeviceProcAddr"}} 5100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "API"}} 5110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (device == VK_NULL_HANDLE) { 5130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ALOGE("vkGetDeviceProcAddr called with invalid device"); 5140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 5150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 5160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 5170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu static const char* const known_non_device_names[] = { 5180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{range $f := SortBy (AllCommands $) "FunctionName"}} 5190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $f)}} 5200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not (Macro "IsDeviceDispatched" $f)}} 5210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu "{{$f.Name}}", 5220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu }; 5260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format on 5270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu constexpr size_t count = sizeof(known_non_device_names) / 5280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu sizeof(known_non_device_names[0]); 5290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu if (!pName || 5300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu std::binary_search( 5310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu known_non_device_names, known_non_device_names + count, pName, 5320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu [](const char* a, const char* b) { return (strcmp(a, b) < 0); })) { 5330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ALOGE("vkGetDeviceProcAddr called with %s", pName); 5340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu return nullptr; 5350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu } 5360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu // clang-format off 5370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu ¶ 5380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 5390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 5420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 5430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits code to dispatch a function. 5440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 5450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 5460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "api.C++.Dispatch"}} 5470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 5480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsIntercepted" $)}}// call into api.cpp{{end}} 5500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not (IsVoid $.Return.Type)}}return §{{end}} 5510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "api.IsIntercepted" $)}} 5530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu vulkan::api::§ 5540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 5550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$p0 := index $.CallParameters 0}} 5560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu vulkan::api::GetData({{$p0.Name}}).dispatch.§ 5570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 5580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "BaseName" $}}({{Macro "Arguments" $}}); 5600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 5610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 5630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 564eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 565eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits a list of extensions intercepted by vulkan::driver. 566eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 567eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 568eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.InterceptedExtensions"}} 569eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_ANDROID_native_buffer 570eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_EXT_debug_report 571eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_android_surface 572eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_surface 573eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuVK_KHR_swapchain 574eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 575eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 576eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 577eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 578eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 579eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits true if an extension is intercepted by vulkan::driver. 580eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 581eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 582eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.IsExtensionIntercepted"}} 583eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext_name := index $.Arguments 0}} 584eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$filters := Strings (Macro "driver.InterceptedExtensions") | SplitOn "\n"}} 585eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 586eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $f := $filters}} 587eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if eq $ext_name $f}}true{{end}} 588eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 589eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 590eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 591eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 592eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 593eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 594eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits true if a function is intercepted by vulkan::driver. 595eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 596eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 597eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.IsIntercepted"}} 598eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 599eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 600eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsFunctionSupported" $)}} 601eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Create functions of dispatchable objects */}} 602eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if eq $.Name "vkCreateInstance"}}true 603eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkCreateDevice"}}true 604eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetDeviceQueue"}}true 605eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkAllocateCommandBuffers"}}true 606eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 607eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Destroy functions of dispatchable objects */}} 608eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 609eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 610eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 611eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* Enumeration of extensions */}} 612eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkEnumerateInstanceExtensionProperties"}}true 613eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 614eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 615eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{/* We cache physical devices in loader.cpp */}} 616eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkEnumeratePhysicalDevices"}}true 617eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 618eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetInstanceProcAddr"}}true 619eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else if eq $.Name "vkGetDeviceProcAddr"}}true 620eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 621eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 622eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 623eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 624eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 625eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Macro "driver.IsExtensionIntercepted" $ext}} 626eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 627eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 628eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 629eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 630eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 631eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 632eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 633eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 634eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits true if a function needs ProcHook stubs. 635eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 636eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 637eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.NeedProcHookStubs"}} 638eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 639eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 640eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "driver.IsIntercepted" $)}} 641eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 642eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 643eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if not (Macro "IsExtensionInternal" $ext)}}true{{end}} 644eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 645eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 646eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 647eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 648eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 649eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 650eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 651eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of struct ProcHook. 652eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 653eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 654eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineProcHookType"}} 655eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu struct ProcHook { 656eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu enum Type { 657eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu GLOBAL, 658eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu INSTANCE, 659eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu DEVICE, 660eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 661eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 662eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu enum Extension { 663eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$exts := Strings (Macro "driver.InterceptedExtensions") | SplitOn "\n"}} 664eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{range $e := $exts}} 665eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{TrimPrefix "VK_" $e}}, 666eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 667eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 668eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_CORE, // valid bit 669eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_COUNT, 670eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu EXTENSION_UNKNOWN, 671eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 672eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 673eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu const char* name; 674eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Type type; 675eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Extension extension; 676eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 677eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu PFN_vkVoidFunction proc; 678eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu PFN_vkVoidFunction disabled_proc; // nullptr for global hooks 679eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu PFN_vkVoidFunction checked_proc; // nullptr for global/instance hooks 680eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }; 681eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 682eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 683eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 684eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 685eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 686cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits INIT_PROC_EXT macro for vulkan::driver. 687cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 688cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 689cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.C++.DefineInitProcExtMacro"}} 690cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu #define INIT_PROC_EXT(ext, obj, proc) do { \ 691cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu if (data.hal_extensions[ProcHook::ext]) \ 692cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu INIT_PROC(obj, proc); \ 693cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu } while(0) 694cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 695cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 696cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 697cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 698cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 699eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definitions of stub functions for ProcHook. 700eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 701eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 702eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineProcHookStubs"}} 703eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 704eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 705eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "driver.NeedProcHookStubs" $)}} 706eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 707eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext_name := index $ext.Arguments 0}} 708eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 709eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 710eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$unnamed_params := (ForEach $.CallParameters "ParameterType" | JoinWith ", ")}} 711eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 712eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu VKAPI_ATTR {{Node "Type" $.Return}} disabled{{$base}}({{$unnamed_params}}) { 713eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ALOGE("{{$ext_name}} not enabled. {{$.Name}} not executed."); 714eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if not (IsVoid $.Return.Type)}}return VK_SUCCESS;{{end}} 715eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu } 716eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsDeviceDispatched" $)}} 717eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 718eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu VKAPI_ATTR {{Node "Type" $.Return}} checked{{$base}}({{Macro "Parameters" $}}) { 719eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if not (IsVoid $.Return.Type)}}return §{{end}} 720eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 721eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$p0 := index $.CallParameters 0}} 722eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext_hook := Strings ("ProcHook::") (Macro "BaseName" $ext)}} 723eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu (GetData({{$p0.Name}}).hook_extensions[{{$ext_hook}}]) ? § 724eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base}}_Bottom({{Macro "Arguments" $}}) : § 725eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu disabled{{$base}}({{Macro "Arguments" $}}); 726eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu } 727eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 728eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ¶ 729eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 730eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 731eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 732eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 733eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 734eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 735eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of a global ProcHook. 736eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 737eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 738eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineGlobalProcHook"}} 739eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 740eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 741eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 742eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 743eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 744eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 745eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{Error "invalid global extension"}} 746eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 747eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 748eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 749eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 750eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::GLOBAL, 751eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::EXTENSION_CORE, 752eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if eq $.Name "vkEnumerateInstanceExtensionProperties"}} 753eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 754eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 755eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}_Bottom), 756eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 757eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 758eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 759eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 760eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 761eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 762eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 763eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 764eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 765eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of an instance ProcHook. 766eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 767eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 768eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineInstanceProcHook"}} 769eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 770eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 771eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 772eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 773eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 774eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 775eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::INSTANCE, 776eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 777eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 778eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 779eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::{{Macro "BaseName" $ext}}, 780eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 781eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsExtensionInternal" $ext)}} 782eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 783eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 784eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 785eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 786eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}_Bottom), 787eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>(disabled{{$base}}), 788eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 789eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 790eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 791eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::EXTENSION_CORE, 792eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 793eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if eq $.Name "vkGetInstanceProcAddr"}} 794eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 795eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 796eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}_Bottom), 797eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 798eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 799eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 800eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 801eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 802eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 803eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 804eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 805eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 806eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 807eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Emits definition of a device ProcHook. 808eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------- 809eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 810eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "driver.C++.DefineDeviceProcHook"}} 811eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{AssertType $ "Function"}} 812eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 813eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$base := (Macro "BaseName" $)}} 814eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 815eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu { 816eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu "{{$.Name}}", 817eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::DEVICE, 818eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 819eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := GetAnnotation $ "extension"}} 820eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if $ext}} 821eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::{{Macro "BaseName" $ext}}, 822eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 823eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if (Macro "IsExtensionInternal" $ext)}} 824eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 825eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 826eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 827eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 828eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}_Bottom), 829eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>(disabled{{$base}}), 830eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>(checked{{$base}}), 831eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 832eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 833eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu ProcHook::EXTENSION_CORE, 834eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 835eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{if eq $.Name "vkGetDeviceProcAddr"}} 836eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}), 837eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{else}} 838eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu reinterpret_cast<PFN_vkVoidFunction>({{$base}}_Bottom), 839eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 840eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 841eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu nullptr, 842eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 843eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu }, 844eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 845eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 846eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 847eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 8480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 849cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if a function is needed by vulkan::driver. 850cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 851cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 852cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsDriverTableEntry"}} 853cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 854cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 855cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if (Macro "IsFunctionSupported" $)}} 856cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Create functions of dispatchable objects */}} 857cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{ if eq $.Name "vkCreateDevice"}}true 858cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetDeviceQueue"}}true 859cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkAllocateCommandBuffers"}}true 860cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 861cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Destroy functions of dispatchable objects */}} 862cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyInstance"}}true 863cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyDevice"}}true 864cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 865cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* Enumeration of extensions */}} 866cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkEnumerateDeviceExtensionProperties"}}true 867cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 868cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* We cache physical devices in loader.cpp */}} 869cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkEnumeratePhysicalDevices"}}true 870cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 871cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetInstanceProcAddr"}}true 872cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkGetDeviceProcAddr"}}true 873cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 874cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{/* VK_KHR_swapchain->VK_ANDROID_native_buffer translation */}} 875cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkCreateImage"}}true 876cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $.Name "vkDestroyImage"}}true 877cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 878cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 879cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 880cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{$ext := GetAnnotation $ "extension"}} 881cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if $ext}} 882cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{$ext_name := index $ext.Arguments 0}} 883cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{ if eq $ext_name "VK_ANDROID_native_buffer"}}true 884cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{else if eq $ext_name "VK_EXT_debug_report"}}true 885cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 886cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 887cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 888cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 889cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 890cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 891cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 892cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 893cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if an instance-dispatched function is needed by vulkan::driver. 894cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 895cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 896cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsInstanceDriverTableEntry"}} 897cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 898cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 899cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if and (Macro "driver.IsDriverTableEntry" $) (Macro "IsInstanceDispatched" $)}} 900cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu true 901cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 902cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 903cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 904cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 905cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 906cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 907cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu Emits true if a device-dispatched function is needed by vulkan::driver. 908cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------ 909cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu*/}} 910cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{define "driver.IsDeviceDriverTableEntry"}} 911cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{AssertType $ "Function"}} 912cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 913cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{if and (Macro "driver.IsDriverTableEntry" $) (Macro "IsDeviceDispatched" $)}} 914cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu true 915cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu {{end}} 916cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{end}} 917cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 918cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu 919cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu{{/* 920cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu------------------------------------------------------------------------------- 9210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits a function/extension name without the "vk"/"VK_" prefix. 9220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 9230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 9240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "BaseName"}} 9250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if IsFunction $}}{{TrimPrefix "vk" $.Name}} 9260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $.Name "extension"}}{{TrimPrefix "VK_" (index $.Arguments 0)}} 9270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}}{{Error "invalid use of BaseName"}} 9280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 9290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 9300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 9330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 9340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emits a comma-separated list of C parameter names for the given command. 9350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------- 9360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 9370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "Arguments"}} 9380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 9390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ForEach $.CallParameters "ParameterName" | JoinWith ", "}} 9410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 9420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 9450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 9460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 9470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 9480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsGloballyDispatched"}} 9490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 9500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Global")}} 9510c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 9520c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 9530c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 9540c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9550c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9560c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 9570c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 9580c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" for supported functions that undergo table dispatch. Only global 9590c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu functions and functions handled in the loader top without calling into 9600c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu lower layers are not dispatched. 9610c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 9620c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 9630c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsInstanceDispatched"}} 9640c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 9650c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Instance")}} 9660c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 9670c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 9680c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 9690c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9700c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9710c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 9720c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 9730c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" for supported functions that can have device-specific dispatch. 9740c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 9750c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 9760c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsDeviceDispatched"}} 9770c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 9780c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if and (Macro "IsFunctionSupported" $) (eq (Macro "Vtbl" $) "Device")}} 9790c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 9800c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 9810c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 9820c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9830c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9840c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 9850c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 9860c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" if a function is core or from a supportable extension. 9870c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 9880c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 9890c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsFunctionSupported"}} 9900c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 9910c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not (GetAnnotation $ "pfn")}} 9920c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 9930c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if not $ext}}true 9940c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if not (Macro "IsExtensionBlacklisted" $ext)}}true 9950c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 9960c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 9970c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 9980c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 9990c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10000c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10010c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10020c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Decides whether a function should be exported from the Android Vulkan 10030c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu library. Functions in the core API and in loader extensions are exported. 10040c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10050c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10060c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsFunctionExported"}} 10070c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{AssertType $ "Function"}} 10080c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10090c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if (Macro "IsFunctionSupported" $)}} 10100c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := GetAnnotation $ "extension"}} 10110c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{if $ext}} 10120c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{Macro "IsExtensionExported" $ext}} 10130c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else}} 10140c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu true 10150c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10160c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10170c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10180c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10190c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10200c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10210c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10220c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Emit "true" if an extension is unsupportable on Android. 10230c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10240c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10250c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsExtensionBlacklisted"}} 10260c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := index $.Arguments 0}} 10270c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $ext "VK_KHR_display"}}true 10280c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_display_swapchain"}}true 10290c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_xlib_surface"}}true 10300c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_xcb_surface"}}true 10310c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_wayland_surface"}}true 10320c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_mir_surface"}}true 10330c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_win32_surface"}}true 10340c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10350c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 10360c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10370c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu 10380c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{/* 10390c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10400c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu Reports whether an extension is implemented entirely by the loader, 10410c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu so drivers should not enumerate it. 10420c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu------------------------------------------------------------------------------ 10430c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu*/}} 10440c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{define "IsExtensionExported"}} 10450c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{$ext := index $.Arguments 0}} 10460c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{ if eq $ext "VK_KHR_surface"}}true 10470c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_swapchain"}}true 10480c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{else if eq $ext "VK_KHR_android_surface"}}true 10490c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu {{end}} 10500c2032490b80178ec823bf22a7f5d08398851cc3Chia-I Wu{{end}} 1051eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 1052eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu 1053eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{/* 1054eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 1055eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu Reports whether an extension is internal to the loader and drivers, 1056eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu so the loader should not enumerate it. 1057eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu------------------------------------------------------------------------------ 1058eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu*/}} 1059eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{define "IsExtensionInternal"}} 1060eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{$ext := index $.Arguments 0}} 1061eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{ if eq $ext "VK_ANDROID_native_buffer"}}true 1062eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu {{end}} 1063eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu{{end}} 1064