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

François Beaufort
François Beaufort

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

استخدام عرض النسيج لربط النسيج الخارجي

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

ويؤدي ذلك إلى تبسيط منطق Shader في مسارات تأثيرات الفيديو التي يجب فيها التعامل مع كلّ من 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 Developer Features" في 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

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

آخر الأخبار من Dawn

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

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

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

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

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

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

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

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

الإصدار 132 من Chrome

الإصدار 131 من Chrome

Chrome 130

الإصدار 129 من Chrome

Chrome 128

الإصدار 127 من Chrome

الإصدار 126 من Chrome

الإصدار 125 من Chrome

Chrome 124

Chrome 123

الإصدار 122 من Chrome

الإصدار 121 من Chrome

الإصدار 120 من Chrome

الإصدار 119 من Chrome

Chrome 118

Chrome 117

Chrome 116

Chrome 115

الإصدار 114 من Chrome

Chrome 113