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()에서 반환된 분실 기기

GPUDevice를 만드는 데 이미 사용되었기 때문에 GPUAdapterrequestDevice() 메서드가 실패하면 이제 null으로 거부하는 약속을 반환하는 대신 즉시 손실로 표시된 GPUDevice로 처리됩니다. issue 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()가 호출된 경우 동영상 재생을 원활하게 유지

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

사양 준수

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

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

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

개발자 환경 개선

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

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

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

Dawn 업데이트

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

지원 중단된 wgpu::ShaderModuleWGSLDescriptor source 속성이 code로 대체되어 삭제되었습니다. change 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() 메서드가 추가되었습니다. 아래 예시와 issue dawn:1551을 참고하세요.

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

여기에는 주요 내용 중 일부만 다룹니다. 전체 커밋 목록을 확인하세요.

WebGPU의 새로운 기능

WebGPU의 새로운 기능 시리즈에서 다룬 모든 항목의 목록입니다.

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