ویژگی‌های جدید WebGPU (Chrome 118)

François Beaufort
François Beaufort

پشتیبانی از HTMLImageElement و ImageData در copyExternalImageToTexture()

روش copyExternalImageToTexture() در GPUQueue به شما امکان می‌دهد یک لحظه‌عکس گرفته‌شده از تصویر، ویدیو، یا بوم منبع را در GPUTexture معینی کپی کنید. اکنون می‌توانید اشیای HTMLImageElement و ImageData را به‌عنوان منبع عبور دهید. مثال زیر و issue 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.

به‌روزرسانی‌های سپیده‌دم

میانای برنامه‌سازی کاربردی C در webgpu.h برای ایجاد یکپارچگی، نام فیلدهای زیر را تغییر داده است: requiredFeaturesCount به requiredFeatureCount، pipelineStatisticsCount به pipelineStatisticCount، و colorFormatsCount به colorFormatCount. issue dawn:146040 را ببینید.

برنامه جدید DawnInfo (مشابه vulkaninfo) به شما امکان می‌دهد کلیدهای تغییر وضعیت، آداپتورها، ویژگی‌های آداپتور، و محدودیت‌های آداپتور را فهرست کنید. این گزینه هنگام ساختن dawn samples دردسترس است. در اینجا برونداد زیر برای کوتاهی به‌شدت برش خورده است. تغییر سپیده دم:۱۴۹۰۲۰ را ببینید.

./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

‫۱۵۳-۱۵۴ Chrome

Chrome 151-152

‫۱۴۹-۱۵۰ Chrome

‫۱۴۷-۱۴۸ Chrome

‫۱۴۶ Chrome

‫Chrome 145

‫۱۴۴ Chrome

‫۱۴۳ Chrome

‫۱۴۲ Chrome

Chrome 141

‫۱۴۰ Chrome

Chrome 139

‫Chrome 138

Chrome 137

‫Chrome 136

‫۱۳۵ Chrome

‫۱۳۴ Chrome

‫Chrome 133

‫۱۳۲ Chrome

‫۱۳۱ Chrome

‫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