VK_ERROR_INCOMPATIBLE_DRIVER при установке для параметра apiVersion значения 0

Я пытаюсь создать экземпляр 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());

4

Решение

Это звучит полностью как вариант развития, который был удален из окончательной спецификации. Если учесть, насколько сильно любой графический API меняется с одной основной версии на другую, кажется небезопасным разрешать такое поведение по умолчанию. Это, как говорится, было бы полностью зависеть от производителя графического драйвера, чтобы поддержать это, поскольку они — те, кто окончательно скажет, принято ли что-то подобное или нет.

Кроме того, если вы посмотрите на официальную спецификацию API: https://www.khronos.org/registry/vulkan/specs/1.0/apispec.html.

Это просто говорит: «Наконец, apiVersion — это версия API Vulkan, которую приложение ожидает использовать».

3

Другие решения

Я считаю, что спецификация 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

Что касается результатов, это может быть ошибка. Какой драйвер / платформу вы используете?

2

Вы задаете вопрос:

Это ошибка или я что-то забыл или ошибаюсь?

Поскольку спецификация каноническая, да, это ошибка. Спецификация говорит эти две важные вещи:

apiVersion — это версия API Vulkan, с которой приложение должно работать, закодировано, как описано в
Раздел Номера и семантики версий API. Если apiVersion равен 0, реализация должна его игнорировать, в противном случае, если
реализация не поддерживает запрашиваемую apiVersion, она должна возвращать VK_ERROR_INCOMPATIBLE_DRIVER.

Значение apiVersion должно быть равно нулю, иначе оно должно быть версией, которую поддерживает реализация или поддерживает эффективную замену

На данный момент вы можете продолжать делать то, что вы делаете, и запросить версию, которая одновременно <= версия в SDK, против которой вы строите <= версии драйверов, на которых вы хотите работать.

1
По вопросам рекламы [email protected]