我不清楚何时使用 VK_IMAGE_LAYOUT_GENERAL 而不是为我将要执行的任何操作转换到最佳布局是一个好主意。目前,我的政策是始终过渡到最佳布局。
但是 VK_IMAGE_LAYOUT_GENERAL 存在。当我只打算在短时间内使用给定的布局时,也许我应该使用它。
例如,现在,我正在编写代码以使用 vkCmdBlitImage 生成 mipmap。当我遍历执行 vkCmdBlitImage 命令的子资源时,我是否应该在缩小到 mip 时转换到 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,然后在我将成为下一个 mip 的源时转换到 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,然后当我最终转换到 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL全部完成?看起来有很多过渡,也许在 VK_IMAGE_LAYOUT_GENERAL 中生成 mips 会更好。
我很欣赏答案可能是测量,但很难在我所有的目标 GPU 上进行测量(特别是因为我还没有在 Android 上运行任何东西)所以如果有人有任何体面的经验法则可以应用,将不胜感激。
FWIW,我正在编写将在桌面 GPU 和 Android 上运行的 Vulkan 代码,但我主要关心后者的性能。