В
هدف اصلی WebGPU ارائه یک رابط برنامه نویسی ایمن، کاربرپسند، قابل حمل و با کارایی بالا برای پلتفرم وب است تا از فناوری ها و قابلیت های گرافیک سه بعدی ارائه شده توسط API های گرافیکی سیستم مدرن، مانند Direct3D 3 در ویندوز، فلز استفاده کند. در macOS و Vulkan در لینوکس. از نظر مفهومی، WebGPU با WebGL تقریباً به همان شکلی متفاوت است که Vulkan با OpenGL متفاوت است، و در عین حال بر اساس یک API گرافیکی خاص نیست، بلکه یک لایه جهانی است که عموماً از همان ابتدایی های سطح پایین موجود در Vulkan استفاده می کند. فلز و Direct12D.
WebGPU برنامه های جاوا اسکریپت را با کنترل سطح پایین تر بر سازمان، پردازش و انتقال دستورات به GPU، مدیریت منابع مرتبط، حافظه، بافرها، اشیاء بافت و سایه زن های گرافیکی کامپایل شده فراهم می کند. این رویکرد به شما اجازه می دهد تا با کاهش هزینه های سربار و افزایش کارایی کار با GPU، به عملکرد بالاتری برای برنامه های گرافیکی دست یابید.
WebGPU ایجاد پروژه های سه بعدی پیچیده کامل برای وب را امکان پذیر می کند که بدتر از برنامه های مستقلی نیستند که مستقیماً به Vulkan، Metal یا Direct3D دسترسی دارند، اما به پلتفرم های خاصی وابسته نیستند. WebGPU همچنین قابلیتهای اضافی را هنگام انتقال برنامههای گرافیکی بومی به فرمی تحت وب با استفاده از فناوری WebAssembly فراهم میکند. علاوه بر گرافیک سه بعدی، WebGPU قابلیت های مربوط به بارگذاری محاسبات روی GPU و پشتیبانی از توسعه سایه زن را نیز پوشش می دهد. سایه بان ها
WebGPU از مدیریت جداگانه منابع، کارهای مقدماتی و انتقال دستورات به GPU استفاده می کند (در WebGL، یک شیء مسئول همه چیز به طور همزمان بود). سه زمینه جداگانه ارائه شده است:
GPUDevice برای ایجاد منابعی مانند بافت ها و بافرها. GPUCommandEncoder برای رمزگذاری دستورات فردی، از جمله مراحل رندر و محاسبات. GPUCommandBuffer برای اجرا در GPU در صف قرار می گیرد. نتیجه را می توان در یک ناحیه مرتبط با یک یا چند عنصر بوم ارائه کرد یا بدون خروجی پردازش کرد (به عنوان مثال، هنگام اجرای وظایف محاسباتی). جداسازی مراحل، تفکیک عملیات ایجاد و آمادهسازی منبع را در کنترلکنندههای مختلف که میتوانند روی رشتههای مختلف اجرا شوند، آسانتر میکند.
دومین تفاوت بین WebGPU و WebGL رویکرد متفاوتی برای مدیریت وضعیت ها است. WebGPU دو شی را ارائه می دهد - GPURenderPipeline و GPUComputePipeline، که به شما امکان می دهد حالت های مختلف از پیش تعریف شده توسط توسعه دهنده را ترکیب کنید، که به مرورگر اجازه می دهد منابع را برای کارهای اضافی، مانند کامپایل مجدد سایه بان ها، هدر ندهد. حالتهای پشتیبانی شده عبارتند از: سایهزنها، بافر رأس و طرحبندی ویژگیها، طرحبندی گروه چسبنده، ترکیب، عمق و الگوها، و فرمتهای خروجی پس از رندر.
سومین ویژگی WebGPU عمدتاً مدل binding نامیده می شود
یادآور ابزارهای گروه بندی منابع موجود در Vulkan است.
برای گروه بندی منابع با هم، WebGPU یک شی GPUBindGroup ارائه می دهد که می تواند با سایر اشیاء مشابه برای استفاده در سایه بان ها هنگام نوشتن دستورات مرتبط شود. ایجاد چنین گروههایی به راننده اجازه میدهد تا اقدامات مقدماتی لازم را از قبل انجام دهد و به مرورگر اجازه میدهد تا اتصالات منابع را بین تماسهای قرعهکشی بسیار سریعتر تغییر دهد. با استفاده از شی GPUBindGroupLayout میتوان طرحبندی پیوندهای منابع را از پیش تعریف کرد.
در فایرفاکس، برای فعال کردن WebGPU در about:config، یک تنظیم "dom.webgpu.enabled" وجود دارد. رندر CanvasContext همچنین نیاز به ترکیب بندی فعال دارد
منبع: opennet.ru