Я пытаюсь создать экземпляр vulkan. Вот мой код:
vk::ApplicationInfo appInfo("Test", 1, nullptr, 0, 0);
vk::InstanceCreateInfo info;
info.pApplicationInfo(&appInfo);
vk::Instance instance;
const auto result = vk::createInstance(&info, nullptr, &instance);
std::cout << vkResultToString(result) << std::endl;
Однако это возвращает VK_ERROR_INCOMPATIBLE_DRIVER.
Если я не предоставлю свой ApplicationInfo
и вместо этого используйте созданный по умолчанию, он работает.
в Спецификация это говорит
Если
apiVersion
равно 0, реализация должна игнорировать его, в противном случае, если реализация не поддерживает запрошенныйapiVersion
должно вернутьсяVK_ERROR_INCOMPATIBLE_DRIVER
Как вы можете видеть, я установил apiVersion
до 0. Насколько я понимаю, это не должно дать мне VK_ERROR_INCOMPATIBLE_DRIVER
ошибка тогда.
Это ошибка или я что-то забыл или ошибаюсь?
РЕДАКТИРОВАТЬ:
В HTML-версии Спецификация часть о игнорировании apiVersion
не там Является ли PDF-версия спецификации устаревшей?
РЕДАКТИРОВАТЬ:
Если я устанавливаю apiVersion
до 1.0.3 тоже работает:
std::bitset<32> apiVersion;
apiVersion.set(22);
apiVersion.set(1);
apiVersion.set(0);
vk::ApplicationInfo appInfo("Test", 1, nullptr, 0, apiVersion.to_ulong());
Это звучит полностью как вариант развития, который был удален из окончательной спецификации. Если учесть, насколько сильно любой графический API меняется с одной основной версии на другую, кажется небезопасным разрешать такое поведение по умолчанию. Это, как говорится, было бы полностью зависеть от производителя графического драйвера, чтобы поддержать это, поскольку они — те, кто окончательно скажет, принято ли что-то подобное или нет.
Кроме того, если вы посмотрите на официальную спецификацию API: https://www.khronos.org/registry/vulkan/specs/1.0/apispec.html.
Это просто говорит: «Наконец, apiVersion — это версия API Vulkan, которую приложение ожидает использовать».
Я считаю, что спецификация HTML, на которую вы смотрите, устарела:
Редакция 0.9 Временная среда 11 ноября 18:11:51 PST 2015
Это цитата о apiVersion
Вот https://www.khronos.org/registry/vulkan/specs/1.0/pdf/vkspec.pdf и здесь https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html Это версия 1.0
Что касается результатов, это может быть ошибка. Какой драйвер / платформу вы используете?
Вы задаете вопрос:
Это ошибка или я что-то забыл или ошибаюсь?
Поскольку спецификация каноническая, да, это ошибка. Спецификация говорит эти две важные вещи:
apiVersion — это версия API Vulkan, с которой приложение должно работать, закодировано, как описано в
Раздел Номера и семантики версий API. Если apiVersion равен 0, реализация должна его игнорировать, в противном случае, если
реализация не поддерживает запрашиваемую apiVersion, она должна возвращать VK_ERROR_INCOMPATIBLE_DRIVER.Значение apiVersion должно быть равно нулю, иначе оно должно быть версией, которую поддерживает реализация или поддерживает эффективную замену
На данный момент вы можете продолжать делать то, что вы делаете, и запросить версию, которая одновременно <=
версия в SDK, против которой вы строите <=
версии драйверов, на которых вы хотите работать.