آزمایش با زیر گروه ها
ویژگی زیرگروهها موازیسازی سطح SIMD را فعال میکند و به رشتههای درون یک گروه اجازه میدهد تا با هم ارتباط برقرار کنند و عملیات ریاضی جمعی را انجام دهند (مثلاً محاسبه مجموع 16 عدد). این یک شکل بسیار کارآمد از اشتراک گذاری داده های بین رشته ای را فراهم می کند.
حداقل پیادهسازی پیشنهاد زیرگروهها برای آزمایش محلی پشت پرچم «پشتیبانی از WebGPU ناامن» در chrome://flags/#enable-unsafe-webgpu
موجود است.
همچنین می توانید با ثبت نام در آزمایش اولیه، زیرگروه های سایت خود را با کاربران واقعی امتحان کنید. برای دستورالعملهایی در مورد نحوه آمادهسازی سایت خود برای استفاده از آزمایشهای اولیه ، شروع به کار با آزمایشهای مبدا را بخوانید. نسخه آزمایشی اصلی از Chrome 128 تا 131 (پایان در 19 فوریه 2025) اجرا خواهد شد. به قصد آزمایش مراجعه کنید.
وقتی ویژگی "subgroups"
در GPUAdapter
در دسترس است، از یک GPUDevice
با این ویژگی درخواست کنید تا پشتیبانی زیرگروهها را در WGSL دریافت کنید و محدودیتهای minSubgroupSize
و maxSubgroupSize
آن را بررسی کنید.
همچنین باید این افزونه را در کد WGSL خود با enable subgroups;
. وقتی فعال باشد، به موارد اضافه شده زیر دسترسی خواهید داشت:
-
subgroup_invocation_id
: یک مقدار داخلی برای نمایه رشته در زیر گروه. -
subgroup_size
: یک مقدار داخلی برای دسترسی به اندازه زیرگروه. -
subgroupBallot(value)
: مجموعهای از فیلدهای بیت را برمیگرداند که بیت مربوط بهsubgroup_invocation_id
1 است اگرvalue
برای آن فراخوانی فعال درست باشد و در غیر این صورت 0 است. -
subgroupBroadcast(value, id)
:value
از فراخوانی باid
تطبیقsubgroup_invocation_id
به همه فراخوانیهای داخل زیرگروه پخش میکند. توجه:id
باید یک ثابت زمان کامپایل باشد.
توابع داخلی بیشتری مانند subgroupAdd
، subgroupAll
، subgroupElect
، subgroupShuffle
در آینده اضافه خواهند شد. شماره 354738715 را ببینید.
برای اجازه دادن به f16 در عملیات زیرگروهها، یک GPUDevice
با ویژگیهای "subgroups"
، "subgroups-f16"
و "shader-f16"
درخواست کنید، سپس آن را در کد WGSL خود با enable f16, subgroups, subgroups_f16;
.
قطعه کد زیر پایه ای برای سرهم بندی کردن و کشف پتانسیل زیرگروه ها فراهم می کند.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
بایاس عمق تنظیم را برای خطوط و نقاط منسوخ کنید
هنگامی که توپولوژی خط لوله رندر یک خط یا نوع نقطه باشد ، تغییر مشخصات WebGPU باعث میشود که depthBias
، depthBiasSlopeScale
و depthBiasClamp
را روی یک مقدار غیر صفر تنظیم کنید. برای اینکه به توسعهدهندگان زمان کافی برای بهروزرسانی کدشان داده شود، هشداری در DevTools Console درباره این اعتبارسنجی آینده نشان داده میشود و در عین حال مقادیر را به 0 در این شرایط مجبور میکند. شماره 352567424 را ببینید.
در صورت جلوگیری از Default، هشدار DevTools خطای ضبط نشده را مخفی کنید
در DevTools Console، اگر شنونده رویداد برای uncapturederror
ثبت شده باشد و متد Event preventDefault()
در پاسخ تماس شنونده رویداد فراخوانی شده باشد، دیگر هشدارهای مربوط به رویدادهای uncapturederror
نمایش داده نمی شود. این رفتار با مدیریت رویداد در جاوا اسکریپت مطابقت دارد. مثال زیر و شماره 40263619 را ببینید.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
WGSL ابتدا نمونهگیری را درونیابی میکند و هر کدام را
ویژگی interpolate
WGSL به شما امکان می دهد تا درونیابی داده های IO تعریف شده توسط کاربر را مدیریت کنید. اکنون، first
پارامترهای نمونه برداری جدید را درون یابی کنید (پیش فرض) و either
به شما کنترل بیشتری می دهد: first
از مقدار راس اول ابتدایی استفاده می کند، در حالی که هر either
راس اول یا آخرین راس را مجاز می کند. به شماره 340278447 مراجعه کنید.
به روز رسانی سحر
اجرای Dawn's WGPUFuture برای مدیریت عملیات ناهمزمان اکنون کامل شده است. مفاهیم کلیدی عبارتند از wgpuInstanceProcessEvents برای پردازش رویدادهای فرصت طلب و WGPUCallbackMode برای تعریف مکان های برگشت به تماس. WGPUFuture نشاندهنده رویدادهای یکباره با طول عمر بینهایت است، و wgpuInstanceWaitAny منتظر تکمیل هر آینده یا مهلت زمانی است. شماره 42240932 را ببینید.
مقدار CompositeAlphaMode::Auto
اکنون توسط Surface::GetCapabilities()
گزارش نشده است. هنوز معتبر است و معادل Surface::GetCapabilities().alphaMode[0]
. به شماره 292 مراجعه کنید.
باطن OpenGL اکنون از Surface
با blit y-flip برای هر فراخوانی Present()
پشتیبانی می کند. به شماره 344814083 مراجعه کنید.
متد Adapter::GetProperties()
به نفع استفاده از Adapter::GetInfo()
منسوخ شده است.
Jaswant، یک مشارکتکننده خارجی، همه فایلهای CMake را بازنویسی کرده است و بهروزرسانی آنها را آسانتر کرده و امکان پیشسازی را فراهم میکند. راهنمای شروع سریع برای استفاده از Dawn در پروژههای CMake را بررسی کنید.
این تنها برخی از نکات کلیدی را پوشش می دهد. فهرست جامع تعهدات را بررسی کنید.
چه چیزی در WebGPU جدید است
فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.
کروم 128
- آزمایش با زیر گروه ها
- بایاس عمق تنظیم را برای خطوط و نقاط منسوخ کنید
- در صورت جلوگیری از Default، هشدار DevTools خطای ضبط نشده را مخفی کنید
- WGSL ابتدا نمونهگیری را درونیابی میکند و هر کدام را
- به روز رسانی سحر
کروم 127
- پشتیبانی آزمایشی از OpenGL ES در اندروید
- ویژگی اطلاعات GPUAdapter
- بهبودهای WebAssembly interop
- خطاهای رمزگذار فرمان بهبود یافته است
- به روز رسانی سحر
کروم 126
- حد maxTextureArrayLayers را افزایش دهید
- بهینه سازی بارگذاری بافر برای باطن Vulkan
- بهبود زمان کامپایل شیدر
- بافرهای فرمان ارسالی باید منحصر به فرد باشند
- به روز رسانی سحر
کروم 125
کروم 124
- بافت های ذخیره سازی فقط خواندنی و خواندنی و نوشتنی
- پشتیبانی کارگران خدماتی و کارگران مشترک
- ویژگی های اطلاعات آداپتور جدید
- رفع اشکال
- به روز رسانی سحر
کروم 123
- توابع داخلی DP4a در WGSL پشتیبانی می کند
- پارامترهای اشاره گر نامحدود در WGSL
- قند نحوی برای عدم ارجاع کامپوزیت ها در WGSL
- حالت فقط خواندنی را برای جنبه های استنسیل و عمق جدا کنید
- به روز رسانی سحر
کروم 122
- گسترش دسترسی با حالت سازگاری (ویژگی در حال توسعه)
- حد maxVertexAttributes را افزایش دهید
- به روز رسانی سحر
کروم 121
- پشتیبانی از WebGPU در اندروید
- برای کامپایل شیدر در ویندوز به جای FXC از DXC استفاده کنید
- پرس و جوهای مهر زمانی در گذرنامه های محاسبه و ارائه
- نقاط ورودی پیش فرض به ماژول های سایه زن
- پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
- اطلاعات انبوه حافظه
- به روز رسانی سحر
کروم 120
- پشتیبانی از مقادیر ممیز شناور 16 بیتی در WGSL
- محدودیت ها را فشار دهید
- تغییرات در حالت عمقی-استنسیل
- به روز رسانی اطلاعات آداپتور
- کوانتیزاسیون پرس و جوهای مهر زمانی
- ویژگی های تمیز کردن فنری
کروم 119
کروم 118
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture()
- پشتیبانی آزمایشی از بافت ذخیرهسازی خواندنی-نوشتنی و فقط خواندنی
- به روز رسانی سحر
کروم 117
- بافر راس را تنظیم نکنید
- گروه bind را تنظیم نکنید
- هنگام گم شدن دستگاه، خطاهای ایجاد خط لوله ناهمگام را خاموش کنید
- به روز رسانی های ایجاد ماژول سایه زن SPIR-V
- بهبود تجربه توسعه دهندگان
- ذخیره سازی خطوط لوله با طرح تولید خودکار
- به روز رسانی سحر
کروم 116
- ادغام WebCodecs
- دستگاه گمشده توسط GPUAdapter
requestDevice()
برگردانده شد - در صورت فراخوانی
importExternalTexture()
پخش ویدیو را روان نگه دارید - مطابقت با مشخصات
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 115
- پشتیبانی از پسوندهای زبان WGSL
- پشتیبانی آزمایشی از Direct3D 11
- GPU گسسته را به طور پیشفرض با برق AC دریافت کنید
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 114
- بهینه سازی جاوا اسکریپت
- getCurrentTexture() روی بوم پیکربندی نشده خطای InvalidState را ایجاد می کند
- به روز رسانی WGSL
- به روز رسانی سحر