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

François Beaufort
François Beaufort

تاریخ انتشار: ۲۸ ژانویه ۲۰۲۶

افزونه WGSL subgroup_uniformity

افزونه زبان WGSL subgroup_uniformity محدوده تحلیل یکنواختی را برای توابع داخلی زیرگروه و چهارگانه تغییر می‌دهد تا در سطح زیرگروه (به‌جای گروه کاری) انجام شود. این ویژگی باعث می‌شود عملکرد زیرگروه در موارد بیشتری یکسان درنظر گرفته شود و درنتیجه کیفیت زندگی توسعه‌دهندگان بهبود یابد و احتمال غیرفعال شدن کامل بررسی‌های یکسانی کاهش یابد. پیامد عملی آن این است که مقادیر بیشتری به‌عنوان یکنواخت زیرگروه دیده خواهند شد، مثل مقدار داخلی subgroup_id که اخیراً اضافه شده است.

این افزونه زبان را می‌توان بااستفاده از navigator.gpu.wgslLanguageFeatures تشخیص ویژگی کرد. مثال زیر و قصد ارسال را ببینید.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_uniformity")) {
  throw new Error(`WGSL subgroup uniformity is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  
  @group(0) @binding(0) var<storage, read_write> non_uniform: i32;

  fn main() {
    if (non_uniform == 42) {
      _ = subgroupElect();
    }
  }`,
}); // WGSL error: subgroupElect must only be called from subgroup uniform control flow.

نگاشت بافر هم‌زمان آزمایشی در کارگران

تیم Chrome برای کاوش روش‌های بالقوه برای کاهش اصطکاک بین WebGPU و کد برنامه، درحال بررسی نگاشت هم‌زمان بافر در کارگران است. به‌عنوان بخشی از این تلاش، روش آزمایشی جدیدی برای mapSync() GPUBuffer نمونه‌سازی شده است. این روش که محدود به کارگران است، مشابه mapAsync() عمل می‌کند.

این ویژگی آزمایشی است و بازخورد شما برای تعیین اینکه آیا برای استانداردسازی پیشنهاد شود یا نه مهم است. برای امتحان کردن آن، Chrome را بااستفاده از کلید --enable-features=WebGPUMapSyncOnWorkers راه‌اندازی کنید و بازخوردتان را درباره مفید بودن و تأثیر آن گزارش کنید. برای شروع، تکه‌کد زیر را ببینید.

// Create a GPU buffer.
const buffer = device.createBuffer({
  size: 42,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Map buffer synchronously when possible.
if ("mapSync" in GPUBuffer.prototype) {
  buffer.mapSync(GPUMapMode.READ);
} else {
  // Awaiting allows other code to run, which can cause application logic issues.
  await buffer.mapAsync(GPUMapMode.READ);
}

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

ویژگی wgpu::FeatureName::R8UnormStorage دیگر دردسترس نیست. این نسخه با wgpu::FeatureName::TextureFormatTier1 جایگزین شده است که اکنون جایگزین آن است. مشکل ۴۷۲۹۲۶۱۶۷ را ببینید.

ویژگی wgpu::FeatureName::Snorm16TextureFormats برداشته شده است. قابلیت‌های آن، به‌جز «حل‌وفصل»، اکنون تا حد زیادی در wgpu::FeatureName::TextureFormatsTier1 گنجانده شده است. مشکل ۴۶۵۳۴۷۹۴۲ را ببینید.

نسخه‌های شبانه فایل‌های اجرایی (علاوه‌بر Emdawnwebgpu) اکنون در GitHub ساخته می‌شوند و در نسخه‌های google/dawn دردسترس هستند. این خدمات به‌عنوان سرویس تلاش حداکثری ارائه می‌شوند و Google یا تیم Dawn آن‌ها را امضا یا تضمین نمی‌کنند.

پشتیبانی از wgpu::ExternalTexture به Emdawnwebgpu اضافه شده است. توجه داشته باشید که فقط می‌توان آن را از کد جاوا اسکریپت (برای مثال، EM_ASM) وارد کرد، زیرا ساخت آن در C/C++ به‌دلیل نیاز به شیء جاوا اسکریپت مانند HTMLVideoElement یا VideoFrame امکان‌پذیر نیست. برای نمونه کد، مسئله ۴۶۲۴۷۷۳۷۹ و SpotTests.cpp را ببینید.

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

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