从 VkImageCreateInfo 计算 VkImageAspectFlagsBits?
Calculating VkImageAspectFlagsBits from VkImageCreateInfo?
在 Vulkan 规范的附录 H 中说:
Aspect (Image):
An image may contain multiple kinds, or aspects, of data for each pixel, where each aspect is
used in a particular way by the pipeline and may be stored differently or separately from other
aspects. For example, the color components of an image format make up the color aspect of the
image, and may be used as a framebuffer color attachment. Some operations, like depth testing,
operate only on specific aspects of an image. Others operations, like image/buffer copies, only
operate on one aspect at a time.
此外,还有一种类型 VkImageAspectFlagBits
,它(我认为)列出了图像可能具有的 7 个方面:
VK_IMAGE_ASPECT_COLOR_BIT
VK_IMAGE_ASPECT_DEPTH_BIT
VK_IMAGE_ASPECT_STENCIL_BIT
VK_IMAGE_ASPECT_METADATA_BIT
VK_IMAGE_ASPECT_PLANE_0_BIT
VK_IMAGE_ASPECT_PLANE_1_BIT
VK_IMAGE_ASPECT_PLANE_2_BIT
VkImageCreateInfo
没有方面字段。
如果我没理解错的话,给定的 VkImage
有这 7 个方面的子集,对吧?
有没有办法从 VkImage 的 VkImageCreateInfo
中推断出 VkImage 具有 7 个方面中的哪一个?
也就是说,您将如何编写一个 returns 图像具有哪些方面的位掩码的函数?
VkImageAspectFlagsBits GetImageAspects(const VkImageCreateInfo& info) { ??? }
您基本上可以从图像的格式中得出图像的哪些方面:
VK_IMAGE_ASPECT_COLOR_BIT
指格式中所有可用的R,G,B,and/orA成分。
VK_IMAGE_ASPECT_DEPTH_BIT
指D分量
VK_IMAGE_ASPECT_STENCIL_BIT
指S分量
VK_IMAGE_ASPECT_PLANE_n_BIT
指的是多位面格式的位面,即名称中带有2PLANE
或3PLANE
的位面。这些方面主要用于复制命令,但也可用于创建单个平面的 VkImageView
而不是整个图像。
VK_IMAGE_ASPECT_METADATA_BIT
是一个奇数,它的存在不基于格式。相反,具有 稀疏驻留 (VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
) 的图像具有元数据方面。
如果图像没有与方面相对应的组件或标志,则它不具有该方面。
在 Vulkan 规范的附录 H 中说:
Aspect (Image):
An image may contain multiple kinds, or aspects, of data for each pixel, where each aspect is used in a particular way by the pipeline and may be stored differently or separately from other aspects. For example, the color components of an image format make up the color aspect of the image, and may be used as a framebuffer color attachment. Some operations, like depth testing, operate only on specific aspects of an image. Others operations, like image/buffer copies, only operate on one aspect at a time.
此外,还有一种类型 VkImageAspectFlagBits
,它(我认为)列出了图像可能具有的 7 个方面:
VK_IMAGE_ASPECT_COLOR_BIT
VK_IMAGE_ASPECT_DEPTH_BIT
VK_IMAGE_ASPECT_STENCIL_BIT
VK_IMAGE_ASPECT_METADATA_BIT
VK_IMAGE_ASPECT_PLANE_0_BIT
VK_IMAGE_ASPECT_PLANE_1_BIT
VK_IMAGE_ASPECT_PLANE_2_BIT
VkImageCreateInfo
没有方面字段。
如果我没理解错的话,给定的 VkImage
有这 7 个方面的子集,对吧?
有没有办法从 VkImage 的 VkImageCreateInfo
中推断出 VkImage 具有 7 个方面中的哪一个?
也就是说,您将如何编写一个 returns 图像具有哪些方面的位掩码的函数?
VkImageAspectFlagsBits GetImageAspects(const VkImageCreateInfo& info) { ??? }
您基本上可以从图像的格式中得出图像的哪些方面:
VK_IMAGE_ASPECT_COLOR_BIT
指格式中所有可用的R,G,B,and/orA成分。VK_IMAGE_ASPECT_DEPTH_BIT
指D分量VK_IMAGE_ASPECT_STENCIL_BIT
指S分量VK_IMAGE_ASPECT_PLANE_n_BIT
指的是多位面格式的位面,即名称中带有2PLANE
或3PLANE
的位面。这些方面主要用于复制命令,但也可用于创建单个平面的VkImageView
而不是整个图像。VK_IMAGE_ASPECT_METADATA_BIT
是一个奇数,它的存在不基于格式。相反,具有 稀疏驻留 (VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
) 的图像具有元数据方面。
如果图像没有与方面相对应的组件或标志,则它不具有该方面。