الميزات الجديدة في WebGPU (الإصدار 145 من Chrome)

François Beaufort
François Beaufort

Published: January 28, 2026

إضافة subgroup_uniformity في لغة WGSL

تغيّر إضافة subgroup_uniformity في لغة WGSL نطاق تحليل التوحيد للوظائف المضمّنة في المجموعات الفرعية والرباعية ليحدث على مستوى المجموعة الفرعية (بدلاً من مجموعة العمل). تسمح هذه الميزة باعتبار وظائف المجموعة الفرعية موحّدة في حالات أكثر، ما يمثّل تحسينًا في تجربة المطوّرين ويقلّل من احتمالية إيقاف عمليات التحقّق من التوحيد نهائيًا. من الآثار العملية لذلك أنّه سيتم اعتبار المزيد من القيم موحّدة على مستوى المجموعة الفرعية، مثل القيمة المضمّنة subgroup_id التي تمت إضافتها مؤخرًا.

يمكن رصد هذه الإضافة اللغوية باستخدام navigator.gpu.wgslLanguageFeatures. اطّلِع على المثال التالي والـ هدف من إطلاقها.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_uniformity")) {
  throw new Error(`WGSL subgroup uniformity is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  
  @group(0) @binding(0) var<storage, read_write> non_uniform: i32;

  fn main() {
    if (non_uniform == 42) {
      _ = subgroupElect();
    }
  }`,
}); // WGSL error: subgroupElect must only be called from subgroup uniform control flow.

تجربة ربط المخزن المؤقت المتزامن في العاملين

لاستكشاف الطرق المحتمَلة لتقليل الاحتكاك بين WebGPU والرمز البرمجي للتطبيق، يدرس فريق Chrome ربط المخزن المؤقت المتزامن في المنفّذين. كجزء من هذا الجهد، تم إنشاء نموذج أولي لطريقة mapSync() تجريبية جديدة لـ GPUBuffer. تعمل هذه الطريقة، المقتصرة على العاملين، بشكل مشابه لـ mapAsync().

هذه الميزة تجريبية، وملاحظاتك مهمة لتحديد ما إذا كان سيتم اقتراحها من أجل التوحيد. لتجربتها، شغِّل Chrome باستخدام مفتاح --enable-features=WebGPUMapSyncOnWorkers، وأرسِل ملاحظاتك حول فائدتها وتأثيرها. اطّلِع على المقتطف التالي للبدء.

// Create a GPU buffer.
const buffer = device.createBuffer({
  size: 42,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Map buffer synchronously when possible.
if ("mapSync" in GPUBuffer.prototype) {
  buffer.mapSync(GPUMapMode.READ);
} else {
  // Awaiting allows other code to run, which can cause application logic issues.
  await buffer.mapAsync(GPUMapMode.READ);
}

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

لم تعُد ميزة wgpu::FeatureName::R8UnormStorage متاحة. تم استبدالها بميزة wgpu::FeatureName::TextureFormatTier1 التي تحلّ محلّها الآن. اطّلِع على المشكلة رقم 472926167.

تمت إزالة ميزة wgpu::FeatureName::Snorm16TextureFormats. تشمل الآن ميزة wgpu::FeatureName::TextureFormatsTier1 إلى حد كبير إمكاناتها، باستثناء ميزة Resolve. اطّلِع على المشكلة رقم 465347942.

يتم الآن إنشاء الإصدارات الليلية من الملفات الثنائية (بالإضافة إلى Emdawnwebgpu) على GitHub، وهي متاحة في إصدارات google/dawn. يتم توفيرها كأفضل خدمة ممكنة ولا يتم توقيعها أو ضمانها من قِبل Google أو فريق Dawn.

تمت إضافة إمكانية استخدام wgpu::ExternalTexture إلى Emdawnwebgpu. يُرجى العِلم أنّه لا يمكن استيرادها إلا من رمز JavaScript (على سبيل المثال، EM_ASM)، لأنّه لا يمكن إنشاؤها في C/C++ بسبب الحاجة إلى عنصر JavaScript مثل HTMLVideoElement أو VideoFrame. اطّلِع على المشكلة رقم 462477379 وSpotTests.cpp للحصول على مثال على الرمز.

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

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

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

Chrome 149-150

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