WebCodecs 集成
WebGPU 公开了一个用于创建不透明“外部纹理”的 API从 HTMLVideoElement
到 importExternalTexture()
的对象。您可以使用这些对象高效地对视频帧进行采样,可能以 0 复制的方式直接从源 YUV 颜色模型数据中进行采样。
不过,最初的 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
而失败,那么该方法现在会在执行时立即标记为已丢失,而不是返回在拒绝时返回 null
。GPUDevice
请参阅问题 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()
时,如果视频在视口中不可见,则关联的视频播放不会再受限。请参阅问题 chromium:1425252。
规范合规性
GPUPipelineError()
构造函数中的 message
参数是可选的。请参阅更改 chromium:4613967。
如果 WGSL 源文件 code
包含 \0
,则在调用 createShaderModule()
时会触发错误。请参阅问题 dawn:1345。
使用 createSampler()
对纹理进行采样时使用的默认最大细节级别 (lodMaxClamp
) 为 32。请参阅更改 chromium:4608063。
改善开发者体验
当开发者在不受支持的平台上使用 WebGPU 时,开发者工具 JavaScript 控制台中会显示一条消息,提醒开发者。请参阅更改 chromium:4589369。
当 getMappedRange()
失败时,缓冲区验证错误消息会立即显示在开发者工具 JavaScript 控制台中,而不会强制开发者向队列发送命令。请参阅更改 chromium:4597950。
Dawn 最新动态
disallow_unsafe_apis
调试切换开关已重命名为 allow_unsafe_apis
,并默认处于停用状态。此切换开关可抑制尚不安全的 API 入口点或参数组合上的验证错误。它对于调试可能很有用。
请参阅问题 dawn:1685。
移除了 wgpu::ShaderModuleWGSLDescriptor
已弃用的 source
属性,取而代之的是 code
。请参阅 change dawn:130321。
已实现缺少的 wgpu::RenderBundle::SetLabel()
方法。请参阅 change dawn:134502。
应用可以在使用 wgpu::RequestAdapterOptionsBackendType
选项获取适配器时请求特定的后端。请参阅下面的示例和issue 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 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 最新动态