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

François Beaufort
François Beaufort

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

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

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

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

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 149-150

Chrome 147-148

‫Chrome 146

Chrome 145

‫Chrome 144

Chrome 143

الإصدار 142 من Chrome

‫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