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

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

تاریخ انتشار: 26 مه 2025

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

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

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

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 به توسعه‌دهندگان اجازه می‌دهد هنگام استفاده از copyBufferToBuffer() پارامترهای offset و اندازه را حذف کنند تا کپی کل بافرها را ساده کنند. به 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 با استفاده از اشاره گر به اتمی

اضافه بار 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);
}

ویژگی GPUAdapterInfo powerPreference

وقتی کاربر پرچم "ویژگی های توسعه دهنده WebGPU" را در chrome://flags/#enable-webgpu-developer-features فعال کرده باشد، ویژگی رشته غیر استاندارد powerPreference GPUAdapterInfo اکنون در دسترس است. در صورت پشتیبانی، مقدار 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 اضافه شده در Chrome 133 حذف شده است. به شماره 366151404 مراجعه کنید.

به روز رسانی سحر

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

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

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

برای یک راهنمای کامل، به‌روزرسانی‌شده ساخت برنامه با اسناد WebGPU را بررسی کنید.

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

چه چیزی در WebGPU جدید است

فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.

کروم 139

کروم 138

کروم 137

کروم 136

کروم 135

کروم 134

کروم 133

کروم 132

کروم 131

کروم 130

کروم 129

کروم 128

کروم 127

کروم 126

کروم 125

کروم 124

کروم 123

کروم 122

کروم 121

کروم 120

کروم 119

کروم 118

کروم 117

کروم 116

کروم 115

کروم 114

کروم 113