الميزات الجديدة في 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. اطّلِع على المثال التالي والمشكلة 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.

توافق Service Worker مع العاملين المشتركين

تنتقل WebGPU في Chrome إلى مستوى جديد من التوافق مع برامج الخلفية على الويب، إذ توفّر الآن التوافق مع كل من برامج الخلفية للخدمات وبرامج الخلفية المشتركة. يمكنك استخدام مشغّلي الخدمات لتحسين مهام الخلفية وإمكانات العمل بلا إنترنت، واستخدام المشغّلين المشتركين لمشاركة الموارد بكفاءة بين النصوص البرمجية. اطّلِع على المشكلة chromium:41494731.

يمكنك الاطّلاع على نموذج إضافة Chrome وإضافة WebLLM Chrome لمعرفة كيفية استخدام WebGPU في عامل خدمة الإضافة.

لقطة شاشة لإضافة WebLLM على Chrome
إضافة WebLLM لمتصفّح Chrome

سمات معلومات المحوّل الجديدة

تتوفّر الآن سمات معلومات محوّل d3dShaderModel وvkDriverVersion غير العادية عند طلب requestAdapterInfo() إذا فعّل المستخدم العلامة "ميزات مطوّري WebGPU" في chrome://flags/#enable-webgpu-developer-features. عندما يكون هذا الخيار متاحًا:

  • d3dShaderModel هو الحد الأقصى لرقم نموذج D3D shader المتوافق. على سبيل المثال، تشير القيمة 62 إلى أنّ برنامج التشغيل الحالي يتوافق مع HLSL SM 6.2. يمكنك الاطّلاع على المستندات والمشكلة dawn:1254.

  • vkDriverVersion هو رقم إصدار برنامج تشغيل Vulkan الذي يحدّده المورّد. يُرجى الاطّلاع على المستندات والمشكلة chromium:327457605.

لقطة شاشة لصفحة https://webgpureport.org تعرض vkDriverVersion في معلومات المحوّل يتم عرض
معلومات المحوّل vkDriverVersion على https://webgpureport.org.

إصلاح الأخطاء

سيؤدي إنشاء مسارَي معالجة يتضمّنان مجموعات ربط متطابقة باستخدام layout: "auto"، ثم إنشاء مجموعة ربط باستخدام مسار المعالجة الأول واستخدامها في مسار المعالجة الثاني إلى ظهور الخطأ GPUValidationError. كان السماح بذلك خطأ في التنفيذ، وقد تم إصلاحه الآن من خلال اختبارات مناسبة. راجِع المشكلة dawn:2402.

إشعارات الفجر

في Dawn API، لم يعُد يتم استدعاء دالة معاودة الاتصال الخاصة بالخطأ غير الملتقط التي تم ضبطها باستخدام wgpuDeviceSetUncapturedErrorCallback بعد فقدان جهاز وحدة معالجة الرسومات. يتوافق هذا الإصلاح مع مواصفات JavaScript API وطريقة تنفيذ Blink. راجِع المشكلة dawn:2459.

هذا يشمل بعض النقاط الرئيسية فقط. اطّلِع على القائمة الشاملة لعمليات الإيداع.

الميزات الجديدة في WebGPU

قائمة بكل ما تم تناوله في سلسلة الميزات الجديدة في WebGPU

Chrome 140

‫Chrome 139

‫Chrome 138

‫Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

‫Chrome 132

Chrome 131

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