MemoryRequirements中的大小不是我所期待的

时间:2016-06-15 10:04:07

标签: vulkan

我正在创建一个纹理,查询内存要求,而这并不是我所期待的。这是ImageCreateInfo结构:

ImageCreateInfo()
    .X2D(1024, 1024)
    .Format(Format::R8G8B8_UNORM)
    .InitialLayout(ImageLayout::PREINITIALIZED)
    .Tiling(ImageTiling::LINEAR)
    .Usage(ImageUsageFlagBits::TRANSFER_SRC);

现在,我希望R,G,B中的每一个都有一个字节,宽度和高度为1024,以提供3 * 1024 * 1024 = 3,145,728的内存要求。但相反,它返回1,048,576,这完全是1024 * 1024.似乎并不关心每个RGB通道的一个字节。我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

你是对的,这应该返回3,145,728字节,但实际上是否可以使用R8G8B8_UNORM格式?如果没有,您将无法获得正确的分配大小,因为您实际上无论如何都无法使用该图像。

如果启用验证图层,则应从图像验证图层中抛出错误。

至少在GPU上,我现在不支持任何平铺模式或缓冲格式。但是例如R8G8B8A8或R8G8可用并返回正确的分配大小。

如果您的GPU上实际可用R8G8B8,您可以发布完整的VkImageCreateInfo结构,包括mips和层数吗?

因此,一个好主意是检查您请求(并且想要分配的)图像格式是否实际支持您的用例(线性,最佳,缓冲)。