الميزات الجديدة في 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 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);
}

تعديلات الفجر

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

تمت إزالة ميزة "wgpu::FeatureName::Snorm16TextureFormats". أصبحت إمكانات هذه الأداة، باستثناء Resolve، مضمّنة إلى حد كبير في 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 155-156

‫Chrome 153-154

‫Chrome 151-152

‫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