WebGPU의 새로운 기능 (Chrome 115)

François Beaufort
François Beaufort

지원되는 WGSL 언어 확장자

GPU 객체의 wgslLanguageFeatures 구성원은 지원되는 WGSL 언어 확장 프로그램의 이름을 나열합니다. 지원되는 WGSL 언어 확장은 자동으로 사용 설정되므로 명시적으로 요청할 필요가 없습니다. 이 목록은 현재 비어 있지만 향후 많은 항목이 추가될 예정입니다 (예: do-while loops). issue dawn:1777을 참고하세요.

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

Direct3D 11의 실험적 지원

Chromium팀은 Direct3D 11에 WebGPU 지원을 추가하기 위해 노력하고 있습니다. 이제 Windows에서 --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 명령줄 플래그를 사용하여 Chrome을 실행하여 로컬에서 실험해 볼 수 있습니다. 문제 dawn:1705를 참고하세요.

AC 전원에서 기본적으로 개별 GPU 가져오기

듀얼 GPU macOS 기기에서 powerPreference 옵션 없이 requestAdapter()이 호출되면 사용자의 기기가 AC 전원에 연결되어 있을 때 개별 GPU가 반환됩니다. 그렇지 않으면 통합 GPU가 반환됩니다. 변경사항 4499307을 참고하세요.

개발자 환경 개선

새로운 DevTools 경고

GPUExtend3DDictdepth 키가 사용되면 올바른 키는 depthOrArrayLayers이므로 DevTools 콘솔에 경고가 표시됩니다. issue chromium:1440900을 참고하세요.

GPUBlendComponent에 명시적 멤버와 기본값 멤버가 혼합된 경우에도 경고가 발생합니다. issue dawn:1785를 참고하세요.

크기가 0인 전달 및 그리기는 유효하지만 개발자는 가능하면 이를 피하는 것이 좋습니다. 문제 dawn:1786을 참고하세요.

더 나은 오류 메시지

이제 finish()가 이미 호출된 경우 GPUCommandEncoder를 사용할 때 개선된 오류 메시지가 제공됩니다. issue dawn:1736을 참고하세요.

소멸된 객체가 포함된 명령어 버퍼를 제출할 때 submit()에서 사용된 명령어 버퍼의 라벨이 이제 오류 메시지에 표시됩니다. 문제 dawn:1747을 참고하세요.

이제 depthStencil를 유효성 검사할 때 오류 메시지에 깊이 스텐실 상태의 잘못된 부분이 지정됩니다. issue dawn:1735를 참고하세요.

이제 minBindingSize 유효성 검사 오류 메시지가 유효성 검사에 실패한 바인딩의 그룹과 번호, 버퍼를 보고합니다. 문제 dawn:1604를 참고하세요.

개발자가 디버깅할 때 도움이 되도록 GPUBuffer 객체의 mapAsync() 메서드에서 반환하는 오류 메시지가 개선되었습니다. 아래 예시와 chromium:1431622 문제를 참고하세요.

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

macOS 디버깅 도구의 라벨

use_user_defined_labels_in_backend 디버그 전환을 사용하면 객체 라벨을 백엔드로 전달하여 RenderDoc, PIX, Instruments와 같은 플랫폼별 디버깅 도구에서 볼 수 있습니다. 이제 macOS에서 디버깅을 사용 설정하면 더 나은 디버그 환경이 제공됩니다. issue dawn:1784를 참고하세요.

WebGPU에서 가져온 맞춤 라벨이 표시된 macOS의 Instruments 앱 스크린샷
macOS의 Instruments 앱에서 사용자 정의 라벨입니다.

컴파일이 실패하면 HLSL 로깅

dump_shaders 디버그 전환을 사용하면 입력 WGSL 셰이더와 변환된 백엔드 셰이더를 로깅할 수 있습니다. 이제 디버깅을 위해 이 기능을 사용 설정하면 컴파일이 실패하면 HLSL이 덤프됩니다. 문제 dawn:1681을 참고하세요.

Dawn 업데이트

설정되지 않은 버텍스 버퍼

wgpu::RenderPassEncoder 또는 wgpu::RenderBundleEncoder에서 SetVertexBuffer()wgpu::Buffer 대신 nullptr를 전달하면 지정된 슬롯에서 이전에 설정된 정점 버퍼를 설정 해제할 수 있습니다. 문제 dawn:1675를 참고하세요.

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

일시적인 첨부파일

wgpu::TextureUsage::TransientAttachment 사용량을 설정하여 렌더링 패스 작업이 카드 메모리에 유지되도록 허용하는 연결을 만들면 VRAM 트래픽을 방지하고 텍스처에 대한 VRAM 할당을 방지할 수 있습니다. 이 기능은 Metal 및 Vulkan에서만 지원됩니다. issue dawn: 1695를 참고하세요.

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

depot_tools 없이 빌드

DAWN_FETCH_DEPENDENCIES CMake 옵션을 사용하면 Dawn에 종속된 모든 프로젝트에서 depot_tools를 설치할 필요 없이 DEPS 파일을 읽는 Python 스크립트를 사용하여 Dawn 종속 항목을 가져올 수 있습니다. 변경사항 131750을 참고하세요.

WebGPU의 새로운 기능

WebGPU의 새로운 기능 시리즈에서 다룬 모든 항목의 목록입니다.

Chrome 131

Chrome 130

Chrome 129

Chrome 128

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