在vulkan API中,我们如何从gpu内存中读取数据,比如一些由计算着色器计算的数据?
答案 0 :(得分:2)
首先等待与计算调用相关的围栏。然后将您编写结果的内存映射到内存中,如果内存不连贯,则需要使范围无效。
从映射操作中获取的指针中读取数据。
答案 1 :(得分:1)
我刚刚遇到了同样的问题。我认为@ratchet freak的评论1已经到了重点。就我而言,我试图将数据从texture(VkImage)传输到主机内存。我使用了线性缓冲区(VkBuffer)作为登台缓冲区。我最初使用
VkMemoryPropertyFlags flag = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
,发现memcpy()非常慢。然后我添加了VK_MEMORY_PROPERTY_HOST_CACHED_BIT,速度变为大约10倍。