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

François Beaufort
François Beaufort

تاريخ النشر: 26 مايو 2025

استخدام طريقة عرض الزخرفة لربط externalTexture

يُسمح الآن باستخدام GPUTextureView متوافق (ثنائي الأبعاد، مورد فرعي واحد) بدلاً من ربط GPUExternalTexture عند إنشاء GPUBindGroup.

يؤدي ذلك إلى تبسيط منطق التظليل في مسارات تأثيرات الفيديو التي يجب فيها التعامل مع كلّ من GPUExternalTexture (للفيديو المصدر) وGPUTextureView (للمعالجة الوسيطة). ويقلّل أيضًا من الحاجة إلى تجميع أدوات تظليل ديناميكيًا استنادًا إلى مصدر الزخرفة. يمكنك الاطّلاع على إشعار بشأن إطلاق ميزة: WebGPU: GPUTextureView لربط externalTexture.

const texture = myDevice.createTexture({
  size: [42, 42],
  format: navigator.gpu.getPreferredCanvasFormat(),
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});

const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
    
@compute @workgroup_size(1) fn main() {
  buffer = textureDimensions(texture);
}`;

const pipeline = myDevice.createComputePipeline({
  layout: "auto",
  compute: { module: myDevice.createShaderModule({ code }) },
});

const bindGroup = myDevice.createBindGroup({
  layout: pipeline.getBindGroupLayout(0),
  entries: [
    { binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
    { binding: 1, resource: { buffer: myBuffer } },
  ],
});

نسخ المخازن المؤقتة بدون تحديد الإزاحات والحجم

يتيح تحميل زائد جديد لطريقة GPUCommandEncoder للمطوّرين إغفال مَعلمات الإزاحة والحجم عند استخدام copyBufferToBuffer() لتبسيط عملية نسخ المخازن المؤقتة بأكملها. اطّلِع على Intent to Ship: WebGPU: copyBufferToBuffer overload.

const size = 42;
const srcBuffer = myDevice.createBuffer({
  size,
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
  size,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);

// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);

‫WGSL workgroupUniformLoad باستخدام مؤشر إلى ذرة

تمت إضافة عملية تحميل زائدة جديدة workgroupUniformLoad(ptr) في WGSL لتسهيل عمل المطوّرين. تحمّل هذه الدالة بشكل ذري القيمة التي يشير إليها ptr وتعرضها لجميع عمليات الاستدعاء في مجموعة العمل، حيث يكون ptr مؤشرًا إلى ذرة داخل متغيّر مجموعة العمل. يمكنك الاطّلاع على المشكلة 408241039.

@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;

var<workgroup> wgvar : atomic<u32>;

@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
  if (lid == 0) {
    atomicStore(&(wgvar), 42u);
  }
  buffer[lid] = workgroupUniformLoad(&wgvar);
}

سمة powerPreference في GPUAdapterInfo

تتوفّر الآن سمة السلسلة powerPreference غير العادية في GPUAdapterInfo عندما يفعّل المستخدم العلامة "ميزات مطوّري WebGPU" على chrome://flags/#enable-webgpu-developer-features. إذا كان ذلك متاحًا، يمكن أن تكون قيمة powerPreference إما "low-power" أو "high-performance" استنادًا إلى قيمة GPUPowerPreference التي تم استخدامها في GPURequestAdapterOptions. راجِع CL 6438860.

function checkPowerPreferenceForGpuDevice(device) {
  const powerPreference = device.adapterInfo.powerPreference;
  if (powerPreference === "high-performance") {
    // High-performance GPU detected. Enabling enhanced graphics settings.
  } else if (powerPreference === "low-power") {
    // Low-power GPU detected. Optimizing for battery life.
  }
}

إزالة سمة compatibilityMode من GPURequestAdapterOptions

تمت إزالة السمة التجريبية compatibilityMode GPURequestAdapterOptions لصالح السمة featureLevel الموحّدة التي تمت إضافتها في الإصدار 133 من Chrome. يمكنك الاطّلاع على المشكلة رقم 366151404.

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

يمكن للمطوّرين إنشاء مشاريع WebGPU بلغات مثل C++‎، وذلك باستخدام webgpu.h لاستهداف كلّ من WebAssembly والأنظمة الأساسية المحدّدة. تنفّذ مكتبة "emdawnwebgpu" ("Emscripten Dawn WebGPU") التي تم إصدارها حديثًا أحدث إصدار من webgpu.h المعياري عبر واجهة برمجة التطبيقات للمتصفّح.

‫Emdawnwebgpu هي نسخة معدَّلة (يتم صيانتها) من الروابط المضمَّنة في Emscripten (التي لم يعُد يتم صيانتها) (USE_WEBGPU). يتم إجراء جميع عمليات التطوير الجديدة على emdawnwebgpu، وستتم إزالة الروابط المضمَّنة في Emscripten عندما ينتقل المطوّرون إلى emdawnwebgpu. إنّ عنوان C الخاص بـ Emdawnwebgpu قريب جدًا من عنوان Dawn، في حين أنّ عمليات الربط المضمّنة قديمة جدًا.

نزِّل emdawnwebgpu من صفحة إصدارات Dawn على GitHub واقرأ ملف README.md الخاص بالحزمة للحصول على معلومات حول كيفية استخدامها. يمكن العثور على ملفات المصدر في مستودع Dawn.

للحصول على دليل كامل، اطّلِع على مستندات إنشاء تطبيق باستخدام WebGPU المحدّثة.

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

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