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

François Beaufort
François Beaufort

تعداد ویژگی‌های WebGPU ممکن است این بار کمی کم به‌نظر برسد، اما برخی پیشرفت‌های عمده در راه است! نسخه‌های آینده شامل ویژگی‌هایی مثل بهبود سرعت گردآوری سایه‌زن و تغییرات در مدل ناهم‌زمان پیاده‌سازی بااستفاده از WGPUFuture خواهد بود.

زیرگروه‌ها (ویژگی درحال توسعه)

ویژگی زیرگروه‌ها موازی‌سازی سطح SIMD را فعال می‌کند و به رشته‌های درون یک گروه اجازه می‌دهد با هم ارتباط برقرار کنند و عملیات ریاضی جمعی انجام دهند (برای مثال، محاسبه مجموع ۱۶ عدد). این کار شکل بسیار کارآمدی از هم‌رسانی داده بین رشته‌ها را فراهم می‌کند.

عملکرد زیرگروه توسط APIهای مدرن GPU پشتیبانی می‌شود، اما جزئیات نام‌گذاری و پیاده‌سازی متفاوت است. تیم Chrome موارد مشترک را شناسایی کرده است و اکنون درحال کار روی استانداردسازی این ویژگی است. اگر سؤالی دارید، پیشنهاد و نظر را بررسی کنید.

پیاده‌سازی حداقلی و غیراستانداردی از زیرگروه‌ها در پشت پرچم «ویژگی‌های آزمایشی پلاتفرم وب» در chrome://flags/#enable-experimental-web-platform-features وجود دارد تا توسعه‌دهندگان بتوانند آن را امتحان کنند و بازخوردشان را هم‌رسانی کنند، زیرا مزایای واقعی آن در زمینه WebGPU هنوز ثابت نشده است.

وقتی ویژگی "chromium-experimental-subgroups" در GPUAdapter دردسترس باشد، GPUDevice را با این ویژگی درخواست کنید تا از زیرگروه‌های آزمایشی در WGSL پشتیبانی کنید و محدودیت‌های minSubgroupSize و maxSubgroupSize آن را بررسی کنید.

همچنین باید این افزونه را به‌طور صریح در کد WGSL خود با enable chromium_experimental_subgroups فعال کنید. وقتی فعال شود، به موارد افزودنی زیر دسترسی پیدا می‌کنید:

  • ‫subgroup_invocation_id: مقدار داخلی برای شاخص رشته در زیرگروه.
  • ‫subgroup_size: مقدار داخلی برای دسترسی به اندازه زیرگروه.
  • subgroupBallot(value): مجموعه‌ای از فیلدهای بیت را برمی‌گرداند که در آن بیت مربوط به subgroup_invocation_id اگر value برای آن فراخوانی فعال درست باشد ۱ است و درغیراین‌صورت ۰ است.
  • ‫subgroupBroadcast(value, id): value را از فراخوانی با subgroup_invocation_id مطابقت id به همه فراخوانی‌های درون زیرگروه همه‌فرستی می‌کند. توجه: id باید ثابت زمان ترجمه باشد.

تکه‌کد زیر پایه‌ای برای دستکاری و کشف پتانسیل زیرگروه‌ها ارائه می‌دهد.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

پرداز زدن برش بافت سه‌بعدی

اکنون می‌توانید مستقیماً به برش(های) بافت‌های سه‌بعدی در گذرگاه‌های رندر کردن رندر کنید و با عضو جدید depthSlice در GPURenderPassColorAttachment، قابلیت‌های آن را فراتر از رندر کردن بافت‌های دوبعدی رایج گسترش دهید. این افزودنی به شما امکان می‌دهد، برای مثال، صحنه‌ها و جلوه‌های مبتنی بر پیکسل را با پرداز مستقیم در حجم‌های بافت سه‌بعدی ایجاد کنید. issue dawn:1020 را ببینید.

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

فهرست کامل تعهدات را بررسی کنید.

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