WebGPU-初识各名词概念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 暴露出来

--- from WebGPU文档

相关推荐
shizidushu25 天前
在浏览器上使用transformers.js运行(WebGPU)RMBG-1.4进行抠图(背景移除)
webgpu·抠图·transformers.js·rmbg-1.4
贝格前端工场1 个月前
作为web3D的核心,webGL会被webGPU取代吗?
webgl·webgpu
arwind gao8 个月前
BabylonJS 6.0文档 Deep Dive 摄像机(六):遮罩层和多相机纹理
3d·webgl·webgpu·babylonjs·babylon.js
含影9 个月前
轻量封装WebGPU渲染系统示例<53>- 多盏灯灯光照在地面的效果
3d·webgpu
含影9 个月前
轻量封装WebGPU渲染系统示例<50>- Json数据描述材质等3D渲染场景信息
3d·材质·webgpu
含影9 个月前
轻量封装WebGPU渲染系统示例<44>- 材质组装流水线(MaterialPipeline)之灯光和阴影(源码)
3d·webgpu
含影9 个月前
轻量封装WebGPU渲染系统示例<46>- 材质组装管线(MaterialPipeline)灯光、阴影、雾以及多Pass(源码)
3d·webgpu
含影9 个月前
轻量封装WebGPU渲染系统示例<45>- 材质组装流水线(MaterialPipeline)灯光、阴影、雾(源码)
3d·材质·webgpu
含影10 个月前
轻量封装WebGPU渲染系统示例<39>- emissive和arm纹理支持(源码)
3d·webgpu
含影10 个月前
轻量封装WebGPU渲染系统示例<40>- 多层材质的Mask混合(源码)
3d·材质·webgpu