簡體   English   中英

金屬計算內核與片段着色器

[英]Metal Compute Kernel vs Fragment Shader

除標准vertexfragment函數外,Metal還支持kernel 我發現了一個將圖像轉換為灰度的金屬kernel示例。

kernelfragment之間做這個有什么區別? 計算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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM