Vk error extension not present

2 votes and 4 comments so far on Reddit

Without a full code listing on github or something similar, it can be hard to tell where your issues are. You pass a pointer to a 32 bit unsigned integer to glfwGetRequiredInstanceExtensions, and it will update whatever that points to to tell you how many instances extensions are required and it returns a const char**. That is just an array of C strings, so you can index through them with the last index being count - 1. Displaying that shouldn’t be hard.

To add to what Laker_gra posted, I think you are probably better off starting with an easier API. You are stumbling over the very easy parts of Vulkan. Things only get more difficult from here. You can do whatever you want, but I’d recommend something easier like either an prebuilt engine, higher level framework, or OpenGL. You are going to be much more productive with things like that. As you gain experience, you can then come back to Vulkan if you actually feel the limitations of whatever you are dealing with.

I think a lot of folks make a choice to use Vulkan without a good grasp at what that will entail in the long term. In my mind it is a bit like premature optimization. People use it because it gets advertised as «fast», but in most if not all of the beginner work, your Vulkan code isn’t going to outperform OpenGL. I think people get worried that OpenGL is a waste of time because Vulkan is better and they think OpenGL is going away. OpenGL isn’t going anywhere in the foreseeable future, and Vulkan is only better if you are capable of writing that better code. That can be a considerable task. Taking baby steps and working towards whatever goal you have by going through something easier first is probably still faster overall. You will be able to make identifiable progress earlier. When you get towards whatever that final goal project is, you may end up finding that OpenGL is fine. If it isn’t, the skills you have learned over that process will transfer pretty well into something like Vulkan. You’ll still have stuff to learn, but it will be easier with the solid foundation you have built up.

Я начинаю с Vulkan и следую руководству Нико Кауппи на Youtube.

У меня ошибка при создании устройства с vkCreateDevice, возвращает VK_ERROR_EXTENSION_NOT_PRESENT

Вот часть моего кода:

  1. Вызов vkCreateDevice

    _gpu_count = 0;
    vkEnumeratePhysicalDevices(instance, &_gpu_count, nullptr);
    std::vector<VkPhysicalDevice> gpu_list(_gpu_count);
    vkEnumeratePhysicalDevices(instance, &_gpu_count, gpu_list.data());
    _gpu = gpu_list[0];
    
    vkGetPhysicalDeviceProperties(_gpu, &_gpu_properties);
    
    VkDeviceCreateInfo device_create_info = _CreateDeviceInfo();
    
    vulkanCheckError(vkCreateDevice(_gpu, &device_create_info, nullptr, &_device));
    

_gpu_count = 1 и _gpu_properties, похоже, хорошо распознают мой nvidia gpu (который не обновлен)

  1. device_create_info

    VkDeviceCreateInfo _createDeviceInfo;
    
    _createDeviceInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
    _createDeviceInfo.queueCreateInfoCount = 1;
    VkDeviceQueueCreateInfo _queueInfo = _CreateDeviceQueueInfo();
    _createDeviceInfo.pQueueCreateInfos = &_queueInfo;
    

Я не понимаю смысла ошибки: «Запрошенное расширение не поддерживается» согласно документу Хроноса.

Спасибо за вашу помощь

2 ответа

Лучший ответ

VK_ERROR_EXTENSION_NOT_PRESENT возвращается, когда одно из предоставленных вами расширений в векторе [enabledExtensionCount, ppEnabledExtensionNames] не поддерживается драйвером (по запросу vkEnumerateDeviceExtensionProperties()).

Расширения также могут иметь зависимости, поэтому VK_ERROR_EXTENSION_NOT_PRESENT также возвращается, если зависимость расширения от расширения в списке также отсутствует.

Если вам не нужны расширения устройств, убедитесь, что enabledExtensionCount из VkDeviceCreateInfo равно 0 (а не, например, какое-то неинициализированное значение).

Я предполагаю, что 2. — это все тело _CreateDeviceInfo(), что подтвердит подозрение в «неинициализированном значении».

Однако обычно вам нужно, чтобы там было расширение swapchain, чтобы иметь возможность напрямую выводить на экран.


1

krOoze
3 Окт 2016 в 19:04

Прежде всего, убедитесь, что ваш VkDeviceCreateInfo заполнен нулями, иначе он может нести мусор для вашего вызова VkCreateDevice().

Добавьте следующую строку сразу после объявления VkDeviceCreateInfo:

memset ( &_createDeviceInfo, 0, sizeof(VkDeviceCreateInfo)  );

Некоторые расширения абсолютно необходимы, например, swapchain.

Чтобы получить доступные расширения, сделайте следующее:

// Available extensions and layers names
const char* const* _ppExtensionNames = NULL;    
// get extension names
uint32 _extensionCount = 0;
vkEnumerateDeviceExtensionProperties( _gpu, NULL, &_extensionCount, NULL);
std::vector<const char *> extNames;
std::vector<VkExtensionProperties> extProps(_extensionCount);
vkEnumerateDeviceExtensionProperties(_gpu, NULL, &_extensionCount, extProps.data());
for (uint32_t i = 0; i < _extensionCount; i++) {
    extNames.push_back(extProps[i].extensionName);
}
 _ppExtensionNames = extNames.data();

Когда у вас есть все имена расширений в _ppExtensionNames, передайте их в структуру deviceCreateInfo:

 VkDeviceCreateInfo  device_create_info ...
    [...]
    device_create_info.enabledExtensionCount = _extensionCount;
    device_create_info.ppEnabledExtensionNames = _ppExtensionNames;
    [...]
vulkanCheckError(vkCreateDevice(_gpu, &device_create_info, nullptr, &_device));

Я надеюсь, что это помогает. Пожалуйста, дважды проверьте приведенный выше код, так как я пишу его наизусть.


1

Alex Byrth
3 Окт 2016 в 18:47

На чтение 3 мин Опубликовано 22.11.2017 Обновлено 22.11.2017

Здравствуйте, сегодня мы рассмотрим ошибку Wolfenstein 2: The New Colossus vk error initialization failed и vk error incompatible driver, которая возникает у многих, кто пробовал играть в эту игру. Эта ошибка возникает у большого количества людей, причем даже на лицензиях или топовых компах она тоже возникает. Я тщательно изучил эту тему и теперь разобрался.

Wolfenstein 2: The New Colossus vk error initialization failed

Содержание

  1. В чем причина ошибки?
  2. Какие видеокарты поддерживают игру?
  3. Как решить проблему Wolfenstein 2: The New Colossus vk error initialization failed?

В чем причина ошибки?

  1. Банальная, но возможна ваша видеокарта просто напросто не поддерживает технологию Vulcan, которая реализована в этой игре. В том же Doom 2016 тоже самое был вулкан, но это можно было обойти и выбрать возможность OpenGL в настройках и в общем- то можно было играть. Но здесь не дали такой возможности и соответственно, если ваша видеокарта не поддерживает Vulcan, а это, должен вам сказать, достаточно большое количество таких видеокарт.
  2. Если у вас встроенная видеокарта, то её нужно тоже отключить, поскольку игра видит её, а она не поддерживает, вот и ошибку выдаёт. Заходим в диспетчер устройств, переходим видеоадаптеры, где написано «встроенная видеокарта» — нажимаем отключить. Уже многие так делали и это действительно помогает на топовых системах.
  3. Уже выпустили Fix для нового драйвера GeForce Hotfix version 388. 10 многие переустановили и остались довольны, при переустановке удалили драйвер Driver display Uninstaller, а потом уже новый поставили, и ошибка прошла.

Какие видеокарты поддерживают игру?

Wolfenstein 2: The New Colossus vk error initialization failed

Как решить проблему Wolfenstein 2: The New Colossus vk error initialization failed?

Появился новый метод, с большим количеством положительных откликов. Нужно просто скачать вулкан последней версии, вы заходите на этот сайт https://vulkan.lunarg.com/sdk/home#wi… и там качаете последнюю версию.
Смотрите по себе винда у вас или линекс. И игра запускается, но вы должны перед этим удалить тот файл, который до этого скачивали и скидывали. Если у вас после этого появится такой баг или он начался ещё до того, что вы заходите и просто черный экран. То просто заходите в локальный диск C, пользователи, выбираете ваш, далее сохранённые игры, выбираете нашу игру и там должен быть один файл – удалите его. И всё, опять всё будет работать.

Конечно, очень жаль, что разработчики так ограничивают большое количество людей, что приходится придумывать какие-то лайфаки, для входа. И даже очень крутые видюхи не могут зайти, зачем они сделали эту привязку к вулкану- непонятно. Не все же будут разбираться и пытаться решить проблему и многих клиентов они упустили. А игра действительно очень крутая.

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

Понравилась статья? Поделить с друзьями:
  • Vk combo подписка приостановлена как исправить
  • Vk com неизвестная ошибка
  • Vk com javascript error
  • Vk coffee ошибка авторизации
  • Vk coffee не скачивает музыку пишет ошибка