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

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

پشتیبانی از HDR با حالت ترسیم تن بوم

توسعه دهندگان وب گزینه های محدودی برای ارائه محتوای HDR دارند که عمدتاً بر عناصر <img> و <video> تکیه دارند. با این حال، عنصر <canvas> به SDR محدود می‌شود. ایجاد محتوای پویا HDR در یک بوم مستلزم کدگذاری محتویات آن به عنوان یک تصویر HDR قبل از نمایش آن است (برای مثال به این نسخه نمایشی مراجعه کنید).

پارامتر جدید GPUCanvasToneMappingMode در پیکربندی WebGPU canvas اکنون به WebGPU اجازه می‌دهد تا رنگ‌های روشن‌تر از سفید را ترسیم کند ( #FFFFFF ). این کار را از طریق حالت های زیر انجام می دهد:

  • "standard" : رفتار پیش فرض محتوا را به محدوده SDR صفحه محدود می کند. این حالت با بستن تمام مقادیر رنگ در فضای رنگی صفحه به بازه [0, 1] انجام می شود.

  • "extended" : محدوده کامل HDR صفحه را باز می کند. این حالت با "standard" در محدوده [0, 1] صفحه مطابقت دارد. بستن یا طرح ریزی به محدوده دینامیکی گسترده صفحه انجام می شود اما [0, 1] انجام نمی شود.

قطعه کد زیر به شما نشان می دهد که یک بوم را برای محدوده دینامیکی بالا پیکربندی کنید.

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");

context.configure({
  device,
  format: "rgba16float",
  toneMapping: { mode: "extended" },
});

با بررسی نمونه ذرات (HDR) و مثال WebGPU HDR ، HDR را با WebGPU کاوش کنید و ورودی chromestatus را ببینید.

لپ تاپ با صفحه نمایش HDR که تصویری پر جنب و جوش را نمایش می دهد.
نمونه ذرات (HDR) روی صفحه نمایش HDR نمایش داده می شود.

پشتیبانی از زیرگروه های گسترده

پس از اعلام آزمایش زیرگروه‌ها ، توابع داخلی زیرگروه اکنون برای استفاده در سایه‌زن‌های محاسباتی و سایه‌زن‌های قطعه در دسترس هستند. آنها دیگر فقط به محاسبه سایه بان ها محدود نمی شوند. شماره 354738715 را ببینید.

توجه داشته باشید که مقدار داخلی subgroup_size در حال حاضر در shader های قطعه باگ است. فعلا از آن اجتناب کنید.

علاوه بر این، توابع داخلی زیر گروه زیر اضافه شده است:

  • subgroupAdd(value) : جمع تمام value فراخوانی فعال s را در سرتاسر زیرگروه برمی‌گرداند.
  • subgroupExclusiveAdd(value) : جمع اسکن انحصاری تمام value فراخوان های فعال s را در سراسر زیرگروه برمی گرداند.
  • subgroupMul(value) : ضرب تمام فراخوان‌های فعال value s را در زیر گروه برمی‌گرداند.
  • subgroupExclusiveMul(value) : ضرب اسکن انحصاری تمام value فراخوان های فعال s را در سرتاسر زیرگروه برمی گرداند.

  • subgroupAnd(value) : AND باینری همه فراخوان‌های فعال value s را در زیر گروه برمی‌گرداند.
  • subgroupOr(value) : OR باینری همه فراخوان‌های فعال value s را در سراسر زیرگروه برمی‌گرداند.
  • subgroupXor(value) : XOR باینری همه فراخوان‌های فعال value s را در زیر گروه برمی‌گرداند.

  • subgroupMin(value) : حداقل مقدار همه فراخوان‌های فعال s value در زیر گروه برمی‌گرداند.
  • subgroupMax(value) : حداکثر مقدار همه فراخوان‌های فعال s value در زیر گروه برمی‌گرداند.

  • subgroupAll(value) : اگر value برای همه فراخوان‌های فعال در زیرگروه درست باشد، مقدار true را برمی‌گرداند.
  • subgroupAny(value) : اگر value برای هر فراخوانی فعال در زیرگروه درست باشد، مقدار true را برمی‌گرداند.

  • subgroupElect() : اگر این فراخوان کمترین subgroup_invocation_id در میان فراخوانی‌های فعال در زیرگروه داشته باشد، true را برمی‌گرداند.
  • subgroupBroadcastFirst(value) : value از فراخوانی فعال با کمترین subgroup_invocation_id در زیرگروه به همه فراخوان‌های فعال دیگر پخش می‌کند.

  • subgroupShuffle(value, id) : value از فراخوانی فعالی که subgroup_invocation_id آن با id مطابقت دارد، برمی‌گرداند.
  • subgroupShuffleXor(value, mask) : value از فراخوانی فعالی که subgroup_invocation_id با subgroup_invocation_id ^ mask مطابقت دارد، برمی‌گرداند. mask باید به صورت پویا یکنواخت باشد.
  • subgroupShuffleUp(value, delta) : value از فراخوانی فعالی که subgroup_invocation_id با subgroup_invocation_id - delta مطابقت دارد، برمی‌گرداند.
  • subgroupShuffleDown(value, delta) : value از فراخوانی فعالی که subgroup_invocation_id آن با subgroup_invocation_id + delta مطابقت دارد، برمی‌گرداند.

  • quadBroadcast(value, id) : value از فراخوانی quad با شناسه برابر با id پخش می کند. id باید یک بیان ثابت باشد.
  • quadSwapX(value) : value بین فراخوانی ها در چهار در جهت X جابجا می کند.
  • quadSwapY(value) : value بین فراخوانی ها در چهار در جهت Y مبادله می کند.
  • quadSwapDiagonal(value) : value بین فراخوانی ها در چهار به صورت مورب تعویض می کند.

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

ساختار wgpu::PrimitiveState اکنون مستقیماً شامل تنظیمات کنترل کلیپ عمق می‌شود و نیاز به ساختار جداگانه wgpu::PrimitiveDepthClipControl از بین می‌برد. برای کسب اطلاعات بیشتر، قطعه کد زیر و webgpu-headers PR را ببینید.

// Before
wgpu::PrimitiveState primitive = {};
wgpu::PrimitiveDepthClipControl depthClipControl;
depthClipControl.unclippedDepth = true;
primitive.nextInChain = &depthClipControl;
// Now
wgpu::PrimitiveState primitive = {};
primitive.unclippedDepth = true;

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

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

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

کروم 130

کروم 129

کروم 128

کروم 127

کروم 126

کروم 125

کروم 124

کروم 123

کروم 122

کروم 121

کروم 120

کروم 119

کروم 118

کروم 117

کروم 116

کروم 115

کروم 114

کروم 113