1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * This file is part of FFmpeg.
3cabdff1aSopenharmony_ci *
4cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
5cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
6cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
7cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
8cabdff1aSopenharmony_ci *
9cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
10cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
11cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12cabdff1aSopenharmony_ci * Lesser General Public License for more details.
13cabdff1aSopenharmony_ci *
14cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
15cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
16cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17cabdff1aSopenharmony_ci */
18cabdff1aSopenharmony_ci
19cabdff1aSopenharmony_ci#ifndef AVUTIL_VULKAN_FUNCTIONS_H
20cabdff1aSopenharmony_ci#define AVUTIL_VULKAN_FUNCTIONS_H
21cabdff1aSopenharmony_ci
22cabdff1aSopenharmony_ci#define VK_NO_PROTOTYPES
23cabdff1aSopenharmony_ci#define VK_ENABLE_BETA_EXTENSIONS
24cabdff1aSopenharmony_ci
25cabdff1aSopenharmony_ci#include "hwcontext.h"
26cabdff1aSopenharmony_ci#include "hwcontext_vulkan.h"
27cabdff1aSopenharmony_ci
28cabdff1aSopenharmony_ci/* An enum of bitflags for every optional extension we need */
29cabdff1aSopenharmony_citypedef enum FFVulkanExtensions {
30cabdff1aSopenharmony_ci    FF_VK_EXT_EXTERNAL_DMABUF_MEMORY = 1ULL <<  0, /* VK_EXT_external_memory_dma_buf */
31cabdff1aSopenharmony_ci    FF_VK_EXT_DRM_MODIFIER_FLAGS     = 1ULL <<  1, /* VK_EXT_image_drm_format_modifier */
32cabdff1aSopenharmony_ci    FF_VK_EXT_EXTERNAL_FD_MEMORY     = 1ULL <<  2, /* VK_KHR_external_memory_fd */
33cabdff1aSopenharmony_ci    FF_VK_EXT_EXTERNAL_FD_SEM        = 1ULL <<  3, /* VK_KHR_external_semaphore_fd */
34cabdff1aSopenharmony_ci    FF_VK_EXT_EXTERNAL_HOST_MEMORY   = 1ULL <<  4, /* VK_EXT_external_memory_host */
35cabdff1aSopenharmony_ci    FF_VK_EXT_DEBUG_UTILS            = 1ULL <<  5, /* VK_EXT_debug_utils */
36cabdff1aSopenharmony_ci#ifdef _WIN32
37cabdff1aSopenharmony_ci    FF_VK_EXT_EXTERNAL_WIN32_MEMORY  = 1ULL <<  6, /* VK_KHR_external_memory_win32 */
38cabdff1aSopenharmony_ci    FF_VK_EXT_EXTERNAL_WIN32_SEM     = 1ULL <<  7, /* VK_KHR_external_semaphore_win32 */
39cabdff1aSopenharmony_ci#endif
40cabdff1aSopenharmony_ci
41cabdff1aSopenharmony_ci    FF_VK_EXT_NO_FLAG                = 1ULL << 31,
42cabdff1aSopenharmony_ci} FFVulkanExtensions;
43cabdff1aSopenharmony_ci
44cabdff1aSopenharmony_ci/* Macro containing every function that we utilize in our codebase */
45cabdff1aSopenharmony_ci#define FN_LIST(MACRO)                                                                   \
46cabdff1aSopenharmony_ci    /* Instance */                                                                       \
47cabdff1aSopenharmony_ci    MACRO(0, 0, FF_VK_EXT_NO_FLAG,              EnumerateInstanceExtensionProperties)    \
48cabdff1aSopenharmony_ci    MACRO(0, 0, FF_VK_EXT_NO_FLAG,              EnumerateInstanceLayerProperties)        \
49cabdff1aSopenharmony_ci    MACRO(0, 0, FF_VK_EXT_NO_FLAG,              CreateInstance)                          \
50cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              DestroyInstance)                         \
51cabdff1aSopenharmony_ci                                                                                         \
52cabdff1aSopenharmony_ci    /* Debug */                                                                          \
53cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              CreateDebugUtilsMessengerEXT)            \
54cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              DestroyDebugUtilsMessengerEXT)           \
55cabdff1aSopenharmony_ci                                                                                         \
56cabdff1aSopenharmony_ci    /* Device */                                                                         \
57cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              GetDeviceProcAddr)                       \
58cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              CreateDevice)                            \
59cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              GetPhysicalDeviceFeatures2)              \
60cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              GetPhysicalDeviceProperties)             \
61cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              DeviceWaitIdle)                          \
62cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              DestroyDevice)                           \
63cabdff1aSopenharmony_ci                                                                                         \
64cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              EnumeratePhysicalDevices)                \
65cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              EnumerateDeviceExtensionProperties)      \
66cabdff1aSopenharmony_ci                                                                                         \
67cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              GetPhysicalDeviceProperties2)            \
68cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              GetPhysicalDeviceMemoryProperties)       \
69cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              GetPhysicalDeviceFormatProperties2)      \
70cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              GetPhysicalDeviceImageFormatProperties2) \
71cabdff1aSopenharmony_ci    MACRO(1, 0, FF_VK_EXT_NO_FLAG,              GetPhysicalDeviceQueueFamilyProperties)  \
72cabdff1aSopenharmony_ci                                                                                         \
73cabdff1aSopenharmony_ci    /* Command pool */                                                                   \
74cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateCommandPool)                       \
75cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyCommandPool)                      \
76cabdff1aSopenharmony_ci                                                                                         \
77cabdff1aSopenharmony_ci    /* Command buffer */                                                                 \
78cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              AllocateCommandBuffers)                  \
79cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              BeginCommandBuffer)                      \
80cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              EndCommandBuffer)                        \
81cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              FreeCommandBuffers)                      \
82cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CmdDispatch)                             \
83cabdff1aSopenharmony_ci                                                                                         \
84cabdff1aSopenharmony_ci    /* Queue */                                                                          \
85cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              GetDeviceQueue)                          \
86cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              QueueSubmit)                             \
87cabdff1aSopenharmony_ci                                                                                         \
88cabdff1aSopenharmony_ci    /* Fences */                                                                         \
89cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateFence)                             \
90cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              WaitForFences)                           \
91cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              ResetFences)                             \
92cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyFence)                            \
93cabdff1aSopenharmony_ci                                                                                         \
94cabdff1aSopenharmony_ci    /* Semaphores */                                                                     \
95cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_EXTERNAL_FD_SEM,      GetSemaphoreFdKHR)                       \
96cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateSemaphore)                         \
97cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              WaitSemaphores)                          \
98cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroySemaphore)                        \
99cabdff1aSopenharmony_ci                                                                                         \
100cabdff1aSopenharmony_ci    /* Memory */                                                                         \
101cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_EXTERNAL_FD_MEMORY,   GetMemoryFdKHR)                          \
102cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              GetMemoryFdPropertiesKHR)                \
103cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_EXTERNAL_HOST_MEMORY, GetMemoryHostPointerPropertiesEXT)       \
104cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              AllocateMemory)                          \
105cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              MapMemory)                               \
106cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              FlushMappedMemoryRanges)                 \
107cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              InvalidateMappedMemoryRanges)            \
108cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              UnmapMemory)                             \
109cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              FreeMemory)                              \
110cabdff1aSopenharmony_ci                                                                                         \
111cabdff1aSopenharmony_ci    /* Commands */                                                                       \
112cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CmdBindDescriptorSets)                   \
113cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CmdPushConstants)                        \
114cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CmdBindPipeline)                         \
115cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CmdPipelineBarrier)                      \
116cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CmdCopyBufferToImage)                    \
117cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CmdCopyImageToBuffer)                    \
118cabdff1aSopenharmony_ci                                                                                         \
119cabdff1aSopenharmony_ci    /* Buffer */                                                                         \
120cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              GetBufferMemoryRequirements2)            \
121cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateBuffer)                            \
122cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              BindBufferMemory)                        \
123cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyBuffer)                           \
124cabdff1aSopenharmony_ci                                                                                         \
125cabdff1aSopenharmony_ci    /* Image */                                                                          \
126cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_DRM_MODIFIER_FLAGS,   GetImageDrmFormatModifierPropertiesEXT)  \
127cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              GetImageMemoryRequirements2)             \
128cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateImage)                             \
129cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              BindImageMemory2)                        \
130cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              GetImageSubresourceLayout)               \
131cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyImage)                            \
132cabdff1aSopenharmony_ci                                                                                         \
133cabdff1aSopenharmony_ci    /* ImageView */                                                                      \
134cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateImageView)                         \
135cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyImageView)                        \
136cabdff1aSopenharmony_ci                                                                                         \
137cabdff1aSopenharmony_ci    /* DescriptorSet */                                                                  \
138cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateDescriptorSetLayout)               \
139cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              AllocateDescriptorSets)                  \
140cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateDescriptorPool)                    \
141cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyDescriptorPool)                   \
142cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyDescriptorSetLayout)              \
143cabdff1aSopenharmony_ci                                                                                         \
144cabdff1aSopenharmony_ci    /* DescriptorUpdateTemplate */                                                       \
145cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              UpdateDescriptorSetWithTemplate)         \
146cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateDescriptorUpdateTemplate)          \
147cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyDescriptorUpdateTemplate)         \
148cabdff1aSopenharmony_ci                                                                                         \
149cabdff1aSopenharmony_ci    /* Pipeline */                                                                       \
150cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreatePipelineLayout)                    \
151cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyPipelineLayout)                   \
152cabdff1aSopenharmony_ci                                                                                         \
153cabdff1aSopenharmony_ci    /* PipelineLayout */                                                                 \
154cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateComputePipelines)                  \
155cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyPipeline)                         \
156cabdff1aSopenharmony_ci                                                                                         \
157cabdff1aSopenharmony_ci    /* Sampler */                                                                        \
158cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateSampler)                           \
159cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroySampler)                          \
160cabdff1aSopenharmony_ci                                                                                         \
161cabdff1aSopenharmony_ci    /* Shaders */                                                                        \
162cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              CreateShaderModule)                      \
163cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyShaderModule)
164cabdff1aSopenharmony_ci
165cabdff1aSopenharmony_ci/* Macro containing every win32 specific function that we utilize in our codebase */
166cabdff1aSopenharmony_ci#define FN_LIST_WIN32(MACRO)                                                             \
167cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_EXTERNAL_WIN32_SEM,    GetSemaphoreWin32HandleKHR)             \
168cabdff1aSopenharmony_ci    MACRO(1, 1, FF_VK_EXT_EXTERNAL_WIN32_MEMORY, GetMemoryWin32HandleKHR)
169cabdff1aSopenharmony_ci
170cabdff1aSopenharmony_ci/* Macro to turn a function name into a definition */
171cabdff1aSopenharmony_ci#define PFN_DEF(req_inst, req_dev, ext_flag, name) \
172cabdff1aSopenharmony_ci    PFN_vk##name name;
173cabdff1aSopenharmony_ci
174cabdff1aSopenharmony_ci/* Structure with the definition of all listed functions */
175cabdff1aSopenharmony_citypedef struct FFVulkanFunctions {
176cabdff1aSopenharmony_ci    FN_LIST(PFN_DEF)
177cabdff1aSopenharmony_ci#ifdef _WIN32
178cabdff1aSopenharmony_ci    FN_LIST_WIN32(PFN_DEF)
179cabdff1aSopenharmony_ci#endif
180cabdff1aSopenharmony_ci} FFVulkanFunctions;
181cabdff1aSopenharmony_ci
182cabdff1aSopenharmony_ci#endif /* AVUTIL_VULKAN_FUNCTIONS_H */
183