【发布时间】:2016-08-15 01:26:00
【问题描述】:
在 Vulkan 中,我们有两个需要使用 dlopen/LoadLibrary 加载的全局函数。它们是 vkGetInstanceProcAddr 和 vkGetDeviceProcAddr。
我有一个 gpu 并安装了 vulkan 驱动程序。我应该在运行时还是链接时更好地加载库?我将不同的逻辑设备(从相同的 gpu 创建)提供给 vkGetDeviceProcAddr 以查询相同的函数。他们都向我返回相同的地址。我认为重新加载可能是浪费。
我的问题是这个想法是怎么来的?是多实现还是多GPU?
我的加载器函数目前如下所示:
class VulkanDevice
{
public:
VkDevice m_Device;
void LoadAllCoreFunctions();
void LoadExtension(const char *name);
void LoadExtensions(const char *postfix); // for example: "KHR"
PFN_vkCreateCommandBuffers vkCreateCommandBuffers;
// Then a lot of function pointers.....
}
int main() {
// After creating instance and creating device with vkCreateDevice
VulkanDevice vkd(device);
vkd.LoadAllCoreFunctions();
vkd.vkCreateCommandBuffers(vkd.m_Device, ....);
}
如您所见,如果我有多个设备,重新加载将非常浪费......而且函数指针也会占用大量内存......
【问题讨论】: