گوگل از گنجاندن پشتیبانی پیشفرض از API گرافیکی WebGPU و WGSL (WebGPU Shading Language) در کروم ۱۱۳ خبر داده است که برای انتشار در ۲ می برنامهریزی شده است. WebGPU یک رابط برنامه نویسی شبیه به Vulkan، Metal و Direct113D 2 برای انجام عملیات های سمت GPU مانند رندر و محاسبات ارائه می دهد و همچنین امکان استفاده از زبان سایه زن را برای نوشتن برنامه هایی که در سمت GPU اجرا می شوند را فراهم می کند. پیادهسازی WebGPU در ابتدا فقط در نسخههای ChromeOS، macOS و Windows فعال میشود. برای لینوکس و اندروید، پشتیبانی WebGPU در تاریخ بعدی فعال خواهد شد.
علاوه بر کروم، پشتیبانی آزمایشی از WebGPU از آوریل 2020 در فایرفاکس و از نوامبر 2021 در سافاری آزمایش شده است. برای فعال کردن WebGPU در فایرفاکس، باید پرچمهای dom.webgpu.enabled و gfx.webgpu.force را در about:config تنظیم کنید. هنوز برنامه ای برای فعال کردن WebGPU به صورت پیش فرض در فایرفاکس و سافاری وجود ندارد. پیادهسازیهای WebGPU توسعهیافته برای فایرفاکس و کروم به شکل کتابخانههای جداگانه - Dawn (C++) و wgpu (Rust) در دسترس هستند که میتوانید از آنها برای ادغام پشتیبانی WebGPU در برنامههای خود استفاده کنید. همچنین کار برای افزودن پشتیبانی WebGPU به کتابخانه های محبوب جاوا اسکریپت که به صورت بومی از WebGL استفاده می کنند در حال انجام است. به عنوان مثال، پشتیبانی کامل از WebGPU قبلاً در Babylon.js و پشتیبانی جزئی در Three.js، PlayCanvas و TensorFlow.js اعلام شده است.
از نظر مفهومی، WebGPU با WebGL تقریباً به همان شکلی متفاوت است که API گرافیکی Vulkan با OpenGL متفاوت است، اما WebGPU مبتنی بر یک API گرافیکی خاص نیست، بلکه یک لایه جهانی است که از همان ابتدایی های سطح پایین موجود در Vulkan، Metal و Direct3D. WebGPU برنامه های جاوا اسکریپت را با کنترل سطح پایین بر سازمان، پردازش و انتقال دستورات به GPU، مدیریت منابع مرتبط، حافظه، بافرها، اشیاء بافت و سایه زن های گرافیکی کامپایل شده ارائه می دهد. این رویکرد به شما امکان می دهد با کاهش هزینه های سربار و افزایش کارایی کار با GPU، به عملکرد بالاتری برای برنامه های گرافیکی دست یابید.
WebGPU ایجاد پروژه های پیچیده سه بعدی برای وب را امکان پذیر می کند که عملکرد بدتری نسبت به برنامه های مستقلی ندارند که مستقیماً از Vulkan، Metal یا Direct3D استفاده می کنند، اما به پلتفرم های خاصی وابسته نیستند. WebGPU همچنین قابلیتهای بیشتری را برای انتقال برنامههای گرافیکی بومی به یک فرم فعال شده تحت وب از طریق کامپایل در WebAssembly فراهم میکند. علاوه بر گرافیک سه بعدی، WebGPU همچنین دارای قابلیت های مربوط به بارگذاری محاسبات در GPU و اجرای سایه بان ها می باشد.
ویژگی های کلیدی WebGPU:
- مدیریت جداگانه منابع، کار آماده سازی و انتقال دستورات به GPU (در WebGL یک شیء مسئول همه چیز به طور همزمان بود). سه زمینه جداگانه ارائه شده است: GPUDevice برای ایجاد منابعی مانند بافت ها و بافرها. GPUCommandEncoder برای رمزگذاری دستورات فردی، از جمله مراحل رندر و محاسبات. GPUCommandBuffer برای اجرا در GPU در صف قرار می گیرد. نتیجه را می توان در یک ناحیه مرتبط با یک یا چند عنصر بوم ارائه کرد یا بدون خروجی پردازش کرد (به عنوان مثال، هنگام اجرای وظایف محاسباتی). جداسازی مراحل، تفکیک عملیات ایجاد و آمادهسازی منبع را در کنترلکنندههای مختلف که میتوانند روی رشتههای مختلف اجرا شوند، آسانتر میکند.
- رویکردی متفاوت به حالات پردازش WebGPU دو شی را ارائه می دهد - GPURenderPipeline و GPUComputePipeline، که به شما امکان می دهد حالت های مختلف از پیش تعریف شده توسط توسعه دهنده را ترکیب کنید، که به مرورگر اجازه می دهد منابع را برای کارهای اضافی، مانند کامپایل مجدد سایه بان ها، هدر ندهد. حالتهای پشتیبانی شده عبارتند از: سایهزنها، طرحبندیهای راس بافر و ویژگیها، طرحبندیهای گروه چسبنده، ترکیب، عمق و الگوها، و فرمتهای خروجی پس از رندر.
- یک مدل الزام آور بسیار شبیه ویژگی های گروه بندی منابع Vulkan. برای گروه بندی منابع با هم، WebGPU یک شی GPUBindGroup را ارائه می دهد که می تواند با سایر اشیاء مشابه برای استفاده در سایه بان ها هنگام نوشتن دستورات مرتبط شود. ایجاد چنین گروههایی به راننده اجازه میدهد تا اقدامات مقدماتی لازم را از قبل انجام دهد و به مرورگر اجازه میدهد تا اتصالات منابع را بین تماسهای قرعهکشی بسیار سریعتر تغییر دهد. با استفاده از شی GPUBindGroupLayout میتوان طرحبندی پیوندهای منابع را از پیش تعریف کرد.
منبع: opennet.ru