WebGPU의 새로운 기능 (Chrome 136)

François Beaufort
François Beaufort

게시일: 2025년 4월 23일

GPUAdapterInfo isFallbackAdapter 속성

GPUAdapterInfo isFallbackAdapter 불리언 속성은 GPUAdapter가 더 넓은 호환성, 더 예측 가능한 동작 또는 개선된 개인 정보 보호를 위해 상당한 성능 제한이 있는지 나타냅니다. 사용자 제공 GPUDevice 객체를 사용하는 라이브러리가 GPUDevice의 adapterInfo 속성을 통해 이 정보에 액세스할 수 없었기 때문에 이 추가가 필요했습니다. 다음 예시와 문제 403172841을 참고하세요.

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

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

Chrome에서는 아직 대체 어댑터 지원을 제공하지 않으므로 현재 사용자의 기기에서 isFallbackAdapter는 항상 false입니다. GPUAdapter isFallbackAdapter 속성을 지원 중단하고 삭제할 수 있는지 조사하고 있습니다. 출시 의도를 참고하세요.

D3D12의 셰이더 컴파일 시간 개선

Chrome팀은 D3D12 백엔드로 WebGPU를 지원하는 기기를 위한 중간 표현 (IR)을 추가하여 WebGPU 셰이더 언어 컴파일러인 Tint를 계속 개선하고 있습니다. Tint의 추상 구문 트리 (AST)와 HLSL 백엔드 작성기 사이에 위치한 이 IR은 컴파일러를 더 효율적이고 유지관리 가능하게 만들어 궁극적으로 개발자와 사용자 모두에게 이점을 제공합니다. 초기 테스트 결과에 따르면 Unity의 WGSL 셰이더를 HLSL로 변환할 때 새로운 버전의 Tint가 최대 10배 더 빠른 것으로 나타났습니다.

WGSL 셰이더 코드를 하위 수준 GPU 명령어로 변환하는 프로세스를 보여주는 순서도
Windows의 렌더링 파이프라인 생성

Android, ChromeOS, macOS에서 이미 사용할 수 있는 이러한 개선사항은 D3D12 백엔드로 WebGPU를 지원하는 Windows 기기로 점진적으로 확대되고 있습니다. 문제 42251045를 참고하세요.

캔버스 이미지 저장 및 복사

이제 Chrome 사용자는 WebGPU 캔버스를 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴 옵션 이미지를 다른 이름으로 저장… 또는 이미지 복사에 액세스할 수 있습니다. 문제 40902474를 참고하세요.

이제
사용자가 '이미지 다른 이름으로 저장' 컨텍스트 메뉴를 선택했습니다.

호환성 모드 제한 해제

GPUDevice에서 사용할 수 있는 실험용 "core-features-and-limits" 기능은 chrome://flags/#enable-unsafe-webgpu 플래그가 사용 설정된 경우 모든 호환성 모드 제한 (기능 및 제한)을 해제합니다. 문제 395855517을 참고하세요.

featureLevel: "compatibility" 옵션으로 GPUAdapter를 요청하면 브라우저가 실험용 WebGPU 호환성 모드를 선택하도록 힌트를 제공합니다. 성공하면 결과 어댑터는 '호환성 기본값'입니다. 그렇지 않으면 featureLevel: "core" 옵션을 사용하는 것과 동일한 'core-defaulting'입니다. 또한 requiredFeaturesrequiredLimits 없이 requestDevice()를 호출하면 GPUAdapter의 기본 기능이 있는 GPUDevice가 요청됩니다.

코어 기본 어댑터는 항상 "core-features-and-limits" 기능을 지원하며 이 기능은 어댑터에서 생성된 GPUDevice에서 자동으로 사용 설정됩니다. 호환성 기본 어댑터의 경우 "core-features-and-limits" 기능이 지원될 수 있으며 이 기능은 어댑터에서 생성된 GPUDevice에서 요청할 수 있습니다. 두 유형의 어댑터 모두 핵심 모드와 호환성 모드에서 선택사항인 "float32-blendable"와 같은 기능을 지원할 수도 있습니다.

다음 예는 "float32-blendable"가 필요하고, 사용 가능한 경우 핵심 기능 사용을 지원하지만 핵심 기능을 사용할 수 없는 경우 호환성 기능만 사용하는 애플리케이션을 위한 것입니다.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

실험용 GPUAdapter featureLevelisCompatibilityMode 속성이 "core-features-and-limits" 기능으로 대체되어 삭제되었습니다. 문제 395855516을 참고하세요.

새벽 업데이트

콜백 상태 enum InstanceDroppedCallbackCancelled로 이름이 변경되었습니다. 이는 콜백이 취소되었지만 파이프라인 컴파일과 같은 이벤트와 관련된 백그라운드 처리는 계속 실행될 수 있음을 명확히 하기 위한 것입니다. 새 이름은 나중에 다른 취소 메커니즘이 추가될 경우를 대비하여 더 일반적으로 적용할 수 있습니다. 문제 520을 참고하세요.

오류 범위 스택을 팝할 수 없음을 나타내는 wgpu::PopErrorScopeStatus::EmptyStack enum의 이름이 wgpu::PopErrorScopeStatus::Error로 바뀌었습니다 (wgpu::PopErrorScopeStatus::Error는 더 일반적으로 적용 가능함). 이제 콜백에는 디버깅에 도움이 되는 해당 오류 설명 메시지도 포함됩니다. 문제 369를 참고하세요.

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

WebGPU의 새로운 기능

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

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

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