我正在计算着色器中执行行进立方体算法。计算阶段生成的顶点将输入到顶点阶段。
Compute -> Vertices -> Render
无法知道计算阶段将输出多少个顶点,因此我需要一个如下所示的存储缓冲区
:
layout(set = 1, binding = 0) buffer Count{
int value;
} count;
layout(set = 2, binding = 0) buffer Mesh {
vec4 vertices[1<<15];
} mesh;
顶点不需要往返 CPU,但计数是 vkCmdDraw
命令使用的变量。因此,我需要将计数缓冲区放入主机可见内存中,映射该内存并在计算阶段后执行 memcpy。这是解决这个问题的好方法还是有其他方法可以让我不必将数据读回CPU?
最佳答案
嗯,这正是vkCmdDrawIndirect是为了.顶点计数存储在 Vkuffer
中,这使得 CPU 往返变得不必要。
关于opengl - 计算与图形的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60928153/