LINUX.ORG.RU

История изменений

Исправление safocl, (текущая версия) :

оказывается все немного глубже — в vulkan-hpp существует такая сущность как диспетчер — и делает он по сути одну вещь — инициализирует функции vulkan api их адресами.
По умолчанию включен статический диспетчер, который содержит только функции из core api и несколько из расширений. Остальные необходимо инициализировать самому вручную, либо создав динамический диспетчер. Тут указаны шаги как сделать полноценно заполненный динамический диспетчер:

vk::DynamicLoader dl;
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = dl.getProcAddress<PFN_vkGetInstanceProcAddr>("vkGetInstanceProcAddr");
VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr);

vk::Instance instance = vk::createInstance({}, nullptr);
VULKAN_HPP_DEFAULT_DISPATCHER.init(instance);

std::vector<vk::PhysicalDevice> physicalDevices = instance.enumeratePhysicalDevices();
assert(!physicalDevices.empty());
vk::Device device = physicalDevices[0].createDevice({}, nullptr);
VULKAN_HPP_DEFAULT_DISPATCHER.init(device);


А чуть выше рассказано как подключить сам динамический диспетчер:
//.cpp

#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
#include <vulkan/vulkan.hpp>

VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE

Исходная версия safocl, :

оказывается все немного глубже — в vulkan-hpp существует такая сущность как диспетчер — и делает он по сути одну вещь — инициализирует функции vulkan api их адресами.
По умолчанию включен статический диспетчер, который содержит только функции из core api и несколько из расширений. Остальные необходимо инициализировать самому вручную, либо создав динамический диспетчер. Тут указаны шаги как сделать полноценно заполненный диспетчер:

vk::DynamicLoader dl;
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = dl.getProcAddress<PFN_vkGetInstanceProcAddr>("vkGetInstanceProcAddr");
VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr);

vk::Instance instance = vk::createInstance({}, nullptr);
VULKAN_HPP_DEFAULT_DISPATCHER.init(instance);

std::vector<vk::PhysicalDevice> physicalDevices = instance.enumeratePhysicalDevices();
assert(!physicalDevices.empty());
vk::Device device = physicalDevices[0].createDevice({}, nullptr);
VULKAN_HPP_DEFAULT_DISPATCHER.init(device);


А чуть выше рассказано как подключить сам динамический диспетчер:
//.cpp

#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
#include <vulkan/vulkan.hpp>

VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE