API 返回无效指针的问题
Problem with API returning invalid pointer
我一直在为 Vulkan 编写一个针对 MacOS 的包装器库。一切顺利,直到我遇到这个障碍。有一个对 SDL_Vulkan_CreateSurface
的调用,它应该 return 一个指向表面 VkSurfaceKHR 的指针。但是,returned 指针不是内存地址,而是数字 1。起初我认为这可能是 SDL 的一个错误,但后来我注意到对另一个 Vulkan API 的另一个调用是 returning 2. 我现在别无选择,我希望这是我可以解决的问题。这是输出:
1== 创建 VULKAN 实例
启用扩展:
VK_KHR_surface
VK_MVK_macos_surface
===
2== 创建物理设备
创建的 GPU(物理设备):0x00007fe23b81e380
3== 创建表面(金属->MoltenVK)
创建的表面:0x0000000000000001
4== 创建设备
选择的队列系列为 0
创建的设备:0x00007fe23c017a10
5== 创建命令池
创建命令池:0x0000000000000002
6== 创建命令缓冲区
创建的命令缓冲区:0x00007fe23a4d2bd0
7== 创建交换链
分段错误: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
任何帮助将不胜感激!
VkSurfaceKHR
不是 指针 ;这是一个不可分派的句柄。来自标准:
Non-dispatchable handle types are a 64-bit integer type whose meaning is implementation-
dependent, and may encode object information directly in the handle rather than acting as a
reference to an underlying object.
因此 1 或 2 很可能是不可分派句柄的有效值。如果您遇到段错误,那不是因为表面句柄无效。
我一直在为 Vulkan 编写一个针对 MacOS 的包装器库。一切顺利,直到我遇到这个障碍。有一个对 SDL_Vulkan_CreateSurface
的调用,它应该 return 一个指向表面 VkSurfaceKHR 的指针。但是,returned 指针不是内存地址,而是数字 1。起初我认为这可能是 SDL 的一个错误,但后来我注意到对另一个 Vulkan API 的另一个调用是 returning 2. 我现在别无选择,我希望这是我可以解决的问题。这是输出:
1== 创建 VULKAN 实例 启用扩展: VK_KHR_surface VK_MVK_macos_surface === 2== 创建物理设备 创建的 GPU(物理设备):0x00007fe23b81e380 3== 创建表面(金属->MoltenVK) 创建的表面:0x0000000000000001 4== 创建设备 选择的队列系列为 0 创建的设备:0x00007fe23c017a10 5== 创建命令池 创建命令池:0x0000000000000002 6== 创建命令缓冲区 创建的命令缓冲区:0x00007fe23a4d2bd0 7== 创建交换链 分段错误: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
任何帮助将不胜感激!
VkSurfaceKHR
不是 指针 ;这是一个不可分派的句柄。来自标准:
Non-dispatchable handle types are a 64-bit integer type whose meaning is implementation- dependent, and may encode object information directly in the handle rather than acting as a reference to an underlying object.
因此 1 或 2 很可能是不可分派句柄的有效值。如果您遇到段错误,那不是因为表面句柄无效。