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

François Beaufort
François Beaufort

تاريخ النشر: 28 يناير 2026

إضافة WGSL subgroup_uniformity

يغيّر امتداد لغة WGSL subgroup_uniformity نطاق تحليل التوحيد للدوال المضمّنة في المجموعات الفرعية والمجموعات الرباعية ليحدث على مستوى المجموعة الفرعية (بدلاً من مجموعة العمل). تسمح هذه الميزة باعتبار وظيفة المجموعة الفرعية موحّدة في المزيد من الحالات، ما يوفّر تجربة أفضل للمطوّرين ويقلّل من احتمالية إيقاف عمليات التحقّق من التوحيد تمامًا. ومن الآثار العملية لذلك أنّه سيتم اعتبار المزيد من القيم موحّدة على مستوى المجموعة الفرعية، مثل القيمة المضمّنة 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 s<ubgroups;
  
  @gro>up(0) @binding(0) varstorage, 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);
}

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

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

تمت إزالة ميزة wgpu::FeatureName::Snorm16TextureFormats. أصبحت إمكانات هذه الأداة، باستثناء ميزة "حلّ المشاكل"، مضمّنة إلى حدّ كبير في wgpu::FeatureName::TextureFormatsTier1. اطّلِع على المشكلة 465347942.

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

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

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

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

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

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