موارد جدید در WebGPU (Chrome 118)

فرانسوا بوفور
François Beaufort

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

متد copyExternalImageToTexture() در GPUQueue به شما امکان می‌دهد یک snapshot گرفته شده از یک تصویر، ویدیو یا canvas منبع را در یک GPUTexture مشخص کپی کنید. اکنون می‌توانید اشیاء HTMLImageElement و ImageData را به عنوان منبع ارسال کنید. به مثال زیر مراجعه کنید و chroma: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 access qualifier برای بافت‌های ذخیره‌سازی استفاده کنید، توابع داخلی textureLoad() و textureStore() بر این اساس رفتار می‌کنند و یک تابع داخلی جدید textureBarrier() برای همگام‌سازی دسترسی‌های حافظه بافت در یک گروه کاری در دسترس است. به مثال و مشکل dawn:1972 زیر مراجعه کنید.

این ویژگی هنوز آزمایشی است و ممکن است تغییر کند. در حالی که در حال استاندارد شدن است، کروم را با پرچم --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.

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

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

یک برنامه جدید DawnInfo (مشابه vulkaninfo ) به شما امکان می‌دهد تا گزینه‌های تغییر وضعیت، آداپتورها، ویژگی‌های آداپتور و محدودیت‌های آداپتور را فهرست کنید. این برنامه هنگام ساخت samples dawn در دسترس است. در اینجا خروجی زیر که برای اختصار به شدت کوتاه شده است، آمده است. به 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» پوشش داده شده است.

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳