vkCreateImage returns VK_ERROR_INITIALIZATION_FAILED 虽然支持
vkCreateImage returns VK_ERROR_INITIALIZATION_FAILED although supported
每当我调用 vkCreateImage
时,我的 Vulkan 实现 returns VK_ERROR_INITIALIZATION_FAILED
。我检查了 vkGetPhysicalDeviceImageFormatProperties
的输出以及 vkGetPhysicalDeviceFormatProperties
的输出,并确保支持我正在创建的图像格式(关于它的创建参数)。
我已经成功初始化了一个 Vulkan 实例和一个逻辑设备,所以问题一定出在其他地方。
Vulkan 规范未提及 VK_ERROR_INITIALIZATION_FAILED
作为 vkCreateImage
的可能 return 值,这使得根除问题变得更加困难。
我推送到vkCreateImage
的VkImageCreateInfo
结构如下:
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;
如规范中所述:
mipLevels must be greater than 0
因此,根据您的代码判断,为 mip 级别数提供 0 值可能是失败的原因(或原因之一)。
每当我调用 vkCreateImage
时,我的 Vulkan 实现 returns VK_ERROR_INITIALIZATION_FAILED
。我检查了 vkGetPhysicalDeviceImageFormatProperties
的输出以及 vkGetPhysicalDeviceFormatProperties
的输出,并确保支持我正在创建的图像格式(关于它的创建参数)。
我已经成功初始化了一个 Vulkan 实例和一个逻辑设备,所以问题一定出在其他地方。
Vulkan 规范未提及 VK_ERROR_INITIALIZATION_FAILED
作为 vkCreateImage
的可能 return 值,这使得根除问题变得更加困难。
我推送到vkCreateImage
的VkImageCreateInfo
结构如下:
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;
如规范中所述:
mipLevels must be greater than 0
因此,根据您的代码判断,为 mip 级别数提供 0 值可能是失败的原因(或原因之一)。