WebGPU의 새로운 기능 (Chrome 115)

François Beaufort
François Beaufort

지원되는 WGSL 언어 확장 프로그램

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

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

Direct3D 11 실험 지원

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

AC 전원 사용 시 기본적으로 개별 GPU 가져오기

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

개발자 환경 개선

새로운 DevTools 경고

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

GPUBlendComponent에 명시적 멤버와 기본 멤버가 혼합되어 있는 경우에도 경고가 발생합니다. 문제 dawn:1785를 참고하세요.

크기가 0인 디스패치와 그리기 작업은 유효하지만, 가능한 경우 이를 피하도록 개발자에게 경고가 표시됩니다. 문제 dawn:1786을 참고하세요.

오류 메시지 개선

finish()이 이미 호출된 경우 GPUCommandEncoder을 사용할 때 개선된 오류 메시지가 제공됩니다. 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에서 더 나은 디버그 환경이 제공됩니다. 문제 dawn:1784를 참고하세요.

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

컴파일이 실패하면 HLSL 로깅

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

새벽 업데이트

꼭짓점 버퍼 설정 해제

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

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

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

일시적인 첨부파일

렌더링 패스 작업이 타일 메모리에 유지되도록 하여 VRAM 트래픽을 방지하고 wgpu::TextureUsage::TransientAttachment 사용을 설정하여 텍스처의 VRAM 할당을 방지할 수 있는 첨부 파일을 만들 수 있습니다. 이 기능은 Metal 및 Vulkan에서만 지원됩니다. 문제 새벽: 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 옵션을 사용하면 depot_tools 설치를 요구하는 대신 DEPS 파일을 읽는 Python 스크립트를 사용하여 Dawn 종속 항목을 가져올 수 있습니다. 변경사항 131750을 참고하세요.

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