VK_IMAGE_LAYOUT_UNDEFINED 与 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL 作为帧缓冲区附件的初始布局
VK_IMAGE_LAYOUT_UNDEFINED vs VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL as initial layout for Framebuffer attachment
我看到建议将初始布局设置为VK_IMAGE_LAYOUT_UNDEFINED,因为当它用作下一个渲染过程的目标时,我们真的不关心它的内容。
但是,如果我知道附加的图像是作为颜色目标,那么将其设置为 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL 不是更好吗?这样可以准确地告诉驾驶员它将是什么?
渲染通道附件的初始布局是渲染通道开始之前图像所在的布局。你不是说 "put this image into this layout";你是说 "the image already is in this layout"。因此,除非该图像已经在颜色附件布局中,否则该布局不适合设置为初始布局。如果您将布局设置为 "undefined",您基本上就是说 "I don't care."
每个子通道指定其使用的附件将在该子通道中放入的布局。因此,当使用此附件的第一个子通道开始时,它将执行从初始布局到子通道布局的布局转换。
如果您的渲染通道清除了图像,那么图像的初始布局并不重要。清除操作将覆盖纹理的数据(请注意,并不是要进行任何实际的写入操作),并且当使用附件的第一个子通道开始时,写入的数据将位于该子通道的布局中。
它应该不会比初始布局和第一个子通道布局使用相同的布局慢。只要你清除图像。
我看到建议将初始布局设置为VK_IMAGE_LAYOUT_UNDEFINED,因为当它用作下一个渲染过程的目标时,我们真的不关心它的内容。
但是,如果我知道附加的图像是作为颜色目标,那么将其设置为 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL 不是更好吗?这样可以准确地告诉驾驶员它将是什么?
渲染通道附件的初始布局是渲染通道开始之前图像所在的布局。你不是说 "put this image into this layout";你是说 "the image already is in this layout"。因此,除非该图像已经在颜色附件布局中,否则该布局不适合设置为初始布局。如果您将布局设置为 "undefined",您基本上就是说 "I don't care."
每个子通道指定其使用的附件将在该子通道中放入的布局。因此,当使用此附件的第一个子通道开始时,它将执行从初始布局到子通道布局的布局转换。
如果您的渲染通道清除了图像,那么图像的初始布局并不重要。清除操作将覆盖纹理的数据(请注意,并不是要进行任何实际的写入操作),并且当使用附件的第一个子通道开始时,写入的数据将位于该子通道的布局中。
它应该不会比初始布局和第一个子通道布局使用相同的布局慢。只要你清除图像。