[英]Metal Compute Kernel vs Fragment Shader
除標准vertex
和fragment
函數外,Metal還支持kernel
。 我發現了一個將圖像轉換為灰度的金屬kernel
示例。
在kernel
和fragment
之間做這個有什么區別? 計算kernel
做什么(更好) fragment
着色器不能,反之亦然?
Metal有四種不同類型的命令編碼器:
MTLRenderCommandEncoder
MTLComputeCommandEncoder
MTLBlitCommandEncoder
MTLParallelRenderCommandEncoder
如果您只是在進行圖形編程,那么您最熟悉的是MTLRenderCommandEncoder
。 您可以在此處設置頂點和片段着色器。 這被優化以處理大量的繪制調用和對象原語。
內核着色器主要用於MTLComputeCommandEncoder.
我認為內核着色器和計算編碼器用於圖像處理示例的原因是因為您沒有像渲染命令編碼器那樣繪制任何基元。 盡管兩種方法都使用圖形,但在這種情況下,它只是修改紋理上的顏色數據,而不是計算屏幕上多個對象的深度。
計算命令編碼器也更容易設置為使用線程進行並行計算:
https://developer.apple.com/reference/metal/mtlcomputecommandencoder
因此,如果您的應用程序想要在數據修改上使用多線程,那么在此命令編碼器中執行此操作比使用render命令編碼器更容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.