在Metal计算内核中存储每像素持久性数据的正确方法是什么?

时间:2018-11-01 07:22:59

标签: ios shader metal

我正在尝试基于opencv cuda implementation

实现MoG背景扣除算法

我需要为多帧中的每个像素位置独立维护一组高斯参数。目前,我只是分配一个大的 MTLBuffer 来完成这项工作,并且在每个帧上,我都必须调用 commandEncoder.setBuffer API。有没有更好的办法?我读了有关imageblock的文章,但不确定是否相关。

此外,如果您能发现不应该从cuda直接翻译成金属的任何东西,我将非常高兴。

1 个答案:

答案 0 :(得分:0)

分配8位纹理并将中间值存储到计算着色器中的纹理中。然后,在渲染该纹理之后,可以将其作为输入纹理重新绑定到其余渲染中需要从中读取的其他任何方法。您可以在这个在Metal上的并行前缀总和的github示例项目中找到这种事情的非常详细的示例。此示例还显示了如何为Metal着色器编写XCTest回归测试。 Github MetalPrefixSum