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

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

Published: May 26, 2025

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

A compatible GPUTextureView (2D, single subresource) is now allowed to be used in place of a GPUExternalTexture binding when creating a GPUBindGroup.

این امر منطق سایه‌زن را در خطوط لوله جلوه‌های ویدیویی که در آن‌ها هم 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 را حذف کنید.

The experimental GPURequestAdapterOptions compatibilityMode attribute has been removed in favor of the standardized featureLevel attribute added in Chrome 133 . See issue 366151404 .

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

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

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

Download emdawnwebgpu from Dawn's GitHub releases page and read the package's README.md for information on how to use it. The source files can be found in the Dawn repository .

For a complete guide, check out the updated Build an app with WebGPU documentation.

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

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

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

کروم ۱۵۱-۱۵۲

کروم ۱۴۹-۱۵۰

کروم ۱۴۷-۱۴۸

کروم ۱۴۶

کروم ۱۴۵

کروم ۱۴۴

کروم ۱۴۳

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳

،

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

Published: May 26, 2025

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

A compatible GPUTextureView (2D, single subresource) is now allowed to be used in place of a GPUExternalTexture binding when creating a GPUBindGroup.

این امر منطق سایه‌زن را در خطوط لوله جلوه‌های ویدیویی که در آن‌ها هم 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 را حذف کنید.

The experimental GPURequestAdapterOptions compatibilityMode attribute has been removed in favor of the standardized featureLevel attribute added in Chrome 133 . See issue 366151404 .

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

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

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

Download emdawnwebgpu from Dawn's GitHub releases page and read the package's README.md for information on how to use it. The source files can be found in the Dawn repository .

For a complete guide, check out the updated Build an app with WebGPU documentation.

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

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

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

کروم ۱۵۱-۱۵۲

کروم ۱۴۹-۱۵۰

کروم ۱۴۷-۱۴۸

کروم ۱۴۶

کروم ۱۴۵

کروم ۱۴۴

کروم ۱۴۳

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳

،

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

Published: May 26, 2025

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

A compatible GPUTextureView (2D, single subresource) is now allowed to be used in place of a GPUExternalTexture binding when creating a GPUBindGroup.

این امر منطق سایه‌زن را در خطوط لوله جلوه‌های ویدیویی که در آن‌ها هم 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 را حذف کنید.

The experimental GPURequestAdapterOptions compatibilityMode attribute has been removed in favor of the standardized featureLevel attribute added in Chrome 133 . See issue 366151404 .

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

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

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

Download emdawnwebgpu from Dawn's GitHub releases page and read the package's README.md for information on how to use it. The source files can be found in the Dawn repository .

For a complete guide, check out the updated Build an app with WebGPU documentation.

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

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

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

کروم ۱۵۱-۱۵۲

کروم ۱۴۹-۱۵۰

کروم ۱۴۷-۱۴۸

کروم ۱۴۶

کروم ۱۴۵

کروم ۱۴۴

کروم ۱۴۳

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳