ویژگی‌های جدید WebGPU (کروم ۱۴۵)

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

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

افزونه‌ی زیرگروه_یکنواختی WGSL

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

این افزونه زبان می‌تواند با استفاده از navigator.gpu.wgslLanguageFeatures شناسایی شود. به مثال زیر و هدف ارسال (shipping) توجه کنید.

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.

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

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

این ویژگی آزمایشی است و بازخورد شما برای تعیین اینکه آیا برای استانداردسازی پیشنهاد خواهد شد یا خیر، مهم است. برای امتحان کردن آن، کروم را با استفاده از سوئیچ --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 حذف شده است. قابلیت‌های آن، به استثنای Resolve، اکنون تا حد زیادی توسط wgpu::FeatureName::TextureFormatsTier1 پوشش داده شده است. به شماره ۴۶۵۳۴۷۹۴۲ مراجعه کنید.

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

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

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

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

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

کروم ۱۴۵

کروم ۱۴۴

کروم ۱۴۳

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳