【问题标题】:Transfer image data to GPU via an image object?通过图像对象将图像数据传输到 GPU?
【发布时间】:2020-04-16 17:55:36
【问题描述】:

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

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

【问题讨论】:

  • "映射内存并将图像复制到其中" 通过什么复制图像? Vulkan API 函数?你只是复制CPU上的数据吗? “最后,取消映射内存并将图像数据传输到 GPU” 如果您将数据复制到内存,那么它已经被“传输”了。在 Vulkan 中取消映射内存的唯一原因是您准备好删除内存对象。
  • 我根据对原文的最佳理解编辑了这个问题。请验证它是否仍然符合您的原始意图。
  • @krOoze 谢谢。这是我的初衷。对不起,我的英文表达不好。

标签: memory gpu vulkan


【解决方案1】:

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 解码的视频帧,或显示输出来自软件渲染器)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2020-10-19
    • 2020-10-11
    • 1970-01-01
    • 2011-08-15
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多