美文网首页
Metal Shading Language 简介

Metal Shading Language 简介

作者: AndyGF | 来源:发表于2020-08-28 00:18 被阅读0次

简介:

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 ) ]]

相关文章

网友评论

      本文标题:Metal Shading Language 简介

      本文链接:https://www.haomeiwen.com/subject/cbqksktx.html