本模块内容,全部来自MetalProgrammingGuide


Metal framework支持GPU加速的3D graphic render和data-parallel computation。Metal提供一套现代的、streamlined(流式的) API,用于细粒度、low-level的控制organization(组织)、processing(处理)、submission(提交) graphics和computation command,以及对这些命令相关的associated data和资源的管理。Metal的一个主要目标是讲GPU workload调用产生的CPU消耗最小化。

本模块聊了一下Metal的相关概念:command submission模块,内存管理模块,indepndently compiled code for graphics shader and data-parallel computation function。以及详细聊了如何使用metal api来写一个app

本模块的目录如下:

Metal Framework Reference是一个描述metal framework interface的文档合集

Metal Shading Language Specification是metal shading language的spec文档,用于metal app中的graphics shader和compute function

除此之外,在苹果开发者网站中,还有用Metal写的sample code

Fundamental Metal Concepts

Metal提供了一套single、unified programming interface and language,用于graphics和data-parallel computation工作流。Metal使得你可以将graphics和computation tasks更有效的结合在一起,而不用使用单独的api和shading languages。

Metal framework提供以下:

  • low-overhead interface。Metal的设计使其尽可能的消除(比如状态验证导致的)性能瓶颈。你可以通过GPU的异步操作,来通过多线程进行并行的创建和提交command。更多关于metal command submission的详细信息,参见Command Organization and Execution Model
  • Memory and resource management。Metal framework描述了GPU内存分配的buffer和texture object。使用特定pixel format的texture objects可倍用于texture images或者attachments。更多关于metal memory object的详细信息,参见Resource Objects: Buffers and Textures
  • Integrated support for both graphics and compute operations。Metal对graphics和compute operation使用相同的data structures和resources(比如buffer、texture、command queue)。同样的,metal shading language支持graphics和compute functions。metal framework支持runtime interface、graphics shaders、compute function share资源。更多关于使用metal写graphics render或者data-parallel compute operations相关的app,参考Graphics Rendering: Render Command EncoderData-Parallel Compute Processing: Compute Command Encoder
  • precompiled shaders。Metal shader可以在build app code的时候编译,然后在运行时直接加载。这种工作流使得凑得generation更好,以及debug shader code更容易。(Metal也支持shader code的runtime编译)。更多关于使用metal framework code来操作metal shader,参考Functions and Libraries。关于metal shading language,参考Metal Shading Language Specification

metal app无法在background调用metal command,因为metal app认为它已经terminated了。

本节教程就到此结束,希望大家继续阅读我之后的教程。

谢谢大家,再见!


原创技术文章,撰写不易,转载请注明出处:电子设备中的画家|王烁 于 2021 年 9 月 13 日发表,原文链接(http://geekfaner.com/shineengine/blog46_MetalProgrammingGuide_1.html)