Я следовал этому учебнику по вулкану и достиг части цепочки обмена.
Я скопировал и вставил раздел об изменении 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;
}