19 #ifndef AVUTIL_VULKAN_LOADER_H
20 #define AVUTIL_VULKAN_LOADER_H
28 #define PFN_LOAD_INFO(req_inst, req_dev, ext_flag, name) \
32 offsetof(FFVulkanFunctions, name), \
39 static const struct ExtensionMap {
47 #ifdef VK_KHR_shader_relaxed_extended_instruction
64 #ifdef VK_EXT_shader_long_vector
67 #ifdef VK_EXT_shader_replicated_composites
70 #ifdef VK_EXT_zero_initialize_device_memory
74 #ifdef VK_KHR_video_maintenance2
88 #ifdef VK_KHR_video_decode_vp9
93 #ifdef VK_KHR_shader_expect_assume
96 #ifdef VK_KHR_video_encode_av1
103 for (
int i = 0;
i < nb_extensions;
i++) {
105 if (!strcmp(extensions[
i], extension_map[j].
name)) {
106 mask |= extension_map[j].flag;
130 uint64_t extensions_mask,
131 int has_inst,
int has_dev)
135 static const struct FunctionLoadInfo {
138 uint16_t struct_offset;
148 #define FUNC_NAME(req_inst, req_dev, ext_flag, name) "vk"#name"\0"
158 const struct FunctionLoadInfo *load = &vk_load_info[
i];
159 static const char extensions[][4] = {
"",
"EXT",
"KHR" };
160 PFN_vkVoidFunction
fn;
162 if (load->req_dev && !has_dev)
164 if (load->req_inst && !has_inst)
171 n =
snprintf(ext_name,
sizeof(ext_name),
"%s%s",
name, extensions[j]);
175 fn = vk->GetDeviceProcAddr(hwctx->
act_dev, ext_name);
176 else if (load->req_inst)
187 "as supported, but got NULL function pointer!\n",
name);
191 *(PFN_vkVoidFunction *)((uint8_t *)vk + load->struct_offset) =
fn;