چیزهای جدید در WebGPU (Chrome 124)

فرانسوا بوفور
François Beaufort

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

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

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

توصیه می‌شود از یک دستورالعمل require- برای نشان دادن احتمال عدم قابلیت حمل با requires readonly_and_readwrite_storage_textures; در بالای کد سایه‌زن WGSL خود استفاده کنید. به مثال و شماره 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 در کروم، پشتیبانی از وب ورکرها را به سطح بالاتری می‌برد و اکنون از هر دو نوع سرویس ورکر و Shared Worker پشتیبانی می‌کند. می‌توانید از سرویس ورکر برای بهبود وظایف پس‌زمینه و قابلیت‌های آفلاین و از Shared Worker برای اشتراک‌گذاری کارآمد منابع بین اسکریپت‌ها استفاده کنید. به شماره Chrome:41494731 مراجعه کنید.

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

تصویری از افزونه کروم WebLLM.
افزونه کروم WebLLM.

ویژگی‌های اطلاعات آداپتور جدید

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

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

  • vkDriverVersion شماره نسخه درایور Vulkan است که توسط فروشنده مشخص شده است. به مستندات و شماره نسخه Chrome:327457605 مراجعه کنید.

تصویر صفحه https://webgpureport.org که vkDriverVersion را در قسمت اطلاعات آداپتور نشان می‌دهد.
اطلاعات آداپتور vkDriverVersion در https://webgpureport.org نشان داده شده است.

رفع اشکالات

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

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

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

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

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

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

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳