何时使用VK_IMAGE_LAYOUT_GENERAL

Col*_*mbo 5 vulkan

我不清楚何时使用VK_IMAGE_LAYOUT_GENERAL是一个好主意,而不是转换到我即将执行的任何操作的最佳布局.目前,我的政策是始终过渡到最佳布局.

但是VK_IMAGE_LAYOUT_GENERAL存在.当我只在短时间内使用给定的布局时,也许我应该使用它.

例如,现在,我正在编写代码以使用vkCmdBlitImage生成mipmap.当我遍历执行vkCmdBlitImage命令的子资源时,我应该转换到VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,因为我缩小为mip,然后转换到VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,当我将成为下一个mip的源时,最后转换到VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL全部完成?这似乎是很多过渡,并且可能在VK_IMAGE_LAYOUT_GENERAL中生成mips更好.

我很欣赏答案可能是测量,但很难衡量我所有的目标GPU(特别是因为我还没有在Android上运行任何东西)所以如果有任何人有任何体面的经验法则可以应用它将非常感激.

FWIW,我正在编写将在桌面GPU和Android上运行的Vulkan代码,但我主要关注后者的性能.

krO*_*oze 5

您将在以下情况下使用它:

  1. 你很懒
  2. 您需要将内存映射到主机(除非您可以使用PREINITIALIZED)
  3. 当您将图像用作多个不兼容的附件时,您别无选择
  4. 对于商店图片

(5.其他情况下,相对于对图像所做的工作,过多地切换布局(并且甚至不需要障碍).在这种情况下确认GENERAL需要进行的测量更好.即使这样,也很可能是过早优化. )

PS:您可以事先通过一个命令将所有mip-map一起转换为TRANSFER_DST,然后只转换到SRC所需的那个.如果这是一个选项(甚至使用一些复杂的算法甚至可以提供更好的质量),那么使用一个像样的硬盘驱动器应该是最好已经存储了mip-maps.

PS2:太糟糕了,没有mip-map创建命令.对于小于半分辨率的图像,cmdBlit最有可能在引擎盖下进行....