The issue is that we cannot rely on any context existing when we free frames, due to threading. The Vulkan functions are loaded in each context separately, so until now, we've just been loading them on every frame's destruction. Rather than do this, just save the function pointers we need in each frame. The function pointers are guaranteed to not change and exist. Patch attached.