WebGPU 导入[2] - 核心概念与重要机制解读
目录
- Raw WebGPU。
而能创建这两个特定 GPU 计算的“通道编码器”的,叫做“指令编码器”,也就是
GPUCommandEncoder
:指令编码器除了承载上面两个通道编码器的编码结果外,还额外提供了资源的拷贝行为、查询行为的编码,例如纹理与缓冲对象之间的互相拷贝等:
在实际的代码中,是按
GPUCommandEncoder
调用某个方法的顺序进行记录的,例如beginRenderPass()
、copyBufferToTexture()
等。队列与指令缓冲
指令编码器的
finish
方法返回一个指令缓冲对象,即GPUCommandBuffer
,这个可以提交给队列对象GPUQueue
,队列对象是设备对象上的一个实例字段。排列在队列上的除了指令缓冲,还有队列自己发出的“队列时间线”上的行为,例如写入缓冲数据、写入纹理数据等。图示如下:
2. 重要机制
① 缓冲映射机制
缓冲映射,简单的说就是使得内存、显存中的缓冲数据可以交换着用的一种机制。详细的文章可以参考:
② 时间线
WebGPU 规范中不同的行为也许发生在的层面是不一样的,每个层面在运作的过程中都有它自己的时间线。规范给出了三条时间线:
-
内容时间线:内容时间线上的行为,大多数是 JavaScript 对象的创建、JavaScript 方法的调用,这是最上面的一层;
-
设备时间线:此“设备”非
GPUDevice
;设备时间线上的行为,大多数是指浏览器底层 WebGPU 实现中的变化,这类行为的层级低于 JavaScript 的执行,操作的是“内部对象”,却还没到 GPU 执行的部分,例如生成指令缓冲; -
队列时间线:此“队列”非
GPUQueue
;队列时间线上发生的行为,通常就是指 GPU 中具体任务的执行,例如绘制、资源上载、资源复制、通用计算调度等。
-