vkEnumerateDeviceExtensionProperties Бросать таинственный код ошибки - PullRequest
0 голосов
/ 12 февраля 2019

Я следовал этому учебнику по вулкану и достиг части цепочки обмена.

Я скопировал и вставил раздел об изменении checkDeviceExtensionProperties, который дал мне эту функцию:

//globally declared at the top of the file
const std::vector<const char*> deviceExtensions = {
    VK_KHR_SWAPCHAIN_EXTENSION_NAME
}; 

/* code */

bool checkDeviceExtensionSupport(VkPhysicalDevice pDevice) {
    uint32_t extensionCount;
    vkEnumerateDeviceExtensionProperties(pDevice, nullptr, &extensionCount, nullptr);

    std::vector<VkExtensionProperties> availableExtensions(extensionCount);
    vkEnumerateDeviceExtensionProperties(pDevice, nullptr, &extensionCount, availableExtensions.data());

   /* std::set<std::string> requiredExtensions(deviceExtensions.begin(), deviceExtensions.end());

    for (const auto& extension : availableExtensions) {
        requiredExtensions.erase(extension.extensionName);
    }*/

    return true;//requiredExtensions.empty();
}

Когда я раскомментирую функцию vkEnumerateDeviceExtensionProperties, выдается ошибка.

Код ошибки, возвращаемый обратным вызовом отладки (т. Е. Бит VkDebugUtilsMessageSeverityFlagBitsEXT), равен 0b10000.Который не является ни одним из битов, определенных в vulkan_core.h.

Любое предложение относительно того, что я мог испортить?

Редактировать:

Вывод из сообщения отладки:

[...]
validation layer: Device Extension: VK_KHR_device_group (libGLX_nvidia.so.0) version 0.0.3
Loader Message
16
validation layer: Device Extension: VK_KHR_draw_indirect_count (libGLX_nvidia.so.0) version 0.0.1
Loader Message
16
validation layer: Device Extension: VK_KHR_driver_properties (libGLX_nvidia.so.0) version 0.0.1
Loader Message
16
validation layer: Device Extension: VK_KHR_external_fence (libGLX_nvidia.so.0) version 0.0.1
Loader Message
16
validation layer: Device Extension: VK_KHR_external_fence_fd (libGLX_nvidia.so.0) version 0.0.1
Loader Message
16
validation layer: Device Extension: VK_KHR_external_memory (libGLX_nvidia.so.0) version 0.0.1
Loader Message
16
validation layer: Device Extension: VK_KHR_external_memory_fd (libGLX_nvidia.so.0) version 0.0.1
Loader Message
16
validation layer: Device Extension: VK_KHR_external_semaphore (libGLX_nvidia.so.0) version 0.0.1
Loader Message
16
validation layer: Device Extension: VK_KHR_external_semaphore_fd (libGLX_nvidia.so.0) version 0.0.1
Loader Message
16
validation layer: Device Extension: VK_KHR_get_memory_requirements2 (libGLX_nvidia.so.0) version 0.0.1
Loader Message
16
validation layer: Device Extension: VK_KHR_image_format_list (libGLX_nvidia.so.0) version 0.0.1
[...]

Обратный вызов отладки:

static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(
    VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
    VkDebugUtilsMessageTypeFlagsEXT messageType,
    const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
    void* pUserData) {

    std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl;
    cout << pCallbackData->pMessageIdName << endl;
    cout << messageSeverity << endl;

    if (messageSeverity >= VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) {
        // Message is important enough to show
    }


    return VK_FALSE;
}

1 Ответ

0 голосов
/ 12 февраля 2019

0b10000 - это VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT.Просто отфильтруйте INFO сообщения при создании обратного вызова с помощью vkCreateDebugUtilsMessengerEXT.

...