الميزات الجديدة في 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".

بعد ذلك، يمكن لرمز برنامج Shader في WGSL استخدام read_write وread لتحديد الوصول إلى نسيج التخزين، وتتصرف الدوالّ المضمّنة textureLoad() وtextureStore() وفقًا لذلك، وتتوفّر دالة textureBarrier() جديدة مضمّنة لمزامنة عمليات الوصول إلى ذاكرة النسيج في مجموعة عمل.

ننصحك باستخدام توجيه requires للإشارة إلى احتمال عدم إمكانية النقل باستخدام requires readonly_and_readwrite_storage_textures; في أعلى رمز برنامج Shader لـ 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 دعم مهام الويب إلى المستوى التالي، حيث تتيح الآن استخدام كلّ من مهام الخدمة ومهام العمل المشتركة. يمكنك استخدام مشغّلات الخدمات لتحسين المهام التي تعمل في الخلفية وإمكانات العمل بلا إنترنت، واستخدام مشغّلات مشترَكة لمشاركة الموارد بكفاءة في جميع النصوص البرمجية. راجِع المشكلة chromium:41494731.

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

لقطة شاشة لإضافة WebLLM على Chrome
إضافة WebLLM في Chrome.

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

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

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

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

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

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

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

آخر الأخبار من Dawn

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

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

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

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

الإصدار 131 من Chrome

Chrome 130

الإصدار 129 من Chrome

Chrome 128

الإصدار 127 من Chrome

الإصدار 126 من Chrome

الإصدار 125 من Chrome

Chrome 124

Chrome 123

الإصدار 122 من Chrome

الإصدار 121 من Chrome

الإصدار 120 من Chrome

الإصدار 119 من Chrome

Chrome 118

Chrome 117

Chrome 116

Chrome 115

الإصدار 114 من Chrome

Chrome 113