الميزات الجديدة في WebGPU (Chrome 124)

François Beaufort
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() لمزامنة عمليات الوصول إلى ذاكرة الزخرفة في مجموعة عمل.

يُنصح باستخدام توجيه requires للإشارة إلى احتمال عدم إمكانية النقل باستخدام 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 في Chrome بدعم عاملي الويب إلى مستوى جديد، وتوفّر الآن دعمًا لكلّ من مشغّلي الخدمات والعاملين المشترَكين. يمكنك استخدام عاملي الخدمة لتحسين المهام في الخلفية والإمكانات بلا إنترنت، والعاملين المشترَكين لمشاركة الموارد بكفاءة بين النصوص البرمجية. يمكنك الاطّلاع على المشكلة chromium:41494731.

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

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

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

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

  • d3dShaderModel هو الحد الأقصى لرقم نموذج تظليل D3D المتوافق. على سبيل المثال، تشير القيمة 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

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

لا يغطي هذا المقال سوى بعض النقاط الرئيسية. يمكنك الاطّلاع على القائمة الشاملة لعمليات الإرسال.

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

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

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

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