موارد جدید در WebGPU (Chrome 125)

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

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

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

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

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

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

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

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

  • subgroup_invocation_id : یک مقدار داخلی برای نمایه رشته در زیر گروه.
  • subgroup_size : یک مقدار داخلی برای دسترسی به اندازه زیرگروه.
  • subgroupBallot(value): مجموعه‌ای از فیلدهای بیت را برمی‌گرداند که در آن بیت مربوط به subgroup_invocation_id 1 است، اگر value برای آن فراخوان فعال درست باشد و در غیر این صورت 0 است.
  • subgroupBroadcast(value, id) : value از فراخوانی با id تطبیق subgroup_invocation_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 ، مستقیماً به برش(های) از بافت‌های سه‌بعدی در پاس‌های رندر رندر دهید، و قابلیت‌های آن را فراتر از رندر بافت دوبعدی رایج گسترش دهید. این افزونه به شما اجازه می‌دهد برای مثال صحنه‌ها و افکت‌های مبتنی بر وکسل را با رندر کردن مستقیم در حجم‌های بافت سه‌بعدی ایجاد کنید. شماره سپیده دم: 1020 را ببینید.

به روز رسانی سحر

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

چه چیزی در WebGPU جدید است

فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.

کروم 125

کروم 124

کروم 123

کروم 122

کروم 121

کروم 120

کروم 119

کروم 118

کروم 117

کروم 116

کروم 115

کروم 114

کروم 113