WebGPU의 새로운 기능 (Chrome 116)

François Beaufort
François Beaufort

WebCodecs 통합

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

하지만 초기 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를 사용하여 처리합니다. 문제 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 인수는 선택사항입니다. 변경사항 chromium:4613967을 참고하세요.

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

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

개발자 환경 개선

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

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

<ph type="x-smartling-placeholder">
</ph> 버퍼 유효성 검사 오류 메시지가 표시된 DevTools JavaScript 콘솔 스크린샷 <ph type="x-smartling-placeholder">
</ph> DevTools JavaScript 콘솔의 버퍼 유효성 검사 오류 메시지

Dawn 업데이트

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 옵션으로 어댑터를 가져올 때 특정 백엔드를 요청할 수 있습니다. 아래 예와 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 텍스처의 추가 용도와 함께 새 SwapChain::GetCurrentTexture() 메서드가 추가되었습니다. 아래 예와 issue dawn:1551을 참조하세요.

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

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

WebGPU의 새로운 기능

WebGPU의 새로운 기능 시리즈에서 다룬 모든 내용 목록

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