简介:
Metal Shading Language(以下简称 MSL
) 很明显是用于 Metal 程序中的着色语言, 是⼀个⽤来编写 3D 图形渲染逻辑和并行计算核⼼逻辑的编程语言, 编写 Metal 框架的 APP 需要使⽤ MSL
程序.MSL
与 Metal 框架配合使⽤, Metal 框架管理 MSL
的运行和可选编译选项. MSL
使用 Clang 和 LLVM, 编译器对于在 GPU 上的代行效率有更好的控制.
由于 GPU 的擅长的是高并发的数学运算, 而不是逻辑运算, 所以
MSL
的语法相比较常用的编程语言还是比较简单的, 没有那么多复杂的语法, 比如 Lambda表达式, 动态转换操作符, 递归函数调⽤ 等等, 更多的是基本数据类型 标量 , 向量 , 矩阵 ......
MSL 数据类型 :
Metal 标量数据类型
Metal 数据类型Metal 向量和矩阵数据类型
----------- 向量
- booln
- charn
- shortn
- intn
- ucharn
- ushortn
- uintn
- halfn
- floatn
向量中的 n, 指的是维度.
----------- 矩阵
- halfnxm
- floatnxm
nxm 分别指的是矩阵的行数和列数.
缓存 buffer
在 Metal 中实现缓存靠的是一个指针.它指向一个在 Device 或者 constant 地址空间中的内建或是开发者自定义的数据块.缓存可以被定在程序域中, 或是当做函数的参数传递.
纹理Textures
纹理Textures采样器 Samplers
采样器 Samplers函数修饰符
MSL
支持下列的函数修饰符:
-
kernel
表示该函数是⼀个数据并行计算着色函数, 它将被分配在⼀个⼀维/二维/三维的线程组网格中执行. -
vertex
表示该函数是⼀个顶点着色函数,它将为顶点数据流中的每个顶点数据执行一次, 然后为每个顶点⽣成数据输出到绘制管线中去. -
fragment
表示该函数是⼀个片元着色函数,它将片元数据流中的每个⽚元和其关联的数据执行一次, 然后为每个片元生成数据输出到绘制管线中去.
变量与参数的地址空间修饰符
MSL
使用 "地址空间修饰符号", 来表示一个函数变量或是参数被分于那块内存区域. 下面这些修饰符描述了不相交叠地址空间:
-
device
— 设备地址空间 -
threadgroup
— 线程组地址空间 -
constant
— 常量量地址空间 -
thread
— thread 地址空间
函数参数和变量
图形绘制 或是 并行计算着色函数 的输入/输出都需要通过参数传递(除了常量地址空间变量和程序域中定义的采样器以外). 参数可以是如下之一:
-
device buffer
— 设备缓存 -
constant buffer
— 常量量缓存 -
texture object
— 纹理理对象 -
sample object
— 采样器器对象 -
threadgroup
— 线程共享的缓存
用于寻址缓存,纹理,采样器属性修饰符
device 和 constant buffers — [[ buffer ( index ) ]]
texture —[[ texture ( index ) ]]
sampler — [[ sampler ( index ) ]]
threadgroup buffer — [[ threadgroup ( index ) ]]
网友评论