Chrome'da WebGPU desteği etkinleştirilecek

Компания Google объявила о включении по умолчанию поддержки графического API WebGPU и языка шейдеров WGSL (WebGPU Shading Language) в ветке Chrome 113, релиз которой намечен на 2 мая. WebGPU предоставляет схожий с Vulkan, Metal и Direct3D 12 программный интерфейс для выполнения операций на стороне GPU, таких как рендеринг и вычисления, а также позволяет использовать язык шейдров для написания программ, работающих на стороне GPU. Реализация WebGPU будет включена вначале только в сборках для ChromeOS, macOS и Windows. Для Linux и Android поддержка WebGPU будет активирована позднее.

Кроме Chrome экспериментальная поддержка WebGPU тестируется с апреля 2020 года в Firefox и с ноября 2021 года в Safari. Для включения WebGPU в Firefox в about:config следует выставить флаги dom.webgpu.enabled и gfx.webgpu.force-enabled. О планах по включению WebGPU по умолчанию в Firefox и Safari пока не сообщается. Развиваемые для Firefox и Chrome реализации WebGPU доступны в форме отдельных библиотек — Dawn (С++) и wgpu (Rust), которые можно использовать для интеграции поддержки WebGPU в свои приложения. Также ведётся работа по добавлению поддержки WebGPU в популярные JavaScript-библитеки, изначально использующие WebGL. Например, полная поддержка WebGPU уже заявлена в Babylon.js, а частичная в Three.js, PlayCanvas и TensorFlow.js.

Концептуально WebGPU отличается от WebGL примерно так же, как графический API Vulkan отличается от OpenGL, но при этом WebGPU не основывается на конкретном графическом API, а представляет собой универсальную прослойку, использующую те же низкоуровневые примитивы, что имеются в Vulkan, Metal и Direct3D. WebGPU предоставляет приложениям на JavaScript средства для низкоуровневого контроля за организацией, обработкой и передачей команд к GPU, управления связанными ресурсами, памятью, буферами, объектами текстур и скомпилированными графическими шейдерами. Подобный подход позволяет добиться более высокой производительности графических приложений за счёт снижения накладных расходов и повышения эффективности работы с GPU.

WebGPU даёт возможность создавать для Web сложные 3D-проекты, работающие не хуже, чем обособленные программы, напрямую использующие Vulkan, Metal или Direct3D, но не привязанные к конкретным платформам. WebGPU также предоставляет дополнительные возможности при портировании нативных графических программ в форму, способную работать на базе web-технологий, благодаря компиляции в WebAssembly. Кроме 3D-графики WebGPU охватывает и возможности, связанные с выносом вычислений на сторону GPU и выполнением шейдеров.

WebGPU'nun temel özellikleri:

  • Kaynakların ayrı yönetimi, hazırlık çalışmaları ve komutların GPU'ya iletilmesi (WebGL'de her şeyden aynı anda bir nesne sorumluydu). Üç ayrı bağlam sağlanmıştır: Dokular ve arabellekler gibi kaynaklar oluşturmak için GPUDevice; Oluşturma ve hesaplama aşamaları da dahil olmak üzere bireysel komutları kodlamak için GPUCommandEncoder; GPUCommandBuffer, GPU'da yürütülmek üzere sıraya alınacak. Sonuç, bir veya daha fazla tuval öğesiyle ilişkili bir alanda oluşturulabilir veya çıktı olmadan işlenebilir (örneğin, bilgi işlem görevlerini çalıştırırken). Aşamaları ayırmak, kaynak oluşturma ve hazırlama işlemlerini farklı iş parçacıklarında çalışabilen farklı işleyicilere ayırmayı kolaylaştırır.
  • Durumların işlenmesine farklı bir yaklaşım. WebGPU, geliştirici tarafından önceden tanımlanmış çeşitli durumları birleştirmenize olanak tanıyan GPURenderPipeline ve GPUComputePipeline olmak üzere iki nesne sunar; bu, tarayıcının, gölgelendiricileri yeniden derlemek gibi ek işlerle kaynakları israf etmemesine olanak tanır. Desteklenen durumlar şunları içerir: gölgelendiriciler, köşe arabelleği ve nitelik düzenleri, yapışkan grup düzenleri, karıştırma, derinlik ve desenler ve işleme sonrası çıktı formatları.
  • Vulkan'ın kaynak gruplama özelliklerine çok benzeyen bir bağlama modeli. Kaynakları bir arada gruplamak için WebGPU, komut yazarken gölgelendiricilerde kullanılmak üzere diğer benzer nesnelerle ilişkilendirilebilecek bir GPUBindGroup nesnesi sağlar. Bu tür grupların oluşturulması, sürücünün gerekli hazırlık eylemlerini önceden gerçekleştirmesine olanak tanır ve tarayıcının, çizim çağrıları arasındaki kaynak bağlamalarını çok daha hızlı değiştirmesine olanak tanır. Kaynak bağlamalarının düzeni GPUBindGroupLayout nesnesi kullanılarak önceden tanımlanabilir.

Kaynak: opennet.ru

Yorum ekle