1 /*
2 * This file is part of FFmpeg.
3 *
4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19 #ifndef AVUTIL_VULKAN_FUNCTIONS_H
20 #define AVUTIL_VULKAN_FUNCTIONS_H
21
22 #define VK_NO_PROTOTYPES
23 #define VK_ENABLE_BETA_EXTENSIONS
24
27
28 /* An enum of bitflags for every optional extension we need */
36 #ifdef _WIN32
37 FF_VK_EXT_EXTERNAL_WIN32_MEMORY = 1ULL << 6, /* VK_KHR_external_memory_win32 */
38 FF_VK_EXT_EXTERNAL_WIN32_SEM = 1ULL << 7, /* VK_KHR_external_semaphore_win32 */
39 #endif
52
57
60
61 /* Macro containing every function that we utilize in our codebase */
62 #define FN_LIST(MACRO) \
63 /* Instance */ \
64 MACRO(0, 0, FF_VK_EXT_NO_FLAG, EnumerateInstanceExtensionProperties) \
65 MACRO(0, 0, FF_VK_EXT_NO_FLAG, EnumerateInstanceLayerProperties) \
66 MACRO(0, 0, FF_VK_EXT_NO_FLAG, CreateInstance) \
67 MACRO(1, 0, FF_VK_EXT_NO_FLAG, DestroyInstance) \
68 \
69 /* Debug */ \
70 MACRO(1, 0, FF_VK_EXT_NO_FLAG, CreateDebugUtilsMessengerEXT) \
71 MACRO(1, 0, FF_VK_EXT_NO_FLAG, DestroyDebugUtilsMessengerEXT) \
72 \
73 /* Device */ \
74 MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetDeviceProcAddr) \
75 MACRO(1, 0, FF_VK_EXT_NO_FLAG, CreateDevice) \
76 MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceFeatures2) \
77 MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceProperties) \
78 MACRO(1, 0, FF_VK_EXT_VIDEO_QUEUE, GetPhysicalDeviceVideoCapabilitiesKHR) \
79 MACRO(1, 0, FF_VK_EXT_VIDEO_QUEUE, GetPhysicalDeviceVideoFormatPropertiesKHR) \
80 MACRO(1, 0, FF_VK_EXT_NO_FLAG, DeviceWaitIdle) \
81 MACRO(1, 0, FF_VK_EXT_NO_FLAG, DestroyDevice) \
82 \
83 MACRO(1, 0, FF_VK_EXT_NO_FLAG, EnumeratePhysicalDevices) \
84 MACRO(1, 0, FF_VK_EXT_NO_FLAG, EnumerateDeviceExtensionProperties) \
85 \
86 MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceProperties2) \
87 MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceMemoryProperties) \
88 MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceFormatProperties2) \
89 MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceImageFormatProperties2) \
90 MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceQueueFamilyProperties) \
91 MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceQueueFamilyProperties2) \
92 MACRO(1, 0, FF_VK_EXT_COOP_MATRIX, GetPhysicalDeviceCooperativeMatrixPropertiesKHR) \
93 \
94 /* Command pool */ \
95 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateCommandPool) \
96 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyCommandPool) \
97 \
98 /* Command buffer */ \
99 MACRO(1, 1, FF_VK_EXT_NO_FLAG, AllocateCommandBuffers) \
100 MACRO(1, 1, FF_VK_EXT_NO_FLAG, BeginCommandBuffer) \
101 MACRO(1, 1, FF_VK_EXT_NO_FLAG, EndCommandBuffer) \
102 MACRO(1, 1, FF_VK_EXT_NO_FLAG, FreeCommandBuffers) \
103 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdDispatch) \
104 \
105 /* Queue */ \
106 MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetDeviceQueue) \
107 MACRO(1, 1, FF_VK_EXT_NO_FLAG, QueueSubmit) \
108 MACRO(1, 1, FF_VK_EXT_NO_FLAG, QueueSubmit2) \
109 \
110 /* Fences */ \
111 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateFence) \
112 MACRO(1, 1, FF_VK_EXT_NO_FLAG, WaitForFences) \
113 MACRO(1, 1, FF_VK_EXT_NO_FLAG, ResetFences) \
114 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyFence) \
115 \
116 /* Semaphores */ \
117 MACRO(1, 1, FF_VK_EXT_EXTERNAL_FD_SEM, GetSemaphoreFdKHR) \
118 MACRO(1, 1, FF_VK_EXT_EXTERNAL_FD_SEM, ImportSemaphoreFdKHR) \
119 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateSemaphore) \
120 MACRO(1, 1, FF_VK_EXT_NO_FLAG, WaitSemaphores) \
121 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroySemaphore) \
122 \
123 /* Memory */ \
124 MACRO(1, 1, FF_VK_EXT_EXTERNAL_FD_MEMORY, GetMemoryFdKHR) \
125 MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetMemoryFdPropertiesKHR) \
126 MACRO(1, 1, FF_VK_EXT_EXTERNAL_HOST_MEMORY, GetMemoryHostPointerPropertiesEXT) \
127 MACRO(1, 1, FF_VK_EXT_NO_FLAG, AllocateMemory) \
128 MACRO(1, 1, FF_VK_EXT_NO_FLAG, MapMemory) \
129 MACRO(1, 1, FF_VK_EXT_NO_FLAG, FlushMappedMemoryRanges) \
130 MACRO(1, 1, FF_VK_EXT_NO_FLAG, InvalidateMappedMemoryRanges) \
131 MACRO(1, 1, FF_VK_EXT_NO_FLAG, UnmapMemory) \
132 MACRO(1, 1, FF_VK_EXT_NO_FLAG, FreeMemory) \
133 \
134 /* Commands */ \
135 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdBindDescriptorSets) \
136 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdPushConstants) \
137 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdBindPipeline) \
138 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdPipelineBarrier) \
139 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdCopyBufferToImage) \
140 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdCopyImageToBuffer) \
141 \
142 /* Buffer */ \
143 MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetBufferMemoryRequirements2) \
144 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateBuffer) \
145 MACRO(1, 1, FF_VK_EXT_NO_FLAG, BindBufferMemory) \
146 MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetBufferDeviceAddress) \
147 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdFillBuffer) \
148 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyBuffer) \
149 \
150 /* Image */ \
151 MACRO(1, 1, FF_VK_EXT_DRM_MODIFIER_FLAGS, GetImageDrmFormatModifierPropertiesEXT) \
152 MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetImageMemoryRequirements2) \
153 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateImage) \
154 MACRO(1, 1, FF_VK_EXT_NO_FLAG, BindImageMemory2) \
155 MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetImageSubresourceLayout) \
156 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyImage) \
157 \
158 /* ImageView */ \
159 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateImageView) \
160 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyImageView) \
161 \
162 /* DescriptorSet */ \
163 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateDescriptorSetLayout) \
164 MACRO(1, 1, FF_VK_EXT_NO_FLAG, AllocateDescriptorSets) \
165 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateDescriptorPool) \
166 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyDescriptorPool) \
167 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyDescriptorSetLayout) \
168 \
169 /* Descriptor buffers */ \
170 MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER, GetDescriptorSetLayoutSizeEXT) \
171 MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER, GetDescriptorSetLayoutBindingOffsetEXT) \
172 MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER, GetDescriptorEXT) \
173 MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER, CmdBindDescriptorBuffersEXT) \
174 MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER, CmdSetDescriptorBufferOffsetsEXT) \
175 \
176 /* DescriptorUpdateTemplate */ \
177 MACRO(1, 1, FF_VK_EXT_NO_FLAG, UpdateDescriptorSetWithTemplate) \
178 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateDescriptorUpdateTemplate) \
179 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyDescriptorUpdateTemplate) \
180 \
181 /* Descriptors */ \
182 MACRO(1, 1, FF_VK_EXT_NO_FLAG, UpdateDescriptorSets) \
183 MACRO(1, 1, FF_VK_EXT_PUSH_DESCRIPTOR, CmdPushDescriptorSetKHR) \
184 \
185 /* Queries */ \
186 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateQueryPool) \
187 MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetQueryPoolResults) \
188 MACRO(1, 1, FF_VK_EXT_NO_FLAG, ResetQueryPool) \
189 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdBeginQuery) \
190 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdEndQuery) \
191 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdResetQueryPool) \
192 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyQueryPool) \
193 \
194 /* sync2 */ \
195 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdPipelineBarrier2) \
196 \
197 /* Video queue */ \
198 MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CreateVideoSessionKHR) \
199 MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CreateVideoSessionParametersKHR) \
200 MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, GetVideoSessionMemoryRequirementsKHR) \
201 MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, BindVideoSessionMemoryKHR) \
202 MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CmdBeginVideoCodingKHR) \
203 MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CmdControlVideoCodingKHR) \
204 MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CmdEndVideoCodingKHR) \
205 MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, DestroyVideoSessionParametersKHR) \
206 MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, DestroyVideoSessionKHR) \
207 \
208 /* Video decoding */ \
209 MACRO(1, 1, FF_VK_EXT_VIDEO_DECODE_QUEUE, CmdDecodeVideoKHR) \
210 \
211 /* Video encoding */ \
212 MACRO(1, 1, FF_VK_EXT_VIDEO_ENCODE_QUEUE, CmdEncodeVideoKHR) \
213 MACRO(1, 1, FF_VK_EXT_VIDEO_ENCODE_QUEUE, GetEncodedVideoSessionParametersKHR) \
214 MACRO(1, 0, FF_VK_EXT_VIDEO_ENCODE_QUEUE, GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR) \
215 \
216 /* Pipeline */ \
217 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreatePipelineLayout) \
218 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyPipelineLayout) \
219 \
220 /* PipelineLayout */ \
221 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateComputePipelines) \
222 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyPipeline) \
223 \
224 /* Sampler */ \
225 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateSamplerYcbcrConversion) \
226 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroySamplerYcbcrConversion) \
227 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateSampler) \
228 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroySampler) \
229 \
230 /* Optical flow */ \
231 MACRO(1, 1, FF_VK_EXT_OPTICAL_FLOW, BindOpticalFlowSessionImageNV) \
232 MACRO(1, 1, FF_VK_EXT_OPTICAL_FLOW, CmdOpticalFlowExecuteNV) \
233 MACRO(1, 1, FF_VK_EXT_OPTICAL_FLOW, CreateOpticalFlowSessionNV) \
234 MACRO(1, 1, FF_VK_EXT_OPTICAL_FLOW, DestroyOpticalFlowSessionNV) \
235 MACRO(1, 0, FF_VK_EXT_OPTICAL_FLOW, GetPhysicalDeviceOpticalFlowImageFormatsNV)\
236 \
237 /* Shaders */ \
238 MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateShaderModule) \
239 MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyShaderModule) \
240 MACRO(1, 1, FF_VK_EXT_SHADER_OBJECT, CmdBindShadersEXT) \
241 MACRO(1, 1, FF_VK_EXT_SHADER_OBJECT, CreateShadersEXT) \
242 MACRO(1, 1, FF_VK_EXT_SHADER_OBJECT, DestroyShaderEXT) \
243 MACRO(1, 1, FF_VK_EXT_SHADER_OBJECT, GetShaderBinaryDataEXT)
244
245 /* Macro containing every win32 specific function that we utilize in our codebase */
246 #define FN_LIST_WIN32(MACRO) \
247 MACRO(1, 1, FF_VK_EXT_EXTERNAL_WIN32_SEM, GetSemaphoreWin32HandleKHR) \
248 MACRO(1, 1, FF_VK_EXT_EXTERNAL_WIN32_MEMORY, GetMemoryWin32HandleKHR)
249
250 /* Macro to turn a function name into a definition */
251 #define PFN_DEF(req_inst, req_dev, ext_flag, name) \
252 PFN_vk##name name;
253
254 /* Structure with the definition of all listed functions */
257 #ifdef _WIN32
259 #endif
261
262 #endif /* AVUTIL_VULKAN_FUNCTIONS_H */