计算着色器的动态输出

Dynamic output from compute shader

如果我在计算着色器中生成 0-12 个三角形,有没有办法可以将它们流式传输到缓冲区,然后用于渲染到屏幕?

我目前的策略是:

如果我想从这里渲染,我需要跳过空内存。这听起来很难看,但目前可能没有其他办法。我知道 CUDA 几何着色器可以有可变长度输出,但我想知道 if/how iOS 上的游戏可以在 GPU 上生成可变长度数据。

更新 1:

我一写出这个问题,就想到了使用第二个缓冲区的可能性,它会指出每个有多少个三角形可用。然后顶点着色器将处理该块的所有三角形的所有顶点。

虽然这不会解决未使用内存的问题,但由于我有大量线程,因此浪费的内存总量将相当可观。

您正在寻找的是 D3D 的“AppendStructuredBuffer”的 Metal 等价物。您想要一种可以自动添加结构的类型。

我不熟悉 Metal,但它确实支持 Atomic operations,例如 'Add',这就是您滚动自己的 Append Buffer 真正需要的。将计数器初始化为 0,让每个线程向计数器添加“1”,并使用原始值作为要写入缓冲区的索引。