الميزات الجديدة في WebGPU (Chrome 118)

François Beaufort
François Beaufort

إتاحة HTMLImageElement وImageData في copyExternalImageToTexture()

تتيح لك طريقة copyExternalImageToTexture() في GPUQueue نسخ لقطة تم التقاطها من صورة أو فيديو أو لوحة فنية مصدر إلى GPUTexture معيّن. يمكنك الآن تمرير عنصرَي HTMLImageElement وImageData كمصدر. راجِع المثال التالي والمشكلة chromium:1471372.

// Fetch and decode image.
const source = document.createElement("img");
source.src = "my-image.png";
await source.decode();

// Create destination texture.
const size = [source.width, source.height];
const texture = myDevice.createTexture({
 size,
 format: "rgba8unorm",
 usage:
   GPUTextureUsage.COPY_DST |
   GPUTextureUsage.RENDER_ATTACHMENT |
   GPUTextureUsage.TEXTURE_BINDING,
});

// Copies a snapshot taken from the source image into a texture.
myDevice.queue.copyExternalImageToTexture({ source }, { texture }, size);

إتاحة تجريبية لميزة تخزين النسيج للقراءة والكتابة والقراءة فقط

يتيح لك نوع ربط نسيج التخزين تنفيذ عمليات قراءة النسيج بدون أخذ عيّنات وتخزينها في مواضع عشوائية في الخدع اللونية. عندما تكون ميزة "chromium-experimental-read-write-storage-texture" متاحة في GPUAdapter، يمكنك الآن طلب GPUDevice يتضمّن هذه الميزة وضبط إذن وصول GPUStorageTexture إلى "read-write" أو "read-only" عند إنشاء تنسيق مجموعة ربط. في السابق، كان هذا الخيار متاحًا في "write-only" فقط.

للاستفادة من هذه الميزة، يجب تفعيل هذه الإضافة صراحةً في رمز WGSL باستخدام enable chromium_experimental_read_write_storage_texture. عند تفعيل هذه الميزة، يمكنك استخدام read_write وread لتحديد الوصول إلى مواد التخزين، وتتصرف الدالتان المضمّنتان textureLoad() وtextureStore() وفقًا لذلك، وتتوفّر دالة textureBarrier() جديدة مدمجة لمزامنة عمليات الوصول إلى ذاكرة النسيج في مجموعة عمل. اطّلِع على المثال التالي وissue dawn:1972.

لا تزال هذه الميزة تجريبية وقد تتغير. أثناء توحيدها، يمكنك تشغيل Chrome باستخدام الميزة التجريبية --enable-dawn-features=allow_unsafe_apis لإتاحتها.

const feature = "chromium-experimental-read-write-storage-texture";
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has(feature)) {
  throw new Error("Read-write storage texture support is not available");
}
// Explicitly request read-write storage texture support.
const device = await adapter.requestDevice({
  requiredFeatures: [feature],
});

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_read_write_storage_texture;
  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`,
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

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

أعادت واجهة برمجة التطبيقات C في webgpu.h تسمية الحقول التالية من أجل الاتساق: requiredFeaturesCount إلى requiredFeatureCount وpipelineStatisticsCount إلى pipelineStatisticCount وcolorFormatsCount إلى colorFormatCount. راجِع الطلب dawn:146040.

يتيح لك برنامج DawnInfo الجديد (المشابه لبرنامج vulkaninfo) إدراج مفاتيح التبديل والمحولات وميزات المحولات والقيود المفروضة عليها. وهو متاح عند إنشاء الإصدار samples. في ما يلي النتائج أدناه التي تم اقتصاصها كثيرًا لتبسيطها. راجِع change dawn:149020.

./out/Debug/DawnInfo
Toggles
=======
  Name: allow_unsafe_apis
    Suppresses validation errors on API entry points or parameter combinations
    that aren't considered secure yet.
    http://crbug.com/1138528
[…]

Adapter
=======
VendorID: 0x106B
Vendor: apple
Architecture: common-3
DeviceID: 0x0000
Name: Apple M1 Pro
Driver description: Metal driver on macOS Version 13.5.1 (Build 22G90)
Adapter Type: discrete GPU
Backend Type: Metal
Power: <undefined>

  Features
  ========
   * depth_clip_control
      Disable depth clipping of primitives to the clip volume
      https://bugs.chromium.org/p/dawn/issues/detail?id=1178
[…]

  Adapter Limits
  ==============
    maxTextureDimension1D: 16,384
    maxTextureDimension2D: 16,384
[…]

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

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

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

Chrome 131

Chrome 130

الإصدار 129 من Chrome

Chrome 128

Chrome 127

الإصدار 126 من Chrome

الإصدار 125 من Chrome

Chrome 124

Chrome 123

Chrome 122

الإصدار 121 من Chrome

الإصدار 120 من Chrome

الإصدار 119 من Chrome

Chrome 118

Chrome 117

Chrome 116

Chrome 115

الإصدار 114 من Chrome

Chrome 113