API返回无效指针的问题

时间:2019-01-07 05:20:14

标签: swift pointers vulkan

我一直在为针对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

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

VkSurfaceKHR不是指针;这是不可调度的句柄。根据标准:

  

不可分派句柄类型是64位整数类型,其含义是-   依赖,并且可以直接在句柄中编码对象信息,而不是充当   对基础对象的引用。

因此1或2可能是不可分派手柄的有效值。如果遇到段故障,这不是因为表面手柄无效。