Расширение VK_KHR_swapchain не найдено, даже если vkcube работает отлично

Я создаю приложение с помощью Vulkan и столкнулся с проблемой.

На моем ноутбуке (только встроенная графика) vkcube.exe работает нормально. Таким образом, проблем с поддержкой расширений нет. Но когда я сам создаю приложение, оно говорит, что расширение VK_KHR_swapchain отсутствует.

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

[09:19:24:716] [TRACE]: Device Extension: VK_EXT_device_address_binding_report
[09:19:24:716] [TRACE]: Device Extension: VK_EXT_full_screen_exclusive
[09:19:24:717] [TRACE]: Device Extension: VK_KHR_swapchain
    VkDeviceCreateInfo device_create_info      = {VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO};
    device_create_info.queueCreateInfoCount    = index_count;
    device_create_info.pQueueCreateInfos       = queue_create_info;
    device_create_info.pEnabledFeatures        = &device_features;
    device_create_info.enabledExtensionCount   = 1;
    const char* extension_names[1]             = {VK_KHR_SWAPCHAIN_EXTENSION_NAME};
    device_create_info.ppEnabledExtensionNames = (const char* const*)&extension_names;

    device_create_info.enabledLayerCount   = 0;
    device_create_info.ppEnabledLayerNames = 0;

    GRD_LOG_DEBUG("Creating logical device for physical device: %s", context->device.properties.deviceName);
    VkResult result = vkCreateDevice(
        context->device.physical_device,
        &device_create_info,
        context->allocator,
        &context->device.logical_device);
    if (result != VK_SUCCESS)
    {
        GRD_LOG_FATAL("Could not create vulkan logical device. Result: %d", result);
        return FALSE;
    }

Это результат:

[08:58:45:587] [DEBUG]: Creating logical device for physical device: Intel(R) Iris(R) Xe Graphics
[08:58:45:587] [ERROR]: loader_validate_device_extensions: Device extension VK_KHR_swapchain not supported by selected physical device or enabled layers.
[08:58:45:589] [ERROR]: vkCreateDevice: Failed to validate extensions in list
[08:58:45:589] [FATAL]: Could not create vulkan logical device. Result: -7 // Result Code for Extension not present

Это включенные расширения экземпляра.

[08:58:45:482] [DEBUG]: Vulkan Required extensions:
[08:58:45:482] [DEBUG]:     1: VK_KHR_surface
[08:58:45:483] [DEBUG]:     2: VK_KHR_get_physical_device_properties2
[08:58:45:483] [DEBUG]:     3: VK_KHR_portability_enumeration
[08:58:45:483] [DEBUG]:     4: VK_KHR_win32_surface
[08:58:45:483] [DEBUG]:     5: VK_EXT_debug_utils
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, ребята, с Вулканом все в порядке, не то чтобы я ожидал, что с Вулканом что-то не так.

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

Как только я добавил логику для копирования данных предыдущего блока памяти на новый адрес в обратном вызове перераспределения, программа заработала как положено.

Хотя реальные изменения кода сложны и содержат более 100 строк, вот обзор того, что было не так и как это было исправлено.

См. VkAllocationCallbacks - VkSpec для понимания определения функции и того, что означают/представляют параметры.

До:

void* VKAPI_PTR vulkan_memory_reallocate(
    void* pUserData,
    void* pOriginal,
    size_t size,
    size_t alignment,
    VkSystemAllocationScope allocationScope)
{
    if (pOriginal)
    {
        free_aligned_memory(pOriginal); 
    }

    return allocate_aligned_memory(size, alignment);
}

После исправления:

void* VKAPI_PTR vulkan_memory_reallocate(
    void* pUserData,
    void* pOriginal,
    size_t size,
    size_t alignment,
    VkSystemAllocationScope allocationScope)
{
    void* new_ptr     = allocate_aligned_memory(size, alignment);
    // size of memory requested by vulkan during allocation of pOriginal.
    // i.e. the amount of bytes we have to copy from the previous address to the new address.
    uint64 block_size = 0;
    get_block_size(pOriginal, &block_size);
    grd_copy_memory(new_ptr, pOriginal, block_size);

    if (pOriginal)
    {
        free_aligned_memory(pOriginal);
    }

    return new_ptr;
}

Было бы полезно, если бы вы добавили внесенные вами изменения в код, чтобы ваша система заработала.

Andrew Henle 07.07.2024 16:32

@AndrewHenle, эй, Эндрю. спасибо за ваше предложение. я сделал это.

Priyansh Yadav 07.07.2024 19:12

Другие вопросы по теме