文章目录

  • Adapters
  • Device


图形处理单元,简称GPU,一直以来都是个人计算中实现丰富渲染和计算应用的关键部件。
WebGPU是一个将GPU硬件功能暴露给Web的API
该API从零开始设计,以便有效地映射到(2014年后的)原生GPU API。
WebGPU与WebGL无关,也没有显式地针对OpenGL ES。

WebGPU将物理GPU硬件视为GPUAdapters。

通过GPUDevice提供与适配器的连接

管理资源和设备的GPUQueues,执行命令。

GPUDevice可能具有自己的内存,并可高速访问处理单元。

GPUBuffer和GPUTexture是由GPU内存支持的物理资源。

GPUCommandBuffer和GPURenderBundle是用户记录命令的容器。

GPUShaderModule包含着色器代码。其他资源,如GPUSampler或GPUBindGroup,配置了GPU使用物理资源的方式。

GPU通过将数据通过管线来执行GPUCommandBuffer中编码的命令,这是固定功能和可编程阶段的混合。
可编程阶段执行着色器,这些着色器是专为在GPU硬件上运行而设计的特殊程序。
pipeline的大部分状态由GPURenderPipeline或GPUComputePipeline对象定义。
这些管线对象中未包含的状态在编码时通过命令设置,例如beginRenderPass()或setBlendConstant()。

Adapters

Adapters适配器标识系统上 WebGPU 的实现: 既是浏览器底层平台上计算/渲染功能的实例,又是浏览器在该功能之上实现 WebGPU 的实例。

适配器 不唯一表示底层实现: 多次调用 requestAdapter() 每次都会返回不同的 adapter 对象。 每个 适配器 对象只能用于创建一个 device: 在 requestDevice() 成功后,适配器变为 无效。 此外,适配器 对象可以随时 过期。

注: 这确保应用程序在创建设备时使用最新的系统状态来选择适配器。 它还通过使它们看起来相似来鼓励对更多场景的鲁棒性:首次初始化、由于拔下适配器而重新初始化、由于测试 GPUDevice.destroy() 调用而重新初始化等。

如果 适配器 具有重要的性能警告以换取更广泛的兼容性、更可预测的行为或改进的隐私的某种组合,则它可以被视为 后备适配器。 fallback adapter 不需要在每个系统上都可用。

adapter 具有以下内部插槽:

  • [[features]],类型为 ordered set,只读
    features 可用于在此适配器上创建设备。
  • [[limits]],类型为 supported limits,只读
    可用于在此适配器上创建设备的 best 限制。每个适配器限制必须与 supported limits 中的默认值相同或 better。
  • [[fallback]],布尔类型
    如果设置为“true”,则表示该适配器是 fallback adapter。
  • [[unmaskedIdentifiers]],类型为 ordered set
    用户代理已选择为此适配器报告的 GPUAdapterInfo 字段的名称列表。 最初填充了用户代理在未经用户同意的情况下选择报告的任何 GPUAdapterInfo 字段的名称。

Adapters 通过 GPUAdapter 暴露出来。

Device

device 是 适配器 的逻辑实例,通过它创建 内部对象。 它可以在多个 代理 之间共享(e.g. dedicated workers)。

设备 是从它创建的所有 内部对象 的独占所有者:
当设备变为无效(是 lost 或 destroyed)时,它和在其上创建的所有对象(直接,例如 createTexture(),或间接地,例如 createView()) 隐式变为 unusable。

device 具有以下内部插槽:

  • [[adapter]],类型为 适配器,只读
    创建此设备的 适配器。
  • [[features]],类型为 ordered set,只读
    可在此设备上使用的 特性。 不能使用附加功能,即使底层 适配器 可以支持它们。
  • [[limits]],类型为 支持的限制,只读
    可在此设备上使用的限制。 不能使用 更好 限制,即使基础 适配器 可以支持它们。

<分区算法> 当一个新设备 device 从 adapter adapter 创建 使用 GPUDeviceDescriptor 描述符:
将 device.[[adapter]] 设置为 adapter。

将 device.[[features]] 设置为 set 中的值 描述符.requiredFeatures。

让 device.[[limits]] 成为具有默认值的 supported limits 对象。 对于 descriptor.requiredLimits 中的每个 (key, value) 对,设置 key对应的成员 在 device.[[limits]] 到 value 的 better 值 或 supported limits 中的默认值。

每当用户代理需要撤销对设备的访问权限时,它都会在设备的 device timeline 上调用 lose the device(device, “unknown”),可能会提前 当前在该时间线上排队的其他操作。

如果操作失败并产生副作用,这些副作用会明显改变设备上对象的状态或可能破坏内部实现/驱动程序状态,则设备应该丢失以防止这些更改被观察到。
Devices 通过 GPUDevice 暴露出来