如何使用Metal清除GPU纹理?

3
我有一张只能由GPU访问的3D纹理,在每一帧开始时我尝试将其清空。我已经尝试使用电脑着色器将每个元素设置为零,但对于一个64x64x64的纹理来说,这需要近3毫秒的时间,而且我想使用更大的东西。 如果我像颜色附件的清空加载操作那样做就太好了,但我不认为在这种情况下可能会实现。 如何最快地清除纹理?

你的计算着色器是什么样子的?你可能正在创建最大可能的线程组大小(通常为512或1024),并启动足够多的线程组以完全填充GPU? - Fooberman
1个回答

5
最简单的方法是使用renderPassDescriptor的loadActions,如下所示:
MTLRenderPassDescriptor *rpdesc = [MTLRenderPassDescriptor renderPassDescriptor];
rpdesc.colorAttachments[0].clearColor = MTLClearColorMake(0,0,0,0);
rpdesc.colorAttachments[0].loadAction = MTLLoadActionClear;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接