الميزات الجديدة في 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() مدمجة جديدة لمزامنة عمليات الوصول إلى ذاكرة النسيج في مجموعة عمل. يُرجى الاطّلاع على المثال التالي ومشكلة 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.

الإشعارات عند الفجر

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

يتيح لك برنامج "DawnInfo" الجديد (المشابه لـ vulkaninfo) إدراج أجهزة التوصيل والمحوّلات وميزات المحوّل والحدود القصوى المسموح بها للمحوّلات. وتتوفّر هذه الميزة عند مبنى samples عند الفجر. في ما يلي الناتج أدناه الذي تم قطعه بشكل كبير بغرض الإيجاز. يُرجى الاطّلاع على تغيير الفجر: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.

الإصدار 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 من متصفّح Chrome