Metal 总体介绍

时间:2021-7-5 作者:qvyue

话题

必需品

基本任务和概念

通过一系列示例代码项目熟悉Metal。

将开放式GL代码迁移到金属

用Metal替换应用程序已弃用的OpenGL代码。

将您的金属代码移植到Apple Silicon

创建可以在Apple芯片和基于Intel的Mac计算机上运行的Metal应用程序的版本。

GPU

在运行时访问GPU设备。GPU构成了Metal开发的基础。

获取默认GPU

选择要在其上运行金属代码的系统的默认GPU设备。

Mac OS中的GPU选择

考虑到GPU的功能,功率或性能特征,选择一个或多个在其上运行您的Metal代码的GPU。

protocol MTLDevice

用于绘制图形或进行并行计算的GPU的Metal接口。

GPU功能

查找特定GPU系列的功能信息。

命令设定

设置基础架构以在GPU上执行您的自定义代码。

设置命令结构

探索Metal如何在GPU上执行命令。

准备您的Metal应用以在后台运行

通过暂停将来使用GPU并确保计划先前的工作,使您的应用准备好进入后台。

protocol MTLCommandQueue

用于组织命令缓冲区以供GPU执行的队列。

protocol MTLCommandBuffer

一个容器,用于存储编码的命令以供GPU执行。

protocol MTLCommandEncoder

将GPU命令写入命令缓冲区的编码器。

反采样

通过测量应用程序中的GPU统计信息来提高性能。

并行计算

在GPU上并行处理任意计算

在计算函数中处理纹理

通过将数据置于纹理中,对结构化数据执行并行计算。

创建线程和线程组

了解Metal如何组织计算处理工作负载。

计算线程组和网格大小

分派计算处理工作负荷时,计算线程组和网格的最佳大小。

class MTLComputePipelineDescriptor

一个用于自定义如何编译新的计算管道状态对象的对象。

protocol MTLComputePipelineState

包含已编译的计算管道的对象。

class MTLComputePassDescriptor

计算过程的配置,用于创建计算命令编码器。

protocol MTLComputeCommandEncoder

用于对计算过程中的命令进行编码的对象。

光线跟踪

使用金属加速光线追踪

使用基于GPU的并行处理实现光线跟踪渲染。

protocol MTLAccelerationStructure

模型数据的集合,组织起来以允许GPU加速光线与模型的相交。

class MTLAccelerationStructureDescriptor

定义新加速结构配置的类的基类。

class MTLAccelerationStructureGeometryDescriptor

描述符的基类,该描述符包含要转换为光线跟踪加速结构的几何数据。

class MTLAccelerationStructureBoundingBoxGeometryDescriptor

对要变成加速结构的边界框列表的描述。

class MTLAccelerationStructureTriangleGeometryDescriptor

对要转化为加速结构的三角形图元列表的描述。

class MTLPrimitiveAccelerationStructureDescriptor

包含几何图元的加速结构的描述。

class MTLInstanceAccelerationStructureDescriptor

从原始加速结构实例构建的加速结构的描述。

struct MTLAccelerationStructureInstanceDescriptor

实例化几何加速结构中实例的描述。

protocol MTLIntersectionFunctionTable

Metal用来执行光线跟踪相交测试的可见函数表。

class MTLIntersectionFunctionTableDescriptor

一种描述,描述如何创建相交函数表。

class MTLIntersectionFunctionDescriptor

对执行相交测试的可见功能的描述。

protocol MTLAccelerationStructureCommandEncoder

一个对象,用于对构建或调整加速结构的命令进行编码。

渲染图

通过发出绘图调用来渲染图形,如果要绘制到屏幕上,则选择一个演示对象。

{} 使用渲染管道渲染基元

渲染一个简单的2D三角形。

{} 创建和采样纹理

将图像数据加载到纹理中并将其应用于四边形。

{} 使用深度测试计算原始可见性

通过使用深度纹理来确定场景中哪些像素可见。

{} 自定义渲染过程设置

通过创建自定义渲染通道,渲染为屏幕外纹理。

从一个输入流生成多个输出顶点流

有效地渲染到多个图层或视口。

渲染管道

指定应如何渲染图形基元。

class MTLRenderPassDescriptor

一组渲染目标,用于保存渲染过程的结果。

protocol MTLRenderCommandEncoder

用于对渲染过程的命令进行编码的对象。

protocol MTLParallelRenderCommandEncoder

一个对象,它分割单个渲染通道,以便可以同时从多个线程对其进行编码。

型号I / O

在与图形处理相关的纹理中指定精确位置。

介绍

在屏幕上显示金属纹理。

可绘制对象

从可绘制对象中获取要绘制的纹理。

着色器

着色器创作

用Metal Shading Language编写您的GPU代码。

图书馆

将着色器组织到库中。

功能

检索有关渲染和计算功能的信息。

资源

创建对象以保存GPU数据。

设置资源存储模式

设置定义内存位置和资源访问权限的存储模式。

将数据复制到私有资源

使用blit命令编码器将缓冲区或纹理数据复制到专用资源。

同步托管资源

同步CPU或GPU的托管资源的内容。

在连接的GPU之间传输数据

在GPU之间使用高速连接来快速传输数据。

减少Metal应用程序的内存占用量

了解有关在iOS和tvOS中有效使用内存的最佳做法。

protocol MTLResource

GPU可以访问的内存分配。

protocol MTLBlitCommandEncoder

编码器,对内存复制,过滤和填充命令进行编码。

class MTLBlitPassDescriptor

blit pass的配置,用于创建blit命令编码器。

protocol MTLResourceStateCommandEncoder

编码器,其对修改资源配置的命令进行编码。

class MTLResourceStatePassDescriptor

资源状态传递的配置,用于创建资源状态命令编码器。

缓冲液

创建和操作非结构化GPU资源。

贴图

创建和操纵结构化的GPU资源。

间接命令缓冲区

通过重用命令来节省编码时间,或者通过在GPU上生成命令来创建GPU驱动的渲染管道。

创建一个内存分配,您可以从中分配资源。

同步化

管理对您应用中资源的访问,以避免数据危害。

对象大小调整和定位

设置许多金属对象的大小和位置。

struct MTLOrigin

区域左上角的坐标。

struct MTLRegion

对象元素子集的边界。

struct MTLSize

对象的尺寸。

typealias MTLCoordinate2D

视口中的坐标。

func MTLCoordinate2DMake(Float, Float) -> MTLCoordinate2D

返回具有指定坐标的新2D点。

打包的向量和矩阵

typealias MTLPackedFloat3

一种包含三个32位浮点值且无其他填充的结构。

typealias MTLPackedFloat4x3

一种结构,包含按列优先顺序排列的32位浮点值的4×4矩阵的前三行。

时间

typealias MTLTimestamp

时间戳,以马赫绝对时间表示。

工具

尽早诊断金属编程问题

使用Xcode的诊断工具识别开发期间的Metal框架和着色器编程错误。

开发在模拟器中运行的Metal应用

在Simulator中对您的Metal应用进行原型设计和测试。

{}在Metal App中支持模拟器

修改Metal Apps以在Simulator中运行。

帧捕获调试工具

在运行时分析和优化您的应用性能。

在仪器中使用Metal System Trace来分析您的应用程序

通过检查应用程序的CPU和GPU利用率问题来平滑帧速率。

使用GPU计数器仪器优化性能

在Instruments中检查您的应用程序对GPU资源的使用,并根据需要调整您的应用程序

GPU编程技术

了解各种在GPU上高效执行代码的策略,并尝试使用其随附的示例代码。

{} 使用平铺着色器使用前向加光照渲染场景

使用Apple GPU上的最新功能实现正向渲染器。

{}在Objective-C中使用延迟照明渲染场景

通过实现针对即时模式和基于图块的延迟渲染器GPU优化的延迟照明渲染器,避免昂贵的照明计算。

{} 在Swift中使用延迟照明渲染场景

通过实现针对即时模式和基于图块的延迟渲染器GPU优化的延迟照明渲染器,避免昂贵的照明计算。

{} 在C ++中使用延迟照明渲染场景

通过实现针对即时模式和基于图块的延迟渲染器GPU优化的延迟照明渲染器,避免昂贵的照明计算。

{} 使用更少的渲染过程渲染反射

使用图层选择来减少生成环境贴图所需的渲染遍数。

从通用着色器源为不同细节级别创建管道。

使用参数缓冲区动态渲染地形

使用参数缓冲区通过GPU驱动的管线实时渲染地形。

在视图中混合金属和Open GL渲染

使用可互操作的纹理在同一视图中使用Metal和OpenGL进行绘制。

金属现代渲染

使用高级金属功能(例如间接命令缓冲区,稀疏纹理和可变速率栅格化)来实现现代渲染算法。

用金属处理HDR图像

使用Apple GPU的最新功能实施后处理管道。

参考

金属结构

金属枚举

金属类型别名

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。