金属计算内核与片段着色器

Eri*_*ner 6 ios metal

kernel除标准vertexfragment功能外,还支持金属.我找到了一个kernel将图像转换为灰度的金属示例.

kernelvs中这样做有什么区别fragment?计算机可以kernel做什么(更好)fragment着色器不能,反之亦然?

Jan*_*son 7

Metal有四种不同类型的命令编码器:

  • MTLRenderCommandEncoder
  • MTLComputeCommandEncoder
  • MTLBlitCommandEncoder
  • MTLParallelRenderCommandEncoder

如果您只是进行图形编程,那么您最熟悉的是MTLRenderCommandEncoder.您可以在此处设置顶点和片段着色器.这被优化以处理大量的绘制调用和对象原语.

内核着色器主要用于MTLComputeCommandEncoder.我认为内核着色器和计算编码器用于图像处理示例的原因是因为您没有像渲染命令编码器那样绘制任何基元.尽管两种方法都使用图形,但在这种情况下,它只是修改纹理上的颜色数据,而不是计算屏幕上多个对象的深度.

计算命令编码器也更容易设置为使用线程进行并行计算:

https://developer.apple.com/reference/metal/mtlcomputecommandencoder

因此,如果您的应用程序想要在数据修改上使用多线程,那么在此命令编码器中执行此操作比使用render命令编码器更容易.