| #!/usr/bin/python3 -i |
| # |
| # Copyright 2023 The Khronos Group Inc. |
| # Copyright 2023 Valve Corporation |
| # Copyright 2023 LunarG, Inc. |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| import os |
| from generators.base_generator import BaseGenerator |
| |
| class LayerDispatchTableOutputGenerator(BaseGenerator): |
| def __init__(self): |
| BaseGenerator.__init__(self) |
| |
| def generate(self): |
| out = [] |
| out.append(f'''// *** THIS FILE IS GENERATED - DO NOT EDIT *** |
| // See {os.path.basename(__file__)} for modifications |
| // Copyright 2023 The Khronos Group Inc. |
| // Copyright 2023 Valve Corporation |
| // Copyright 2023 LunarG, Inc. |
| // |
| // SPDX-License-Identifier: Apache-2.0 |
| \n''') |
| out.append('// NOLINTBEGIN') # Wrap for clang-tidy to ignore |
| |
| out.append(''' |
| #pragma once |
| |
| typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); |
| ''') |
| out.append(''' |
| // Instance function pointer dispatch table |
| typedef struct VkLayerInstanceDispatchTable_ { |
| PFN_GetPhysicalDeviceProcAddr GetPhysicalDeviceProcAddr; |
| |
| ''') |
| for command in [x for x in self.vk.commands.values() if x.instance]: |
| out.extend([f'#ifdef {command.protect}\n'] if command.protect else []) |
| out.append(f' PFN_{command.name} {command.name[2:]};\n') |
| out.extend([f'#endif //{command.protect}\n'] if command.protect else []) |
| out.append('} VkLayerInstanceDispatchTable;\n') |
| |
| out.append(''' |
| // Device function pointer dispatch table |
| typedef struct VkLayerDispatchTable_ { |
| ''') |
| for command in [x for x in self.vk.commands.values() if x.device]: |
| out.extend([f'#ifdef {command.protect}\n'] if command.protect else []) |
| out.append(f' PFN_{command.name} {command.name[2:]};\n') |
| out.extend([f'#endif //{command.protect}\n'] if command.protect else []) |
| out.append('} VkLayerDispatchTable;\n') |
| |
| out.append('// NOLINTEND') # Wrap for clang-tidy to ignore |
| self.write("".join(out)) |