W3C اولین پیش نویس مشخصات WebGPU و WebGPU Shading Language (WGSL) را منتشر کرده است که APIهایی را برای انجام عملیات GPU مانند رندر و محاسبات و همچنین زبان سایه زن برای نوشتن برنامه هایی که روی GPU اجرا می شوند، تعریف می کند. از نظر مفهومی شبیه به APIهای Vulkan، Metal و Direct3D 12. مشخصات توسط یک گروه کاری که شامل مهندسانی از موزیلا، گوگل، اپل و مایکروسافت بود، تهیه شد.
از نظر مفهومی، WebGPU با WebGL به همان شکلی متفاوت است که API گرافیکی Vulkan با OpenGL متفاوت است، اما بر اساس یک 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