01-Metal框架介绍
Metal框架介绍
Metal 2014年WWDC首次走入移动领域.
Metal Kit
目的:就是让iOS开发者用极少的代码,解决Metal渲染问题.让开发变的更加轻松,方便,快速.
视图管理: MTKView.
经典GPU架构
在继续下面的学习前,我们先了解一下经典的GPU的架构.GPU是大规模并行机器。
上图中,展示了Vertex Stage(顶点阶段)和Fragment Stage(片段阶段)进行了多次重复和并行运算基本的GPU经典架构上处理片元并且产生深度和颜色数据缓存区和纹理.在这个架构中有一个具有决定性的特性,就是Vertex Stage(顶点阶段)的输出,直接提供给Fragment Stage(片元阶段)
TBDR GPU结构
Tile- based Deferred Rendering Architecture的架构
所有的A-series的GPU,都是基于TBDR架构.也就是说所有的A11的都是基于TBDR架构.
TBDR也是有所优化的.第一主要不同的就是Vertex Stage的输出不再直接提供给Fragment Stage.不同的,当基元从Vertex State输出时,它们将置于对齐屏幕的小图块中并且存储到内存里.
这样的改变, 使得Vertex Stage可以与Fragment Stage相对的异步运行. 当一个渲染通道的Fragment Stage运行时, 硬件可以在为了的渲染通道并执行Vertex Stage, 异步运行Vertex Stage. 可以大幅度的提高性能. Vertex Stage常常被固定功能硬件大量使用. 而Fragment Stage, 在数据和宽带处理领域广泛应用完全重叠两者使得我们可以同时使用GPU上的所有硬件模块. 把基元置于图块使我们可以在一个图块里处理所有的基元.
那我们来看看如果利用这个特性.
我们在着色器核心附近的芯片上, 置入图块大小完整分辨率的深度缓冲区模板缓存区和帧缓存器.我们将这个内存称为图块内存.
图块内存有3个特性
●第一着色器内核与图块内存之间的带宽比GPU和外部存储之间的带宽, 高出很多倍. 比例与着色器内核的数据相当
●第二图块内存的访问延迟与外部存储的方面要低很多倍
●最后, 图块内存与外部存储相比,大大减少了用电量.
TBDR, 为2种主要的优化使用了这种低延迟, 低能耗, 高带宽的内存首先这种图块的深度/模板内存使得硬件可以为不透明的目标在着色器内核处理之前生成完整的深度和模板缓存信息. 这样硬件就可以在输送给着色器内核之前,完全剔除阻塞的片段. 如果后面的渲染通道, 不需要深度缓冲,那么这种全尺寸深度缓冲区就可以了. 通过无记忆的渲染目标, 完全忽略. 节省了大量的内存带宽存储空间和电量. 其次图块内存被用于在芯片上存储颜色缓存区, 混合操作会很快, 因为不再需要从外部存储获取全尺寸帧缓冲. 当全部图块运行完毕的时候, 图块内存只被写入一次. 这样节省了一大部分的电量和带宽。提高了性能, 由于这个内存的速度更快, 所以现在占用率更高了. 有了帧缓存区,你可以使用自定义的混合. 并启用多种先进的技术与无记忆的帧缓存区器结合.
这样,很多技术都无需消耗外部存储. 所以即使带宽有限, TBDR, 也可以表现出优越的性能. TBDR消耗更低的电量. 这对电池驱动设备十分重要.
A11 GPU架构
现在让我们回到A11的GPU.上面,在A11上苹果做出第一个GPU架构的改变是
你可以对你的片段函数中的图块内存上面的数据进行直接控制. imageblock为获取图块内存中的图像数据,提供了优化通道. 你将可以使用对你的APP有意义的方式, 来布置像素而且仍然可以高效的渲染. 在imageblock是一个图块内存中的2D的数据结构, 你可以指定它的宽度, 高度, 深度和格式, Metal 2在着色语言中, 增加了纹理像素格式. 目的是通过打包的数据类型, 让你拥有对像素布局的全部控制.
第二个主要 架构优化
让你可以同时获取图块内存中,存储的所有像素.图块着色是Apple A11 GPU上新.的可编程阶段,与渲染通道一起提供计算功能.图块着色在Metal2中展现了全新的水平的性能和效率.渲染和计算操作现在能以更高的带宽更低的延迟和更低的能:耗.通过图块内存共享数据.图块着色与imageBlock紧密结合.你可以分析imageBlock的内容,总结内容存储imageBlock的Mid-Scene(进程数据)甚至修改imageblock的布局,你还可以使用线程组内存.就像一个平常 的计算内核一样使用.对于图块着色器来说,线程组内存是持续不断的.任何一个图块的连续调用,都可操作于线程组内存.起始于此的图块着色器留下的值,这同样适用于imageblock内存.它们在图块和片段的调用之间,连续不断.
除此以外还有Raster Order Group(光栅扫描顺序组)的高级版本.这个版本支持imageBlock和图块着色,并且最终Apple拓展了Metal的着色语言.赋予你对不同样本的imageblock的全部控制.