ویژگی‌های جدید WebGPU (Chrome 124)

François Beaufort
François Beaufort

بافت‌های ذخیره‌سازی فقط خواندنی و خواندنی-نوشتنی

نوع اتصال بافت ذخیره‌سازی به سایه‌زن‌ها اجازه می‌دهد بدون افزودن استفاده TEXTURE_BINDING، از بافت‌های ذخیره‌سازی بخوانند و خواندن و نوشتن ترکیبی را در قالب‌های خاصی انجام دهند. وقتی "readonly_and_readwrite_storage_textures" WGSL افزونه زبان در navigator.gpu.wgslLanguageFeatures وجود دارد، اکنون هنگام ایجاد چیدمان گروه پیوند می‌توانید دسترسی GPUStorageTexture را روی "read-write" یا "read-only" تنظیم کنید. قبلاً این مورد به "write-only" محدود بود.

سپس، کد سایه‌زن WGSL شما می‌تواند از مشخص‌کننده دسترسی read_write و read برای بافت‌های ذخیره‌سازی استفاده کند، عملکردهای داخلی textureLoad() و textureStore() متناسب با آن عمل می‌کنند، و عملکرد داخلی جدید textureBarrier() برای همگام‌سازی دسترسی‌های حافظه بافت در یک گروه کاری دردسترس است.

توصیه می‌شود از requires-directive برای نشان دادن احتمال غیرقابل‌حمل بودن با requires readonly_and_readwrite_storage_textures; در بالای کد سایه‌زن WGSL استفاده کنید. به مثال زیر و issue dawn:1972 مراجعه کنید.

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  requires readonly_and_readwrite_storage_textures;

  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

پشتیبانی از عاملان خدماتی و عاملان مشترک

‫WebGPU در Chrome پشتیبانی از کارگران وب را به سطح بعدی می‌برد و اکنون از کارگران سرویس و کارگران مشترک پشتیبانی می‌کند. می‌توانید از کارگران خدمات برای بهبود وظایف پس‌زمینه و قابلیت‌های آفلاین، و از کارگران مشترک برای هم‌رسانی کارآمد منابع در سراسر دستورگان‌ها استفاده کنید. issue chromium:41494731 را ببینید.

برای دیدن نحوه استفاده از WebGPU در کارگر سرویس افزونه، نمونه افزونه Chrome و افزونه WebLLM Chrome را بررسی کنید.

نماگرفتی از افزونه WebLLM Chrome.
افزونه Chrome برای WebLLM.

مشخصه‌های اطلاعات آداپتور جدید

مشخصه‌های اطلاعات آداپتور غیراستاندارد d3dShaderModel و vkDriverVersion اکنون هنگام فراخوانی requestAdapterInfo() دردسترس است، به‌شرطی که کاربر پرچم ویژگی‌های توسعه‌دهنده WebGPU را در chrome://flags/#enable-webgpu-developer-features فعال کرده باشد. درصورت پشتیبانی:

  • ‫d3dShaderModel حداکثر شماره مدل سایه‌زن D3D پشتیبانی‌شده است. برای مثال، مقدار ۶۲ نشان می‌دهد که درایور فعلی از HLSL SM 6.2 پشتیبانی می‌کند. سند و مشکل سپیده‌دم:۱۲۵۴ را ببینید.

  • vkDriverVersion شماره نسخه مشخص‌شده توسط فروشنده درایور Vulkan است. سند و مشکل chromium:327457605 را ببینید.

نماگرفت https://webgpureport.org با vkDriverVersion در اطلاعات آداپتور.
اطلاعات آداپتور vkDriverVersion در https://webgpureport.org نشان داده می‌شود.

رفع اشکال‌ها

ایجاد دو خط لوله با گروه‌های اتصال منطبق بااستفاده از layout: "auto"، سپس ایجاد گروه اتصال با خط لوله اول، و استفاده از آن در خط لوله دوم اکنون باعث ایجاد GPUValidationError می‌شود. اجازه دادن به آن یک اشکال پیاده‌سازی بود که اکنون با آزمایش‌های مناسب برطرف شده است. issue dawn:2402 را ببینید.

به‌روزرسانی‌های سپیده‌دم

در Dawn API، پس‌از ازدست رفتن دستگاه GPU، دیگر با wgpuDeviceSetUncapturedErrorCallback تماس گرفته نمی‌شود. این اصلاح Dawn را با مشخصات «میانای برنامه‌سازی کاربردی جاوا اسکریپت» و پیاده‌سازی Blink هماهنگ می‌کند. issue dawn:2459 را ببینید.

این فقط برخی‌از نکات برجسته کلیدی را پوشش می‌دهد. فهرست کامل تعهدات را بررسی کنید.

ویژگی‌های جدید WebGPU

فهرستی از همه مواردی که در مجموعه ویژگی‌های جدید WebGPU پوشش داده شده است.

‫۱۵۵-۱۵۶ Chrome

‫۱۵۳-۱۵۴ Chrome

Chrome 151-152

‫۱۴۹-۱۵۰ Chrome

‫۱۴۷-۱۴۸ Chrome

‫۱۴۶ Chrome

‫Chrome 145

‫۱۴۴ Chrome

‫۱۴۳ Chrome

‫۱۴۲ Chrome

Chrome 141

‫۱۴۰ Chrome

Chrome 139

‫Chrome 138

Chrome 137

‫Chrome 136

‫۱۳۵ Chrome

‫۱۳۴ Chrome

‫Chrome 133

‫۱۳۲ Chrome

‫۱۳۱ Chrome

‫Chrome 130

‫Chrome 129

‫Chrome 128

‫Chrome 127

‫Chrome 126

‫Chrome 125

‫Chrome 124

‫Chrome 123

‫Chrome 122

Chrome 121

‫Chrome 120

‫Chrome 119

‫Chrome 118

Chrome 117

‫Chrome 116

‫Chrome 115

Chrome 114

‫Chrome 113