【发布时间】:2021-09-10 19:21:45
【问题描述】:
vulkan计算机着色器中是否有任何方法可以绑定CPU内存中的特定位置,以便我可以直接用着色器语言访问它。
例如,如果我有一个变量声明int a[]={contents........};,我可以将a的地址绑定为绑定位置0,然后在glsl中访问类似这样的东西
layout(std430,binding = 0) {
int a[];
}
我想这样做是因为我不想花时间从缓冲区写入和读取。
【问题讨论】:
-
SSBO 就是:访问 RAM(通过绑定到内存的 VkBuffer)。这与 SSBO 有何不同?
-
@NicolBolas VkBuffer 有自己不同的地址。我想要 VkBuffer 或任何东西在我想要的地址中。这样我就不需要向缓冲区写入数据了。
-
"VkBuffer 有自己不同的地址。" 你说的“地址”是什么意思?在您的 C 代码中,
VkBuffer对象是一个指针,是的,但它只是指向一个表示 Vulkan 中的缓冲区的 C 对象。该对象的地址不像 GPU 可访问的设备内存中的地址。 -
"我不想花时间在缓冲区中写入和读取。" 为什么无论您尝试做什么都会比 SSBO 慢? “从缓冲区写入和读取”是如何从内存中写入和读取。缓冲区代表内存。 GPU 在使用缓冲区时没有执行任何特殊的间接操作。
-
@NicolBolas 我问有没有办法将 VkBuffer 的指针设置为我想要的位置?我希望 VkBuffer 成为我的 C 对象
标签: vulkan