WebGPU의 새로운 기능 (Chrome 116)

François Beaufort
François Beaufort

WebCodecs 통합

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

하지만 초기 WebGPU 사양에서는 WebCodecs VideoFrame 객체에서 GPUExternalTexture 객체를 만들 수 없습니다. 이 기능은 이미 WebCodecs를 사용하고 있고 동영상 처리 파이프라인에 WebGPU를 통합하려는 고급 동영상 처리 앱에 중요합니다. WebCodecs 통합에는 VideoFrameGPUExternalTexturecopyExternalImageToTexture() 호출의 소스로 사용하기 위한 지원이 추가되었습니다. 다음 예와 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()에서 기기를 반환하여 분실함

GPUAdapterrequestDevice() 메서드가 GPUDevice를 만드는 데 이미 사용되어 실패하는 경우, 이제 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()가 호출되면 동영상 재생을 원활하게 유지합니다.

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

사양 적합성

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

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

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

개발자 환경 개선

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

개발자가 대기열에 명령어를 강제로 전송할 필요 없이 getMappedRange()가 실패하면 버퍼 유효성 검사 오류 메시지가 즉시 DevTools JavaScript 콘솔에 표시됩니다. chromium:4597950 변경을 참고하세요.

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

여명 업데이트

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

wgpu::ShaderModuleWGSLDescriptor가 지원 중단된 source 속성이 삭제되고 code로 대체됩니다. change dawn:130321을 참조하세요.

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

애플리케이션은 wgpu::RequestAdapterOptionsBackendType 옵션이 있는 어댑터를 가져올 때 특정 백엔드를 요청할 수 있습니다. 아래 예와 문제 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 텍스처에 관한 용도가 있는 새 SwapChain::GetCurrentTexture() 메서드를 추가했습니다. 아래 예와 issue dawn:1551을 참조하세요.

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

여기에서는 주요 특징 중 일부만 다루었습니다. 전체 커밋 목록을 확인하세요.

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