vkCreateImage 返回VK_ERROR_INITIALIZATION_FAILED尽管支持

vkCreateImage returns VK_ERROR_INITIALIZATION_FAILED although supported

本文关键字:支持 FAILED ERROR 返回 VK vkCreateImage INITIALIZATION      更新时间:2023-10-16

每当我调用 vkCreateImage 时,我的 Vulkan 实现都会返回VK_ERROR_INITIALIZATION_FAILED。我检查了vkGetPhysicalDeviceImageFormatProperties的输出以及vkGetPhysicalDeviceFormatProperties的输出,并确保支持我正在创建的图像的格式(关于其创建参数)。我已经成功初始化了一个 Vulkan 实例和一个逻辑设备,所以问题一定出在其他地方。

Vulkan规范没有提到VK_ERROR_INITIALIZATION_FAILED作为vkCreateImage的可能返回值,这使得根除问题变得更加困难。

我推送到vkCreateImageVkImageCreateInfo结构如下:

imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
imageCreateInfo.pNext = nullptr;
imageCreateInfo.flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
imageCreateInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
imageCreateInfo.extent.width = 1024;
imageCreateInfo.extent.height = 1024;
imageCreateInfo.extent.depth = 1;
imageCreateInfo.arrayLayers = 1;
imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
imageCreateInfo.usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT;
imageCreateInfo.mipLevels = 0;
imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
imageCreateInfo.queueFamilyIndexCount = 0;
imageCreateInfo.pQueueFamilyIndices = nullptr;

如规范中所述:

mip水平必须大于 0

因此,从您的代码来看,为 mip 级别数提供 0 值可能是失败的原因(或原因之一)。