WebGPU의 새로운 기능 (Chrome 116)

François Beaufort
François Beaufort

WebCodecs 통합

WebGPU는 HTMLVideoElement부터 importExternalTexture()까지 불투명한 '외부 텍스처' 객체를 만드는 API를 노출합니다. 이러한 객체를 사용하여 소스 YUV 색상 모델 데이터에서 직접 0복사 방식으로 동영상 프레임을 효율적으로 샘플링할 수 있습니다.

하지만 초기 WebGPU 사양에서는 WebCodecs VideoFrame 객체에서 GPUExternalTexture 객체를 만들 수 없었습니다. 이 기능은 이미 WebCodecs를 사용하고 동영상 처리 파이프라인에 WebGPU를 통합하려는 고급 동영상 처리 앱에 중요합니다. WebCodecs 통합은 GPUExternalTexturecopyExternalImageToTexture() 호출의 소스로 VideoFrame를 사용하는 지원을 추가합니다. 다음 예시와 chromestatus 항목을 참고하세요.

// Access the GPU device.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

// Create VideoFrame from HTMLVideoElement.
const video = document.querySelector("video");
const videoFrame = new VideoFrame(video);

// Create texture from VideoFrame.
const texture = device.importExternalTexture({ source: videoFrame });
// TODO: Use texture in bind group creation.

WebCodecs를 사용한 동영상 업로드 실험용 샘플을 확인하여 사용해 보세요.

GPUAdapter requestDevice()에서 반환된 기기 손실

GPUDevice을 만드는 데 이미 사용되어 GPUAdapterrequestDevice() 메서드가 실패하는 경우 이제 null로 거부되는 프로미스를 반환하는 대신 손실된 것으로 즉시 표시된 GPUDevice로 처리됩니다. 문제 chromium:1234617을 참고하세요.

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

// New! The promise is not rejected anymore with null.
const device2 = await adapter.requestDevice();
// And the device is immediately marked as lost.
const info = await device2.lost;

importExternalTexture()가 호출된 경우 동영상 재생을 원활하게 유지

importExternalTexture()HTMLVideoElement와 함께 호출되면 동영상이 표시 영역에 표시되지 않을 때 연결된 동영상 재생이 더 이상 제한되지 않습니다. 문제 chromium:1425252를 참고하세요.

사양 준수

GPUPipelineError() 생성자의 message 인수는 선택사항입니다. change chromium:4613967을 참고하세요.

WGSL 소스 code\0이 포함된 경우 createShaderModule()을 호출하면 오류가 발생합니다. 문제 dawn:1345를 참고하세요.

createSampler()로 텍스처를 샘플링할 때 사용되는 기본 최대 세부 수준 (lodMaxClamp)은 32입니다. 변경사항 chromium:4608063을 참고하세요.

개발자 환경 개선

지원되지 않는 플랫폼에서 WebGPU를 사용하는 경우 개발자에게 알림을 보내는 메시지가 DevTools JavaScript 콘솔에 표시됩니다. change chromium:4589369를 참고하세요.

개발자가 대기열에 명령어를 전송하지 않아도 getMappedRange()가 실패하면 버퍼 유효성 검사 오류 메시지가 DevTools JavaScript 콘솔에 즉시 표시됩니다. change chromium:4597950을 참고하세요.

버퍼 유효성 검사 오류 메시지가 표시된 DevTools JavaScript 콘솔의 스크린샷
DevTools JavaScript 콘솔의 버퍼 유효성 검사 오류 메시지

새벽 업데이트

disallow_unsafe_apis 디버그 전환의 이름이 allow_unsafe_apis로 변경되었으며 기본값이 사용 중지로 설정되었습니다. 이 전환 버튼은 아직 안전하지 않은 API 진입점 또는 매개변수 조합에 대한 유효성 검사 오류를 억제합니다. 디버깅에 유용할 수 있습니다. 문제 dawn:1685를 참고하세요.

wgpu::ShaderModuleWGSLDescriptor 지원 중단된 source 속성이 삭제되고 code로 대체되었습니다. 변경사항 dawn:130321을 참고하세요.

누락된 wgpu::RenderBundle::SetLabel() 메서드가 구현되었습니다. change dawn:134502를 참고하세요.

애플리케이션은 wgpu::RequestAdapterOptionsBackendType 옵션으로 어댑터를 가져올 때 특정 백엔드를 요청할 수 있습니다. 아래 예시를 참고하여 issue dawn:1875를 실행하세요.

wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;

wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;

// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);

반환된 wgpu::Texture를 사본에서 사용할 수 있도록 스왑체인 텍스처의 추가 용도로 새로운 SwapChain::GetCurrentTexture() 메서드가 추가되었습니다. 아래 예시를 참고하여 dawn:1551을 실행하세요.

wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();

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

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