我不清楚何时使用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代码,但我主要关注后者的性能.
您将在以下情况下使用它:
(5.其他情况下,相对于对图像所做的工作,过多地切换布局(并且甚至不需要障碍).在这种情况下确认GENERAL需要进行的测量更好.即使这样,也很可能是过早优化. )
PS:您可以事先通过一个命令将所有mip-map一起转换为TRANSFER_DST,然后只转换到SRC所需的那个.如果这是一个选项(甚至使用一些复杂的算法甚至可以提供更好的质量),那么使用一个像样的硬盘驱动器应该是最好已经存储了mip-maps.
PS2:太糟糕了,没有mip-map创建命令.对于小于半分辨率的图像,cmdBlit最有可能在引擎盖下进行....
| 归档时间: |
|
| 查看次数: |
960 次 |
| 最近记录: |