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