Mercurial > games > semicongine
comparison fuhtark_test/Vulkan-Headers-1.4.334/include/vulkan/vk_layer.h @ 1501:f40d9d814c08 default tip main
did: correct vulkan-api generator
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 23:34:29 +0700 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1500:91c8c3b7cbf0 | 1501:f40d9d814c08 |
|---|---|
| 1 /* | |
| 2 * Copyright 2015-2023 The Khronos Group Inc. | |
| 3 * Copyright 2015-2023 Valve Corporation | |
| 4 * Copyright 2015-2023 LunarG, Inc. | |
| 5 * | |
| 6 * SPDX-License-Identifier: Apache-2.0 | |
| 7 */ | |
| 8 #pragma once | |
| 9 | |
| 10 /* Need to define dispatch table | |
| 11 * Core struct can then have ptr to dispatch table at the top | |
| 12 * Along with object ptrs for current and next OBJ | |
| 13 */ | |
| 14 | |
| 15 #include "vulkan_core.h" | |
| 16 | |
| 17 #define MAX_NUM_UNKNOWN_EXTS 250 | |
| 18 | |
| 19 // Loader-Layer version negotiation API. Versions add the following features: | |
| 20 // Versions 0/1 - Initial. Doesn't support vk_layerGetPhysicalDeviceProcAddr | |
| 21 // or vk_icdNegotiateLoaderLayerInterfaceVersion. | |
| 22 // Version 2 - Add support for vk_layerGetPhysicalDeviceProcAddr and | |
| 23 // vk_icdNegotiateLoaderLayerInterfaceVersion. | |
| 24 #define CURRENT_LOADER_LAYER_INTERFACE_VERSION 2 | |
| 25 #define MIN_SUPPORTED_LOADER_LAYER_INTERFACE_VERSION 1 | |
| 26 | |
| 27 #define VK_CURRENT_CHAIN_VERSION 1 | |
| 28 | |
| 29 // Typedef for use in the interfaces below | |
| 30 typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); | |
| 31 | |
| 32 // Version negotiation values | |
| 33 typedef enum VkNegotiateLayerStructType { | |
| 34 LAYER_NEGOTIATE_UNINTIALIZED = 0, | |
| 35 LAYER_NEGOTIATE_INTERFACE_STRUCT = 1, | |
| 36 } VkNegotiateLayerStructType; | |
| 37 | |
| 38 // Version negotiation structures | |
| 39 typedef struct VkNegotiateLayerInterface { | |
| 40 VkNegotiateLayerStructType sType; | |
| 41 void *pNext; | |
| 42 uint32_t loaderLayerInterfaceVersion; | |
| 43 PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr; | |
| 44 PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr; | |
| 45 PFN_GetPhysicalDeviceProcAddr pfnGetPhysicalDeviceProcAddr; | |
| 46 } VkNegotiateLayerInterface; | |
| 47 | |
| 48 // Version negotiation functions | |
| 49 typedef VkResult (VKAPI_PTR *PFN_vkNegotiateLoaderLayerInterfaceVersion)(VkNegotiateLayerInterface *pVersionStruct); | |
| 50 | |
| 51 // Function prototype for unknown physical device extension command | |
| 52 typedef VkResult(VKAPI_PTR *PFN_PhysDevExt)(VkPhysicalDevice phys_device); | |
| 53 | |
| 54 // ------------------------------------------------------------------------------------------------ | |
| 55 // CreateInstance and CreateDevice support structures | |
| 56 | |
| 57 /* Sub type of structure for instance and device loader ext of CreateInfo. | |
| 58 * When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO | |
| 59 * or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO | |
| 60 * then VkLayerFunction indicates struct type pointed to by pNext | |
| 61 */ | |
| 62 typedef enum VkLayerFunction_ { | |
| 63 VK_LAYER_LINK_INFO = 0, | |
| 64 VK_LOADER_DATA_CALLBACK = 1, | |
| 65 VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2, | |
| 66 VK_LOADER_FEATURES = 3, | |
| 67 } VkLayerFunction; | |
| 68 | |
| 69 typedef struct VkLayerInstanceLink_ { | |
| 70 struct VkLayerInstanceLink_ *pNext; | |
| 71 PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; | |
| 72 PFN_GetPhysicalDeviceProcAddr pfnNextGetPhysicalDeviceProcAddr; | |
| 73 } VkLayerInstanceLink; | |
| 74 | |
| 75 /* | |
| 76 * When creating the device chain the loader needs to pass | |
| 77 * down information about it's device structure needed at | |
| 78 * the end of the chain. Passing the data via the | |
| 79 * VkLayerDeviceInfo avoids issues with finding the | |
| 80 * exact instance being used. | |
| 81 */ | |
| 82 typedef struct VkLayerDeviceInfo_ { | |
| 83 void *device_info; | |
| 84 PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; | |
| 85 } VkLayerDeviceInfo; | |
| 86 | |
| 87 typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance, | |
| 88 void *object); | |
| 89 typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device, | |
| 90 void *object); | |
| 91 typedef VkResult (VKAPI_PTR *PFN_vkLayerCreateDevice)(VkInstance instance, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, | |
| 92 const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA); | |
| 93 typedef void (VKAPI_PTR *PFN_vkLayerDestroyDevice)(VkDevice physicalDevice, const VkAllocationCallbacks *pAllocator, PFN_vkDestroyDevice destroyFunction); | |
| 94 | |
| 95 typedef enum VkLoaderFeastureFlagBits { | |
| 96 VK_LOADER_FEATURE_PHYSICAL_DEVICE_SORTING = 0x00000001, | |
| 97 } VkLoaderFlagBits; | |
| 98 typedef VkFlags VkLoaderFeatureFlags; | |
| 99 | |
| 100 typedef struct { | |
| 101 VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO | |
| 102 const void *pNext; | |
| 103 VkLayerFunction function; | |
| 104 union { | |
| 105 VkLayerInstanceLink *pLayerInfo; | |
| 106 PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData; | |
| 107 struct { | |
| 108 PFN_vkLayerCreateDevice pfnLayerCreateDevice; | |
| 109 PFN_vkLayerDestroyDevice pfnLayerDestroyDevice; | |
| 110 } layerDevice; | |
| 111 VkLoaderFeatureFlags loaderFeatures; | |
| 112 } u; | |
| 113 } VkLayerInstanceCreateInfo; | |
| 114 | |
| 115 typedef struct VkLayerDeviceLink_ { | |
| 116 struct VkLayerDeviceLink_ *pNext; | |
| 117 PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; | |
| 118 PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr; | |
| 119 } VkLayerDeviceLink; | |
| 120 | |
| 121 typedef struct { | |
| 122 VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO | |
| 123 const void *pNext; | |
| 124 VkLayerFunction function; | |
| 125 union { | |
| 126 VkLayerDeviceLink *pLayerInfo; | |
| 127 PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData; | |
| 128 } u; | |
| 129 } VkLayerDeviceCreateInfo; | |
| 130 | |
| 131 #ifdef __cplusplus | |
| 132 extern "C" { | |
| 133 #endif | |
| 134 | |
| 135 VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct); | |
| 136 | |
| 137 typedef enum VkChainType { | |
| 138 VK_CHAIN_TYPE_UNKNOWN = 0, | |
| 139 VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES = 1, | |
| 140 VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES = 2, | |
| 141 VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION = 3, | |
| 142 } VkChainType; | |
| 143 | |
| 144 typedef struct VkChainHeader { | |
| 145 VkChainType type; | |
| 146 uint32_t version; | |
| 147 uint32_t size; | |
| 148 } VkChainHeader; | |
| 149 | |
| 150 typedef struct VkEnumerateInstanceExtensionPropertiesChain { | |
| 151 VkChainHeader header; | |
| 152 VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceExtensionPropertiesChain *, const char *, uint32_t *, | |
| 153 VkExtensionProperties *); | |
| 154 const struct VkEnumerateInstanceExtensionPropertiesChain *pNextLink; | |
| 155 | |
| 156 #if defined(__cplusplus) | |
| 157 inline VkResult CallDown(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) const { | |
| 158 return pfnNextLayer(pNextLink, pLayerName, pPropertyCount, pProperties); | |
| 159 } | |
| 160 #endif | |
| 161 } VkEnumerateInstanceExtensionPropertiesChain; | |
| 162 | |
| 163 typedef struct VkEnumerateInstanceLayerPropertiesChain { | |
| 164 VkChainHeader header; | |
| 165 VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceLayerPropertiesChain *, uint32_t *, VkLayerProperties *); | |
| 166 const struct VkEnumerateInstanceLayerPropertiesChain *pNextLink; | |
| 167 | |
| 168 #if defined(__cplusplus) | |
| 169 inline VkResult CallDown(uint32_t *pPropertyCount, VkLayerProperties *pProperties) const { | |
| 170 return pfnNextLayer(pNextLink, pPropertyCount, pProperties); | |
| 171 } | |
| 172 #endif | |
| 173 } VkEnumerateInstanceLayerPropertiesChain; | |
| 174 | |
| 175 typedef struct VkEnumerateInstanceVersionChain { | |
| 176 VkChainHeader header; | |
| 177 VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceVersionChain *, uint32_t *); | |
| 178 const struct VkEnumerateInstanceVersionChain *pNextLink; | |
| 179 | |
| 180 #if defined(__cplusplus) | |
| 181 inline VkResult CallDown(uint32_t *pApiVersion) const { | |
| 182 return pfnNextLayer(pNextLink, pApiVersion); | |
| 183 } | |
| 184 #endif | |
| 185 } VkEnumerateInstanceVersionChain; | |
| 186 | |
| 187 #ifdef __cplusplus | |
| 188 } | |
| 189 #endif |
