WebGPU의 새로운 기능 (Chrome 127)

François Beaufort
François Beaufort

Android에서 OpenGL ES 실험용 지원

이제 Android용 Chrome에서 실험용 WebGPU 호환성 모드를 요청할 때 OpenGL ES 백엔드에서 GPUAdapter에 액세스할 수 있습니다. 이는 Vulkan 1.1 이상을 지원하지 않는 Android 기기에 특히 유용합니다. 다음 예와 issue dawn:1545를 참고하세요.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
WebGPU 보고서 페이지에 Android 기기의 OpenGL ES 백엔드에서 가져온 GPUAdapter 정보가 표시됩니다.
webgpureport.org의 OpenGL ES 어댑터 정보

이 기능은 아직 실험 단계에 있으므로 다음 단계를 수행해야 합니다.

  1. '안전하지 않은 WebGPU 지원', 'WebGPU 개발자 기능', '루팅되지 않은 기기에서 명령줄 사용 설정' Chrome 플래그를 사용 설정합니다.
  2. Android 기기에서 USB 디버깅을 사용 설정합니다.
  3. Android 기기를 워크스테이션에 연결하고 adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line'를 실행하여 Vulkan보다 OpenGL ES 백엔드를 우선 사용하도록 한 다음 Chrome을 다시 시작합니다.

GPUAdapter 정보 속성

이제 GPUAdapter info 속성과 동기식으로 어댑터에 관한 식별 정보를 가져올 수 있습니다. 이전에는 비동기 GPUAdapter requestAdapterInfo() 메서드를 호출하는 것이 어댑터 정보를 가져오는 유일한 방법이었습니다. 하지만 requestAdapterInfo()는 WebGPU 사양에서 삭제되었으며 웹 개발자가 필요한 전환을 할 수 있도록 충분한 시간을 제공하기 위해 올해 말 Chrome에서 삭제될 예정입니다. 다음 예, Chrome 상태, 문제 335383516을 참고하세요.

const adapter = await navigator.gpu.requestAdapter();
const info = adapter.info;

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

WebAssembly 상호 운용성 개선

WebGPU에 직접 전달되는 WebAssembly 힙을 수용하기 위해 setBindGroup()dynamicOffsetsData, writeBuffer()의 소스 data, 소스 data PIN writeTexture()과 같은 BufferSource 인수의 크기가 더 이상 2GB로 제한되지 않습니다. 문제 339049388을 참고하세요.

명령어 인코더 오류 개선

명령 인코더에서 발생하는 일부 유효성 검사 오류에 대해 상황별 정보가 개선되었습니다. 예를 들어 렌더 패스가 아직 열려 있는 상태에서 컴퓨팅 패스를 시작하려고 하면 다음 오류가 발생했습니다.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

이렇게 하면 오류의 원인을 설명하지만 어느 호출이 실제로 유효성 검사 오류를 유발했는지는 알 수 없습니다. 다음 오류는 오류를 트리거한 명령어가 포함된 개선된 메시지를 보여줍니다. 변경사항 192245를 참고하세요.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

Dawn 업데이트

webgpu.h C API는 Dawn의 wgpu::Surface::GetPreferredFormat()에 해당하는 C인 wgpuSurfaceGetPreferredFormat()를 더 이상 노출하지 않습니다. 대신 wgpu::Surface::GetCapabilities()를 사용하여 지원되는 형식 목록을 가져온 다음 formats[0]를 사용하여 이 표면에 적합한 텍스처 형식을 가져옵니다. 그동안 wgpu::Surface::GetPreferredFormat()를 호출하면 지원 중단 경고가 표시됩니다. 문제 290을 참고하세요.

이제 wgpu::Surface::GetCapabilities()를 호출할 때 wgpu::SurfaceCapabilities::usages를 통해 표면의 지원되는 텍스처 사용을 사용할 수 있습니다. 항상 wgpu::TextureUsage::RenderAttachment를 포함해야 합니다. 문제 301을 참고하세요.

여기에서는 몇 가지 주요 사항만 다룹니다. 전체 커밋 목록을 확인하세요.

WebGPU의 새로운 기능

WebGPU의 새로운 기능 시리즈에서 다룬 모든 내용 목록

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113