comparison fuhtark_test/Vulkan-Headers-1.4.334/include/vulkan/vk_layer.h @ 1501:f40d9d814c08 default tip

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