WebCodecs 集成
WebGPU 公开了一个 API,用于通过 importExternalTexture()
从 HTMLVideoElement
创建不透明的“外部纹理”对象。您可以使用这些对象高效地对视频帧进行采样,可能直接从源 YUV 颜色模型数据以 0 复制的方式进行采样。
不过,最初的 WebGPU 规范不允许通过 WebCodecs VideoFrame
对象创建 GPUExternalTexture
对象。对于已在使用 WebCodecs 且希望将 WebGPU 集成到视频处理流水线中的高级视频处理应用,此功能至关重要。WebCodecs 集成添加了对使用 VideoFrame
作为 GPUExternalTexture
和 copyExternalImageToTexture()
调用的来源的支持。请参阅以下示例和 chromestatus 条目。
// Access the GPU device.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create VideoFrame from HTMLVideoElement.
const video = document.querySelector("video");
const videoFrame = new VideoFrame(video);
// Create texture from VideoFrame.
const texture = device.importExternalTexture({ source: videoFrame });
// TODO: Use texture in bind group creation.
查看使用 WebCodecs 上传视频实验示例,试用一下。
GPUAdapter requestDevice() 返回的丢失设备
如果 GPUAdapter
上的 requestDevice()
方法因已用于创建 GPUDevice
而失败,则现在会使用立即标记为丢失的 GPUDevice
来执行,而不是返回使用 null
进行拒绝的 promise。请参阅问题 chromium:1234617。
const adapter = await navigator.gpu.requestAdapter();
const device1 = await adapter.requestDevice();
// New! The promise is not rejected anymore with null.
const device2 = await adapter.requestDevice();
// And the device is immediately marked as lost.
const info = await device2.lost;
调用 importExternalTexture() 时保持视频流畅播放
使用 HTMLVideoElement
调用 importExternalTexture()
时,当视频在视口中不可见时,系统不会再限制关联的视频播放。请参阅 issue chromium:1425252。
规范一致性
GPUPipelineError()
构造函数中的 message
参数是可选的。请参阅更改 chromium:4613967。
如果 WGSL 源 code
包含 \0
,则调用 createShaderModule()
时会触发错误。请参阅问题 dawn:1345。
使用 createSampler()
采样纹理时使用的默认最大细节级别 (lodMaxClamp
) 为 32。请参阅更改 chromium:4608063。
改进开发者体验
当开发者在不受支持的平台上使用 WebGPU 时,DevTools JavaScript 控制台中会显示一条消息以提醒他们。请参阅更改 chromium:4589369。
当 getMappedRange()
失败时,缓冲区验证错误消息会立即显示在开发者工具 JavaScript 控制台中,而无需强制开发者向队列发送命令。请参阅更改 chromium:4597950。
Dawn 更新
disallow_unsafe_apis
调试切换开关已重命名为 allow_unsafe_apis
,并默认处于停用状态。此切换开关会抑制针对尚未被视为安全的 API 入口点或参数组合的验证错误。这对调试很有用。请参阅问题 dawn:1685。
移除了已废弃的 wgpu::ShaderModuleWGSLDescriptor
source
属性,取而代之的是 code
。请参阅更改 dawn:130321。
实现了缺少的 wgpu::RenderBundle::SetLabel()
方法。请参阅更改 dawn:134502。
应用在使用 wgpu::RequestAdapterOptionsBackendType
选项获取适配器时,可以请求特定后端。请参阅下面的示例和问题 dawn:1875。
wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;
wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;
// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);
添加了一个新的 SwapChain::GetCurrentTexture()
方法,并为交换链纹理添加了其他用法,以便返回的 wgpu::Texture
可在副本中使用。请参阅下面的示例和问题 dawn:1551。
wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();
本文仅介绍了一些主要亮点。查看详尽的提交内容列表。
WebGPU 中的新变化
WebGPU 新变化系列中涵盖的所有内容的列表。
Chrome 131
- 在 WGSL 中剪裁距离
- GPUCanvasContext getConfiguration()
- 点和线基元不得有深度偏差
- 针对子群组的包含性扫描内置函数
- 对多绘制间接的实验性支持
- 着色器模块编译选项“严格数学”
- 移除了 GPUAdapter requestAdapterInfo()
- Dawn 更新
Chrome 130
Chrome 129
Chrome 128
Chrome 127
Chrome 126
Chrome 125
Chrome 124
Chrome 123
Chrome 122
Chrome 121
- 支持 Android 上的 WebGPU
- 在 Windows 上使用 DXC 而非 FXC 进行着色器编译
- 计算和渲染通道中的时间戳查询
- 着色器模块的默认入口点
- 支持将 display-p3 用作 GPUExternalTexture 色彩空间
- 内存堆信息
- Dawn 更新
Chrome 120
Chrome 119
Chrome 118
Chrome 117
Chrome 116
- WebCodecs 集成
- GPUAdapter
requestDevice()
返回的丢失设备 - 在调用
importExternalTexture()
时保持视频流畅播放 - 规范合规性
- 改进开发者体验
- Dawn 更新