如何从gpu内存中读取数据,而不是使用memcpy?

时间:2017-03-27 09:27:07

标签: gpu vulkan compute-shader

在vulkan API中,我们如何从gpu内存中读取数据,比如一些由计算着色器计算的数据?

2 个答案:

答案 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倍。