标签:mode buffer 批量 必须 isa 纹理 evel ring alt
看完这个 WWDC 之后的总结。
Metal 可以在单位时间内提供 10 倍的 draw call 调用。
每一次 draw call 调用都必须有自己的状态向量,比如着色器、纹理等。而改变状态向量对 CPU 来说是比较耗时的,因此单位时间内 draw call 的次数有限。
?
CPU 负责把状态向量的改变翻译为硬件命令 (hardware command),然后告诉 GPU。
在 Metal 之前,如果使用了 GPU 的 API,每一帧耗在 CPU 的时间,可以分为应用中 API 时间和把 GPU 的 API 调用翻译为 GPU 指令的时间。而 Metal减少的就是这部分时间。 ?
下面就是使用了 Metal 后的时间对比。
?
?
这里的频率是从用户的角度看到的,即用户不会经历 build 的过程。
写代码时用到的所有类型之间的关系。
?
在编译之后,模型如下所示,不需要进一步的验证之类的事情。
?
Command encoders generate commands immediately,没有 state validation 的过程,可以理解为直接调用硬件驱动。
A7处理器之后,
Metal 提供了两种资源类型:
- Textures (formatted images)
- Data buffers (unformatted memory)
资源的结构(size、level、format)不可变,这样子就避免了昂贵的 resource validation 操作。
关于 Graphics rendering,为一次 rendering “pass” 产生硬件指令。
不会在 draw 时候进行编译,避免了昂贵的编译和 state validation。
有些状态的改变会导致重写编译,因此这些状态被设置为不可变的。
?
A7 是一个 Tile-based deferred-mode renderer,具体啥意思我也不知道。
在每一个 render pass 的起始和结束,都会有一次 load 和 store 操作。
使用 Metal,可以指定 load 和 store 操作的类型。
load 时的可选类型是 Don’t care, load, clear。
Store 时的可选类型是 Don’t care, store, multisample resolve。
?
假设一次 frame 有两次 render pass,处理了 color 和 depth 的数据,那么 color 和 depth 的 framebuffer,都需要两次读和写操作。
?
使用 Metal 指定了相应的 load 和 store 操作时候,只需要 color framebuffer 的一次读操作和两次写操作。
Unified shading language for graphics and compute processing
既用于图像处理,又用于并行数据处理。
?
大致分两步。
标签:mode buffer 批量 必须 isa 纹理 evel ring alt
原文地址:http://www.cnblogs.com/huahuahu/p/Working-with-MetalOverview.html