通过图像对象将图像数据传输到 GPU?

Transfer image data to GPU via an image object?

我创建了一个图像对象并绑定了一个带有 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT 标签的内存。然后,我映射内存并将图像数据复制到指针中。最后,我取消映射内存并将图像传输到 GPU。是吗?

通过VkImageVkBuffer将CPU数据复制到GPU有什么区别?

What is the difference between copying CPU data to the GPU via a VkImage and a VkBuffer?

如果我们谈论在从 CPU 向 GPU 传输数据期间使用暂存分配,那么基本上,通过 VkBuffer 进行复制是正确的方法。通过 VkImage 复制可能在有限的情况下有效,但您几乎肯定会发现自己在以后删除了该代码。

通过 VkImage 复制的问题是您的临时暂存分配受驱动程序对主机可见图像的限制。您可能会发现它在您第一次尝试在屏幕上显示内容时效果很好,但您很快就会 运行 进入特定于设备的限制,这些限制会阻止 VkImage 暂存缓冲区用于 mipmap、压缩纹理、数组纹理或任何异国情调的东西。

基本上,VkBuffer 是作为纹理数据暂存缓冲区的正确工具。主机可见 VkImage 不适用于暂存,我相信它主要用于您想要显示在 CPU 上生成的图像流的情况(例如显示视频帧CPU 已解码,或显示来自软件渲染器的输出)