知识卡片
显式声明附件生命周期,让驱动省掉不必要的写回
内容
渲染通道里的每个附件(参与渲染的图像)都要显式声明两件事:通道开始时要不要保留已有内容(还是可以直接丢弃,反正马上会被清空或整块覆盖),通道结束时要不要把结果写回内存(还是这块数据只是过程中的临时产物,用完就能扔)。这两个决定看起来只是给驱动一个提示,实际上是把”这块内存完整的生命周期”提前告诉了驱动:如果开始时声明不关心旧内容、结束时也声明不需要保留,驱动就知道这块数据全程只活在本次渲染通道内部,完全可以不产生任何对主内存的读写,只在片上高速缓存里周转。反过来,如果什么都不声明清楚,驱动只能保守地假设数据必须完整读入、完整写回。这体现了一个通用原则:延迟/隐藏优化空间往往来自”提前告知系统某个资源的完整生命周期”,而不是让系统在运行时猜测。
参考来源
《Vulkan 应用开发指南》第7章《图形管线》