موارد جدید در WebGPU (Chrome 137)، موارد جدید در WebGPU (Chrome 137)

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

منتشر شده: ۲۶ مه ۲۰۲۵

استفاده از نمای بافت برای اتصال خارجی بافت

اکنون می‌توان هنگام ایجاد یک GPUBindGroup، به جای اتصال GPUExternalTexture از یک GPUTextureView سازگار (دوبعدی، تک منبعی) استفاده کرد.

این امر منطق سایه‌زن را در خطوط لوله جلوه‌های ویدیویی که در آن‌ها هم GPUExternalTexture (برای ویدیوی منبع) و هم GPUTextureView (برای پردازش میانی) باید مدیریت شوند، ساده می‌کند. همچنین نیاز به کامپایل پویای سایه‌زن‌ها را بسته به منبع بافت کاهش می‌دهد. برای اتصال externalTexture به Intent to Ship: WebGPU: GPUTextureView مراجعه کنید.

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 با قابلیت overload کردن، به توسعه‌دهندگان اجازه می‌دهد تا هنگام استفاده از 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(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 آداپتور GPU

ویژگی رشته‌ای غیراستاندارد powerPreference GPUAdapterInfo اکنون زمانی در دسترس است که کاربر پرچم "WebGPU Developer Features" را در chrome://flags/#enable-webgpu-developer-features فعال کرده باشد. در صورت پشتیبانی، مقدار powerPreference می‌تواند بسته به مقدار GPUPowerPreference که در GPURequestAdapterOptions استفاده شده است، "low-power" یا "high-performance" باشد. به 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.
  }
}

ویژگی سازگاری GPURequestAdapterOptions را حذف کنید.

ویژگی آزمایشی GPURequestAdapterOptions compatibilityMode به نفع ویژگی استاندارد featureLevel که در کروم ۱۳۳ اضافه شده است، حذف شده است. به شماره ۳۶۶۱۵۱۴۰۴ مراجعه کنید.

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

توسعه‌دهندگان می‌توانند پروژه‌های WebGPU را با زبان‌هایی مانند C++ و با استفاده از webgpu.h برای هدف قرار دادن WebAssembly و پلتفرم‌های خاص بسازند. ابزار تازه منتشر شده‌ی Dawn با نام "emdawnwebgpu" ("Emscripten Dawn WebGPU") آخرین webgpu.h استاندارد شده را روی API مرورگر پیاده‌سازی می‌کند.

Emdawnwebgpu یک انشعاب (نگهداری‌شده) از اتصالات داخلی Emscripten (که اکنون نگهداری نمی‌شود) ( USE_WEBGPU ) است. تمام توسعه‌های جدید روی emdawnwebgpu انجام می‌شود و اتصالات داخلی Emscripten با انتقال توسعه‌دهندگان به emdawnwebgpu حذف خواهند شد. هدر C مربوط به Emdawnwebgpu بسیار شبیه به هدر Dawn است، در حالی که اتصالات داخلی آن به طور قابل توجهی قدیمی هستند.

emdawnwebgpu را از صفحه انتشار GitHub شرکت Dawn دانلود کنید و برای اطلاعات بیشتر در مورد نحوه استفاده از آن، فایل README.md مربوط به بسته را مطالعه کنید. فایل‌های منبع را می‌توانید در مخزن Dawn پیدا کنید.

برای راهنمای کامل، مستندات به‌روز شده‌ی Build an app with WebGPU را بررسی کنید.

این فقط برخی از نکات برجسته کلیدی را پوشش می‌دهد. لیست جامع کامیت‌ها را بررسی کنید.

ویژگی‌های جدید WebGPU

فهرستی از تمام مواردی که در مجموعه «ویژگی‌های جدید WebGPU» پوشش داده شده است.

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳