WebGPU는 최첨단 하드웨어 기능을 노출하고 Direct3D 12, Metal, Vulkan과 유사한 GPU에서 렌더링 및 계산 작업을 지원하여 GPU에 대한 통합되고 빠른 액세스를 부여하는 웹 그래픽 API로 인식되는 경우가 많습니다.
하지만 WebGPU는 단순한 JavaScript API의 경계를 초월합니다. WebGPU는 WebAssembly와 유사한 기본 구성 요소로서 급성장하는 생태계로 인해 웹 너머까지 확장되었습니다. Chrome팀은 WebGPU를 단순한 웹 기술 이상으로 인정합니다. WebGPU는 핵심 기술을 중심으로 발전하는 생태계입니다.
현재 생태계 탐색
이 여정은 Apple, Google, Intel, Mozilla, Microsoft 등 수많은 조직이 참여하는 공동 작업인 JavaScript 사양으로 시작됩니다. 현재 모든 주요 웹브라우저에서 WebGPU가 구현되었거나 구현 중입니다.
동시에 Mozilla와 Google은 플랫폼별 애플리케이션에서 WebGPU의 잠재력을 확인하고 WebGPU 구현을 브라우저와 분리하여 독립형 사용이 가능해졌습니다.
Chrome의 경우 WebGPU 호출을 GPU 드라이버 명령어로 변환하는 C/C++ 라이브러리인 Dawn으로 구체화되었습니다. Dawn은 C 및 C++ 애플리케이션에서 WebGPU를 기본적으로 사용하도록 지원하며 브라우저 공급업체의 전문성을 기반으로 이식 가능한 인체 공학적 GPU 추상화를 제공합니다.
블로그 게시물 WebGPU: 미래의 크로스 플랫폼 그래픽 API에서 알 수 있듯이 플랫폼별 WebGPU 애플리케이션을 웹으로 포팅하는 방법은 간단합니다. C++ WebAssembly 도구 모음인 Emscripten은 이미 WebGPU를 지원하므로 최소한의 수정만으로 웹으로 포팅할 수 있습니다.
Dawn 기반의 WebGPU 모듈이 포함되어 있으므로 Node.js JavaScript 런타임을 사용하여 브라우저 외부에서 JavaScript WebGPU 코드를 실행할 수도 있습니다. 서버 측이나 기타 플랫폼별 컨텍스트에서 수정하지 않고 코드를 실행할 수 있습니다.
Firefox의 WebGPU 구현인 wgpu가 포함된 Rust에서도 유사한 생태계가 존재합니다. Wgpu는 Rust 애플리케이션에 직접 통합된 다음 web-sys를 사용하여 웹으로 포팅할 수 있습니다. 또한 Deno JavaScript 런타임은 wgpu를 통해 WebGPU를 지원합니다. wgpu Alliance with Deno 블로그 게시물을 참고하세요.
이렇게 하면 다음 다이어그램과 같이 Rust와 C++ 간에 병렬 생태계가 구축됩니다.
새로운 지평
WebGPU 생태계는 JavaScript, C++, Rust 영역을 넘어 확장됩니다.
WebGPU 구현을 작업하는 엔지니어가 WebGPU용 공통 C 헤더도 개발하고 있기 때문에 선호하는 프로그래밍 언어에는 실제로 WebGPU용 바인딩이 이미 있을 수 있습니다. 이는 Dawn, wgpu 등을 타겟팅하는 데 사용할 수 있으므로 C FFI를 사용하여 언어의 결합을 쉽게 생성할 수 있습니다.
또한 Chrome팀은 메뉴, 툴바, 개발자 도구, 웹 콘텐츠를 비롯한 모든 브라우저 UI 요소의 기본 렌더링 백엔드로 Dawn을 고려하고 있습니다. 이렇게 하면 각 네이티브 API에 대해 별도의 렌더링 구현이 필요하지 않으므로 개발 프로세스가 간소화됩니다. 이 기능은 현재 macOS 및 Windows의 chrome://flags/#skia-graphite
플래그 지원 실험 단계에 있습니다.