summaryrefslogtreecommitdiff
path: root/libavutil/vulkan_loader.h
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2024-03-03 17:02:10 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2024-03-03 22:56:07 +0100
commit0a05577d1e2f3ac2729fd1a96cbef352df20366a (patch)
treeaf4d268c9e833981e710da269fdc3a4e968a12de /libavutil/vulkan_loader.h
parent674f20813d14924e814fa1c68fe72aa2a79154bf (diff)
avutil/vulkan_loader: Avoid relocations for strings
To do so, concatenate all the names together to one big string name1\0name2\0....lastname\0\0. This avoids the pointer in the FunctionLoadInfo structure and thereby moves vk_load_info into .rodata (and makes it smaller by 888B). Reviewed-by: Lynne <dev@lynne.ee> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavutil/vulkan_loader.h')
-rw-r--r--libavutil/vulkan_loader.h16
1 files changed, 12 insertions, 4 deletions
diff --git a/libavutil/vulkan_loader.h b/libavutil/vulkan_loader.h
index 37ce339e1d..f9e739e1e3 100644
--- a/libavutil/vulkan_loader.h
+++ b/libavutil/vulkan_loader.h
@@ -31,7 +31,6 @@
req_dev, \
offsetof(FFVulkanFunctions, name), \
ext_flag, \
- "vk"#name, \
},
static inline uint64_t ff_vk_extensions_to_mask(const char * const *extensions,
@@ -101,18 +100,26 @@ static inline int ff_vk_load_functions(AVHWDeviceContext *ctx,
char req_dev;
uint16_t struct_offset;
FFVulkanExtensions ext_flag;
- const char *name;
} vk_load_info[] = {
FN_LIST(PFN_LOAD_INFO)
#ifdef _WIN32
FN_LIST_WIN32(PFN_LOAD_INFO)
#endif
};
+ // Concatenate the names to avoid relocations. The resulting string
+ // will end with \0\0
+#define FUNC_NAME(req_inst, req_dev, ext_flag, name) "vk"#name"\0"
+ const char *name =
+ FN_LIST(FUNC_NAME)
+#ifdef _WIN32
+ FN_LIST_WIN32(FUNC_NAME)
+#endif
+ ;
+#undef FUNC_NAME
- for (int i = 0; i < FF_ARRAY_ELEMS(vk_load_info); i++) {
+ for (int i = 0; i < FF_ARRAY_ELEMS(vk_load_info); name += strlen(name) + 1, i++) {
const struct FunctionLoadInfo *load = &vk_load_info[i];
static const char extensions[][4] = { "", "EXT", "KHR" };
- const char *name = load->name;
PFN_vkVoidFunction fn;
if (load->req_dev && !has_dev)
@@ -146,6 +153,7 @@ static inline int ff_vk_load_functions(AVHWDeviceContext *ctx,
*(PFN_vkVoidFunction *)((uint8_t *)vk + load->struct_offset) = fn;
}
+ av_assert1(*name == '\0');
return 0;
}