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

François Beaufort
François Beaufort

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

استفاده از نمای بافت برای پیوند externalTexture

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

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

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

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 اشاره‌گری به اتم در متغیر گروه کاری است. مشکل ۴۰۸۲۴۱۰۳۹ را ببینید.

@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 در GPUAdapterInfo

مشخصه رشته‌ای غیرمعیار powerPreference‏ GPUAdapterInfo اکنون زمانی دردسترس است که کاربر پرچم «ویژگی‌های توسعه‌دهنده WebGPU» را در 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.
  }
}

برداشتن مشخصه compatibilityMode از GPURequestAdapterOptions

مشخصه آزمایشی compatibilityMode‏ GPURequestAdapterOptions به‌نفع مشخصه استاندارد featureLevel که در Chrome 133 اضافه شده است برداشته شده است. مشکل ۳۶۶۱۵۱۴۰۴ را ببینید.

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

توسعه‌دهندگان می‌توانند پروژه‌های WebGPU را به زبان‌هایی مثل C++‎ بسازند و بااستفاده از webgpu.h، هم WebAssembly و هم پلاتفرم‌های خاص را هدف‌یابی کنند. «emdawnwebgpu» («Emscripten Dawn WebGPU») که به‌تازگی منتشر شده است، جدیدترین webgpu.h استانداردشده را ازطریق میانای برنامه‌سازی کاربردی مرورگر پیاده‌سازی می‌کند.

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

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

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

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

ویژگی‌های جدید 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