| /* | |
| * This file is part of FFmpeg. | |
| * | |
| * FFmpeg is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * FFmpeg is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with FFmpeg; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| */ | |
| #ifndef AVUTIL_VULKAN_FUNCTIONS_H | |
| #define AVUTIL_VULKAN_FUNCTIONS_H | |
| #define VK_NO_PROTOTYPES | |
| #define VK_ENABLE_BETA_EXTENSIONS | |
| #include "hwcontext.h" | |
| #include "hwcontext_vulkan.h" | |
| /* An enum of bitflags for every optional extension we need */ | |
| typedef enum FFVulkanExtensions { | |
| FF_VK_EXT_EXTERNAL_DMABUF_MEMORY = 1ULL << 0, /* VK_EXT_external_memory_dma_buf */ | |
| FF_VK_EXT_DRM_MODIFIER_FLAGS = 1ULL << 1, /* VK_EXT_image_drm_format_modifier */ | |
| FF_VK_EXT_EXTERNAL_FD_MEMORY = 1ULL << 2, /* VK_KHR_external_memory_fd */ | |
| FF_VK_EXT_EXTERNAL_FD_SEM = 1ULL << 3, /* VK_KHR_external_semaphore_fd */ | |
| FF_VK_EXT_EXTERNAL_HOST_MEMORY = 1ULL << 4, /* VK_EXT_external_memory_host */ | |
| FF_VK_EXT_DEBUG_UTILS = 1ULL << 5, /* VK_EXT_debug_utils */ | |
| #ifdef _WIN32 | |
| FF_VK_EXT_EXTERNAL_WIN32_MEMORY = 1ULL << 6, /* VK_KHR_external_memory_win32 */ | |
| FF_VK_EXT_EXTERNAL_WIN32_SEM = 1ULL << 7, /* VK_KHR_external_semaphore_win32 */ | |
| #endif | |
| FF_VK_EXT_DESCRIPTOR_BUFFER = 1ULL << 8, /* VK_EXT_descriptor_buffer */ | |
| FF_VK_EXT_DEVICE_DRM = 1ULL << 9, /* VK_EXT_physical_device_drm */ | |
| FF_VK_EXT_VIDEO_QUEUE = 1ULL << 10, /* VK_KHR_video_queue */ | |
| FF_VK_EXT_VIDEO_DECODE_QUEUE = 1ULL << 11, /* VK_KHR_video_decode_queue */ | |
| FF_VK_EXT_VIDEO_DECODE_H264 = 1ULL << 12, /* VK_EXT_video_decode_h264 */ | |
| FF_VK_EXT_VIDEO_DECODE_H265 = 1ULL << 13, /* VK_EXT_video_decode_h265 */ | |
| FF_VK_EXT_VIDEO_DECODE_AV1 = 1ULL << 14, /* VK_KHR_video_decode_av1 */ | |
| FF_VK_EXT_ATOMIC_FLOAT = 1ULL << 15, /* VK_EXT_shader_atomic_float */ | |
| FF_VK_EXT_COOP_MATRIX = 1ULL << 16, /* VK_KHR_cooperative_matrix */ | |
| FF_VK_EXT_NO_FLAG = 1ULL << 31, | |
| } FFVulkanExtensions; | |
| /* Macro containing every function that we utilize in our codebase */ | |
| #define FN_LIST(MACRO) \ | |
| /* Instance */ \ | |
| MACRO(0, 0, FF_VK_EXT_NO_FLAG, EnumerateInstanceExtensionProperties) \ | |
| MACRO(0, 0, FF_VK_EXT_NO_FLAG, EnumerateInstanceLayerProperties) \ | |
| MACRO(0, 0, FF_VK_EXT_NO_FLAG, CreateInstance) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, DestroyInstance) \ | |
| \ | |
| /* Debug */ \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, CreateDebugUtilsMessengerEXT) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, DestroyDebugUtilsMessengerEXT) \ | |
| \ | |
| /* Device */ \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetDeviceProcAddr) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, CreateDevice) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceFeatures2) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceProperties) \ | |
| MACRO(1, 0, FF_VK_EXT_VIDEO_QUEUE, GetPhysicalDeviceVideoCapabilitiesKHR) \ | |
| MACRO(1, 0, FF_VK_EXT_VIDEO_QUEUE, GetPhysicalDeviceVideoFormatPropertiesKHR) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, DeviceWaitIdle) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, DestroyDevice) \ | |
| \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, EnumeratePhysicalDevices) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, EnumerateDeviceExtensionProperties) \ | |
| \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceProperties2) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceMemoryProperties) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceFormatProperties2) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceImageFormatProperties2) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceQueueFamilyProperties) \ | |
| MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceQueueFamilyProperties2) \ | |
| MACRO(1, 0, FF_VK_EXT_COOP_MATRIX, GetPhysicalDeviceCooperativeMatrixPropertiesKHR) \ | |
| \ | |
| /* Command pool */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateCommandPool) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyCommandPool) \ | |
| \ | |
| /* Command buffer */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, AllocateCommandBuffers) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, BeginCommandBuffer) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, EndCommandBuffer) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, FreeCommandBuffers) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdDispatch) \ | |
| \ | |
| /* Queue */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetDeviceQueue) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, QueueSubmit) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, QueueSubmit2) \ | |
| \ | |
| /* Fences */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateFence) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, WaitForFences) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, ResetFences) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyFence) \ | |
| \ | |
| /* Semaphores */ \ | |
| MACRO(1, 1, FF_VK_EXT_EXTERNAL_FD_SEM, GetSemaphoreFdKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateSemaphore) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, WaitSemaphores) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroySemaphore) \ | |
| \ | |
| /* Memory */ \ | |
| MACRO(1, 1, FF_VK_EXT_EXTERNAL_FD_MEMORY, GetMemoryFdKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetMemoryFdPropertiesKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_EXTERNAL_HOST_MEMORY, GetMemoryHostPointerPropertiesEXT) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, AllocateMemory) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, MapMemory) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, FlushMappedMemoryRanges) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, InvalidateMappedMemoryRanges) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, UnmapMemory) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, FreeMemory) \ | |
| \ | |
| /* Commands */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdBindDescriptorSets) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdPushConstants) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdBindPipeline) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdPipelineBarrier) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdCopyBufferToImage) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdCopyImageToBuffer) \ | |
| \ | |
| /* Buffer */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetBufferMemoryRequirements2) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateBuffer) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, BindBufferMemory) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetBufferDeviceAddress) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdFillBuffer) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyBuffer) \ | |
| \ | |
| /* Image */ \ | |
| MACRO(1, 1, FF_VK_EXT_DRM_MODIFIER_FLAGS, GetImageDrmFormatModifierPropertiesEXT) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetImageMemoryRequirements2) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateImage) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, BindImageMemory2) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetImageSubresourceLayout) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyImage) \ | |
| \ | |
| /* ImageView */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateImageView) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyImageView) \ | |
| \ | |
| /* DescriptorSet */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateDescriptorSetLayout) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, AllocateDescriptorSets) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateDescriptorPool) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyDescriptorPool) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyDescriptorSetLayout) \ | |
| \ | |
| /* Descriptor buffers */ \ | |
| MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER, GetDescriptorSetLayoutSizeEXT) \ | |
| MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER, GetDescriptorSetLayoutBindingOffsetEXT) \ | |
| MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER, GetDescriptorEXT) \ | |
| MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER, CmdBindDescriptorBuffersEXT) \ | |
| MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER, CmdSetDescriptorBufferOffsetsEXT) \ | |
| \ | |
| /* DescriptorUpdateTemplate */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, UpdateDescriptorSetWithTemplate) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateDescriptorUpdateTemplate) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyDescriptorUpdateTemplate) \ | |
| \ | |
| /* Queries */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateQueryPool) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, GetQueryPoolResults) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, ResetQueryPool) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdBeginQuery) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdEndQuery) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdResetQueryPool) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyQueryPool) \ | |
| \ | |
| /* sync2 */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdPipelineBarrier2) \ | |
| \ | |
| /* Video queue */ \ | |
| MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CreateVideoSessionKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CreateVideoSessionParametersKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, GetVideoSessionMemoryRequirementsKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, BindVideoSessionMemoryKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CmdBeginVideoCodingKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CmdControlVideoCodingKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CmdEndVideoCodingKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, DestroyVideoSessionParametersKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, DestroyVideoSessionKHR) \ | |
| \ | |
| /* Video decoding */ \ | |
| MACRO(1, 1, FF_VK_EXT_VIDEO_DECODE_QUEUE, CmdDecodeVideoKHR) \ | |
| \ | |
| /* Pipeline */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreatePipelineLayout) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyPipelineLayout) \ | |
| \ | |
| /* PipelineLayout */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateComputePipelines) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyPipeline) \ | |
| \ | |
| /* Sampler */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateSamplerYcbcrConversion) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroySamplerYcbcrConversion) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateSampler) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroySampler) \ | |
| \ | |
| /* Shaders */ \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreateShaderModule) \ | |
| MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyShaderModule) | |
| /* Macro containing every win32 specific function that we utilize in our codebase */ | |
| #define FN_LIST_WIN32(MACRO) \ | |
| MACRO(1, 1, FF_VK_EXT_EXTERNAL_WIN32_SEM, GetSemaphoreWin32HandleKHR) \ | |
| MACRO(1, 1, FF_VK_EXT_EXTERNAL_WIN32_MEMORY, GetMemoryWin32HandleKHR) | |
| /* Macro to turn a function name into a definition */ | |
| #define PFN_DEF(req_inst, req_dev, ext_flag, name) \ | |
| PFN_vk##name name; | |
| /* Structure with the definition of all listed functions */ | |
| typedef struct FFVulkanFunctions { | |
| FN_LIST(PFN_DEF) | |
| #ifdef _WIN32 | |
| FN_LIST_WIN32(PFN_DEF) | |
| #endif | |
| } FFVulkanFunctions; | |
| #endif /* AVUTIL_VULKAN_FUNCTIONS_H */ |