我一直在为针对MacOS的Vulkan编写包装器库。直到我遇到这个障碍,一切都很好。有一个对SDL_Vulkan_CreateSurface
的调用,该调用应该返回指向表面VkSurfaceKHR的指针。但是,返回的指针不是内存地址,而是数字1。起初,我认为这可能是SDL的错误,但是后来我注意到另一个对Vulkan API的调用将返回2。我希望这是我可以解决的问题。这是输出:
1== CREATE VULKAN INSTANCE Enabling extensions: VK_KHR_surface VK_MVK_macos_surface === 2== CREATE PHYSICAL DEVICE Created GPU (Physical device): 0x00007fe23b81e380 3== CREATE SURFACE (Metal->MoltenVK) Created Surface: 0x0000000000000001 4== CREATE DEVICE Chosen queue Family is 0 Created Device: 0x00007fe23c017a10 5== CREATE COMMAND POOL Created Command Pool: 0x0000000000000002 6== CREATE COMMAND BUFFER Created Command Buffer: 0x00007fe23a4d2bd0 7== CREATE SWAPCHAIN Segmentation fault: 11
负责的功能是这样的:
func createVulkanSurface() throws -> Surface {
var surface = VkSurfaceKHR(bitPattern: 0)
if SDL_Vulkan_CreateSurface(window, self.instance!.pointer, &surface) != SDL_TRUE {
throw lastSDLError()
}
return Surface(instance: self.instance!, surface: surface!)
}
代码在这里:https://github.com/alexanderuv/vulkanSwift
上面的特定代码在这里:https://github.com/alexanderuv/vulkanSwift/blob/master/Sources/SwiftSDL2/Window.swift#L198
任何帮助将不胜感激!
答案 0 :(得分:3)
VkSurfaceKHR
不是指针;这是不可调度的句柄。根据标准:
不可分派句柄类型是64位整数类型,其含义是- 依赖,并且可以直接在句柄中编码对象信息,而不是充当 对基础对象的引用。
因此1或2可能是不可分派手柄的有效值。如果遇到段故障,这不是因为表面手柄无效。