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 지원을 추가하기 위해 노력하고 있습니다. 이제 --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 명령줄 플래그로 Windows에서 Chrome을 실행하여 로컬에서 테스트해 볼 수 있습니다. issue dawn:1705를 참고하세요.

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

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

개발자 환경 개선

새로운 DevTools 경고

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

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

0 크기의 디스패치와 그리기는 유효하지만 경고는 개발자가 가능하면 이를 피하도록 권장합니다. issue dawn:1786을 참고하세요.

오류 메시지 개선

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

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

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

이제 minBindingSize 유효성 검사 오류 메시지가 유효성 검사에 실패한 바인딩의 그룹 및 개수, 버퍼를 보고합니다. issue 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를 참고하세요.

<ph type="x-smartling-placeholder">
</ph> WebGPU에서 가져온 커스텀 라벨이 표시된 macOS의 Instruments 앱 스크린샷 <ph type="x-smartling-placeholder">
</ph> macOS의 Instruments 앱에서 사용자 정의 라벨

컴파일 실패 시 HLSL 로깅

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

Dawn 업데이트

꼭짓점 버퍼 설정 해제

wgpu::RenderPassEncoder 또는 wgpu::RenderBundleEncoder에서 wgpu::Buffer 대신 nullptrSetVertexBuffer()로 전달하면 지정된 슬롯에서 이전에 설정된 꼭짓점 버퍼를 설정 해제할 수 있습니다. issue 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 옵션을 사용하면 DEPS 파일을 읽는 Python 스크립트를 사용하여 Dawn 종속 항목을 가져올 수 있습니다. DEPS를 사용하는 모든 프로젝트에서 depot_tools를 설치하지 않아도 됩니다. 변경사항 131750을 참고하세요.

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