Проблема с API, возвращающим неверный указатель - PullRequest
0 голосов
/ 07 января 2019

Я пишу библиотеку-обертку для Vulkan для MacOS. Все шло хорошо, пока я не наткнулся на это препятствие. Есть вызов SDL_Vulkan_CreateSurface, который должен вернуть указатель на поверхность VkSurfaceKHR. Однако возвращаемый указатель - это не адрес памяти, а номер 1. Сначала я подумал, что это может быть ошибкой в ​​SDL, но потом я заметил, что возвращается другой вызов другого API Vulkan. Я надеюсь, что это то, что я могу исправить с моей стороны. Это вывод:

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 голосов
/ 07 января 2019

VkSurfaceKHR не является указателем ; это не отправляемая ручка. Из стандарта:

Типы неуправляемых дескрипторов - это 64-битные целочисленные типы, смысл которых - реализация зависит и может кодировать информацию об объекте непосредственно в дескрипторе, а не действовать как ссылка на базовый объект.

Таким образом, 1 или 2 вполне могут быть допустимыми значениями для неотправляемых дескрипторов. Если вы получаете ошибку сегмента, это не потому, что дескриптор поверхности недействителен.

...