Metal - 命令设定- MTLCommandBuffer 缓冲区

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

宣言

protocol MTLCommandBuffer

概述

不要自己实现此协议,而是通过调用MTLCommandQueue对象的makeCommandBuffer()方法来创建命令缓冲区对象,只能将命令缓冲区提交以在创建它的命令队列上执行,保证发送到单个命令队列的所有命令缓冲区都按照将命令缓冲区排队的顺序执行。

创建命令缓冲区后,您将创建编码器对象,以用命令填充缓冲区。该MTLCommandBuffer协议具有的方法来创建特定类行的命令的编码器:MTLRenderCommandEncoder,MTLComputeCommandEncoder,MTLBlitCommandEncoder 和 MTLParallelRenderCommandEncoder。在任何给定时间,对于特定的命令缓冲区,只有单个编码器可以处于活动状态。您创建一个编码器,然后继续将命令添加到同一缓冲区。当您准备好执行一组已编码的命令时,请调用命令缓冲区的commit()方法来计划执行缓冲区。

提交命令缓冲区以供执行后,对命令 缓冲区的唯一有效操作时等待其被调度或完成(使用同步调用或处理程序块)并检查命令缓冲区的执行状态。使用调度程序和完成程序时,它们是按执行顺序调用的块,这些处理程序应迅速执行;如果需要啊那排昂贵或阻塞的工作,则将该工作推迟到另一个线程。

在多线程应用程序中,建议将整体任务分解为可以单独编码的子任务。为每个工作块创建一个命令缓冲区,然后enqueue()在这些命令缓冲区对象上调用方法以建立执行顺序,填充每个缓冲区对象(使用多个线程)并提交它们。当这些命令缓冲区可用时,命令队列会自动计划并执行这些命令缓冲区。

你可能感兴趣的:(Metal - 命令设定- MTLCommandBuffer 缓冲区)