我已经读过(在自己遇到限制之后),为了将数据从主机复制到VK_IMAGE_TILING_OPTIMAL
VkImage,最好使用VkBuffer而不是 VkImage 作为暂存图像,以避免对 mipmap 和层数的限制。(这里和这里)
因此,当涉及到实现一个glReadPixels
类似功能以将渲染到纹理的结果读取回主机时,我认为使用暂存 VkImagevkCmdCopyImageToBuffer
而不是使用暂存 VkImage 读取暂存 VkBuffer 是一个好主意。
但是,我还不能让它工作,我看到了大部分预期的图像,但是图像的矩形块位置不正确,甚至有些位重复。
我很有可能在某个地方搞砸了我的同步或布局转换,我将继续调查这种可能性。
但是,我无法从规范中弄清楚使用vkCmdCopyImageToBuffer
图像源 usingVK_IMAGE_TILING_OPTIMAL
是否实际上应该“取消平铺”图像,或者如果我尝试这样一个事物。
所以我的问题是:源图像是vkCmdCopyImageToBuffer
用VK_IMAGE_TILING_OPTIMAL
线性平铺数据还是最佳(实现定义)平铺数据填充缓冲区?