Vulkan vkCreateWin32SurfaceKHR 加载失败

Vulkan vkCreateWin32SurfaceKHR fails to load

嘿,我正在尝试使用 Vulkan 创建一个 Windows Surface 但是不知何故 vkGetInstanceProcAddr 无法加载 vkCreateWin32SurfaceKHR 功能,即使扩展已正确加载。

编辑: 在这里我尝试获取函数指针: vkCreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)vkGetInstanceProcAddr(vulkanInstance.instance, "vkCreateWin32SurfaceKHR");

您是否启用了适当的扩展程序,例如使用实例创建时的 const VK_KHR_WIN32_SURFACE_EXTENSION_NAME?

另请注意,您不需要手动获取 vkCreateWin32SurfaceKHR 的函数指针,除非您将 VK_NO_PROTOTYPES 定义为核心的一部分。

如果您启用了扩展程序但仍未获得有效的函数指针,请检查您的驱动程序是否已正确安装,尤其是。没有注册的旧 ICD 可能会导致问题。 LunarG Vulkan SDK 包含一个名为 "via" 的工具(在 bin 文件夹中)来检查您的 Vulkan 安装。

如果您可以使用 C++ API 而不是 C 语言,则更简单的方法是通过 SDK 中附带的 vulkan.hpp 文件。

你可以#define VK_USE_PLATFORM_WIN32_KHR并且vk::Instance会有一个vk::Result createWin32SurfaceKHR(vk::Win32SurfaceCreateInfoKHR*, vk::AllocationCallbacks*, vk::SurfaceKHR*)成员函数。这有助于减轻您自己获取函数指针的需要。

#include 你的源文件中有 vulkan_win32.h header 吗?

PFN_vkCreateWin32SurfaceKHR 来自一个扩展,因此它没有在核心 vulkan headers 中定义。

关于这个...如果您在调用 vkCreateWin32SurfaceKHR 时收到错误,请确保您在 VkWin32SurfaceCreateInfoKHR 结构上定义了 sType...即使它是 VkWin32SurfaceCreateInfoKHR 结构,忘记 stype 也足以使其失败。