الميزات الجديدة في 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 Workers مع العاملين المشتركين

تنتقل WebGPU في Chrome إلى مستوى جديد من توافق Web Workers، إذ توفّر الآن توافقًا مع كل من برامج الخدمة وبرامج التشغيل المشتركة. يمكنك استخدام مشغّلات الخدمات لتحسين مهام الخلفية وإمكانات العمل بلا إنترنت، واستخدام المشغّلات المشتركة لمشاركة الموارد بكفاءة بين النصوص البرمجية. راجِع المشكلة 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 143

Chrome 142

Chrome 141

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