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에서 Chrome을 --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 명령줄 플래그로 실행하여 로컬에서 실험할 수 있습니다. 문제 dawn:1705를 참조하세요.

AC 전원을 사용하는 개별 GPU를 기본으로 사용

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

개발자 환경 개선

새 DevTools 경고

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

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

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

오류 메시지 개선

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

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

이제 depthStencil를 확인할 때 깊이 스텐실 상태의 잘못된 부분이 오류 메시지에 지정됩니다. 문제 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를 디버깅에 사용 설정하면 macOS에서 더 나은 디버그 환경이 제공됩니다. 문제 dawn:1784를 참조하세요.

WebGPU에서 가져온 커스텀 라벨이 있는 macOS의 Instruments 앱 스크린샷
macOS의 Instruments 앱에서 사용자가 정의한 라벨입니다.

컴파일 실패 시 HLSL 로깅

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

여명 업데이트

꼭짓점 버퍼 설정 해제

wgpu::Buffer 대신 nullptrwgpu::RenderPassEncoder 또는 wgpu::RenderBundleEncoderSetVertexBuffer()에 전달하면 지정된 슬롯에서 이전에 설정된 꼭짓점 버퍼를 설정 해제할 수 있습니다. 문제 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 할당을 방지하는 연결을 만들 수 있습니다. 이 기능은 메탈 및 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 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