پشتیبانی از توابع داخلی DP4a در WGSL
DP4a (ضرب نقطهای ۴ عنصر و انباشت) به مجموعهای از دستورالعملهای GPU اشاره دارد که معمولاً در استنتاج یادگیری عمیق برای کمسازی استفاده میشود. این واحد بهطور کارآمد حاصل ضرب نقطهای عدد صحیح ۸ بیتی را انجام میدهد تا محاسبات چنین مدلهای کمّیسازیشده int8 را تسریع کند. این نوع میتواند (تا ۷۵٪) از حافظه و پهنای باند شبکه صرفهجویی کند و عملکرد هر مدل یادگیری ماشین را در استنباط در مقایسه با نسخه f32 آن بهبود دهد. در نتیجه، اکنون بهطور گسترده در بسیاری از چارچوبهای هوش مصنوعی محبوب استفاده میشود.
وقتی "packed_4x8_integer_dot_product" WGSL افزونه زبان در navigator.gpu.wgslLanguageFeatures وجود داشته باشد، اکنون میتوانید از اسکالرهای عدد صحیح ۳۲ بیتی که بردارهای ۴ مؤلفهای از اعداد صحیح ۸ بیتی را بستهبندی میکنند بهعنوان ورودی دستورالعملهای ضرب نقطهای در کد سایهزن WGSL خود با توابع داخلی dot4U8Packed و dot4I8Packed استفاده کنید. همچنین میتوانید از دستورالعملهای بستهبندی و باز کردن بستهبندی با بردارهای ۴ مؤلفهای بستهبندیشده از اعداد صحیح ۸ بیتی با توابع داخلی pack4xI8، pack4xU8، pack4xI8Clamp، pack4xU8Clamp، unpack4xI8، و unpack4xU8 WGSL استفاده کنید.
توصیه میشود از requires-directive برای نشان دادن احتمال غیرقابلحمل بودن با requires packed_4x8_integer_dot_product; در بالای کد سایهزن WGSL استفاده کنید. مثال زیر و رنگ مشکل:۱۴۹۷ را ببینید.
if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
throw new Error(`DP4a built-in functions are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires packed_4x8_integer_dot_product;
fn main() {
const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
}`,
});
از تیم «گرافیک وب» Intel در شانگهای برای پیشبرد این مشخصات و پیادهسازی تا تکمیل آن سپاسگزاریم!
پارامترهای اشارهگر نامحدود در WGSL
"unrestricted_pointer_parameters" WGSL افزونه زبان محدودیتهای مربوط به اشارهگرهایی را که میتوانند به توابع WGSL منتقل شوند کاهش میدهد:
اشارهگرهای پارامتر
storage،uniform، وworkgroupفضاهای نشانی را به توابع اعلامشده کاربر هدایت میکنند.گذراندن اشارهگرها به اعضای ساختار و عناصر آرایه به توابع تعریفشده توسط کاربر.
برای کسب اطلاعات بیشتر درباره آن، اشارهگرها بهعنوان پارامترهای تابع | تور WGSL را بررسی کنید.
این ویژگی را میتوان بااستفاده از navigator.gpu.wgslLanguageFeatures تشخیص داد. توصیه میشود همیشه از دستور requires برای نشان دادن احتمال غیرقابل انتقال بودن با requires unrestricted_pointer_parameters; در بالای کد سایهزن WGSL استفاده کنید. مثال زیر، تغییرات مشخصات WGSL، و مشکل رنگ:۲۰۵۳ را ببینید.
if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
throw new Error(`Unrestricted pointer parameters are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires unrestricted_pointer_parameters;
@group(0) @binding(0) var<storage, read_write> S : i32;
fn func(pointer : ptr<storage, i32, read_write>) {
*pointer = 42;
}
@compute @workgroup_size(1)
fn main() {
func(&S);
}`
});
نحو شیرین برای ارجاعزدایی ترکیبات در WGSL
وقتی "pointer_composite_access" WGSL افزونه زبان در navigator.gpu.wgslLanguageFeatures وجود داشته باشد، کد سایهزن WGSL شما اکنون از دسترسی به عناصر انواع داده پیچیده بااستفاده از همان دستورگان نقطه (.) پشتیبانی میکند، چه مستقیماً با دادهها کار کنید و چه با اشارهگر به آنها. روش کار اینطور است:
اگر
fooاشارهگر است:foo.barروش راحتتری برای نوشتن(*foo).barاست. برای تبدیل اشارهگر به «مرجعی» که بتواند مرجعزدایی شود، معمولاً به علامت ستاره (*) نیاز است، اما اکنون اشارهگرها و مرجعها بسیار شبیهتر و تقریباً قابلتبدیل به یکدیگر هستند.اگر
fooاشارهگر نباشد: عملگر نقطه (.) دقیقاً همانطور که برای دسترسی مستقیم به اعضا استفاده میکنید عمل میکند.
بههمین ترتیب، اگر pa اشارهگری باشد که نشانی شروع یک آرایه را ذخیره میکند، استفاده از pa[i] به شما امکان میدهد مستقیماً به مکان حافظهای که عنصر 'i آرایه در آن ذخیره شده است دسترسی داشته باشید.
توصیه میشود از requires-directive برای نشان دادن احتمال غیرقابلحمل بودن با requires pointer_composite_access; در بالای کد سایهزن WGSL استفاده کنید. مثال زیر و رنگ مشکل:۲۱۱۳ را ببینید.
if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
throw new Error(`Pointer composite access is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires pointer_composite_access;
fn main() {
var a = vec3f();
let p : ptr<function, vec3f> = &a;
let r1 = (*p).x; // always valid.
let r2 = p.x; // requires pointer composite access.
}`
});
وضعیت فقط خواندنی جداگانه برای جنبههای شابلون و عمق
قبلاً، پیوستهای عمق-استنسیل فقط خواندنی در گذرگاههای رندر به هر دو جنبه (عمق و استنسیل) فقط خواندنی نیاز داشتند. این محدودیت برداشته شده است. اکنون میتوانید از جنبه عمق بهصورت فقط خواندنی استفاده کنید، مثلاً برای ردیابی سایه تماس، درحالیکه بافر شابلون برای شناسایی پیکسلها برای پردازش بیشتر نوشته میشود. مشکل سپیده دم:۲۱۴۶ را ببینید.
بهروزرسانیهای سپیدهدم
وقتی خطا رخ میدهد، تابع برگشتی خطای ثبتنشده که با wgpuDeviceSetUncapturedErrorCallback() تنظیم شده است اکنون بلافاصله فراخوانی میشود. این چیزی است که توسعهدهندگان بهطور مداوم برای اشکالزدایی انتظار دارند و میخواهند. تغییر سپیده دم:۱۷۳۶۲۰ را ببینید.
روش wgpuSurfaceGetPreferredFormat() از webgpu.h API پیادهسازی شده است. طلوع مشکل:۱۳۶۲ را ببینید.
این فقط برخیاز نکات برجسته کلیدی را پوشش میدهد. فهرست کامل تعهدات را بررسی کنید.
ویژگیهای جدید WebGPU
فهرستی از همه مواردی که در مجموعه ویژگیهای جدید WebGPU پوشش داده شده است.
۱۵۵-۱۵۶ Chrome
- افزونه WGSL fragment_depth
- فشردهسازی بافت ناهمتراز
- فضاهای رنگی srgb-linear و display-p3-linear
- قالب رأس snorm10-10-10-2 اضافی
- پشتیبانی f16 در Linux برای NVIDIA
- بهروزرسانیهای سپیدهدم
۱۵۳-۱۵۴ Chrome
- افزونه WGSL buffer_view
- افزونه WGSL swizzle_assignment
- بهروزرسانیهای افزونه WGSL
- بهروزرسانیهای سپیدهدم
Chrome 151-152
۱۴۹-۱۵۰ Chrome
۱۴۷-۱۴۸ Chrome
۱۴۶ Chrome
- پشتیبانی از حالت سازگاری WebGPU در OpenGL ES 3.1
- پیوستهای گذرا
- افزونه WGSL texture_and_sampler_let
- بهروزرسانیهای سپیدهدم
Chrome 145
۱۴۴ Chrome
- افزونه WGSL subgroup_id
- افزونه WGSL uniform_buffer_standard_layout
- WebGPU در Linux
- writeBuffer و writeTexture سریعتر
- بهروزرسانیهای سپیدهدم
۱۴۳ Chrome
- ترکیب کردن عنصر بافت
- برداشتن استفاده از بافت ذخیرهسازی فقطخواندنی bgra8unorm
- بهروزرسانیهای سپیدهدم
۱۴۲ Chrome
Chrome 141
- «رنگآمیزی فروسرخ» تکمیل شد
- تجزیهوتحلیل محدوده عدد صحیح در کامپایلر WGSL
- بهروزرسانی SPIR-V 1.4 برای زیرینه Vulkan
- بهروزرسانیهای سپیدهدم
۱۴۰ Chrome
- درخواستهای دستگاه آداپتور را مصرف میکند
- کوتهنویسی برای استفاده از بافت در جایی که نمای بافت استفاده میشود
- WGSL textureSampleLevel از بافتهای یکبعدی پشتیبانی میکند
- منسوخ کردن استفاده از بافت فضای ذخیرهسازی فقط خواندنی bgra8unorm
- برداشتن مشخصه GPUAdapter isFallbackAdapter
- بهروزرسانیهای سپیدهدم
Chrome 139
- پشتیبانی از بافت سهبعدی برای قالبهای فشرده BC و ASTC
- ویژگی جدید «ویژگیهای اصلی و محدودیتها»
- آزمایش اصلی برای حالت سازگاری WebGPU
- بهروزرسانیهای سپیدهدم
Chrome 138
- کوتهنویسی برای استفاده از بافر بهعنوان منبع اتصال
- تغییرات الزامات اندازه برای میانههای نگاشتشده در زمان ایجاد
- گزارش معماری برای واحدهای پردازش گرافیکی اخیر
- منسوخ کردن مشخصه GPUAdapter isFallbackAdapter
- بهروزرسانیهای سپیدهدم
Chrome 137
- استفاده از نمای بافت برای پیوند externalTexture
- کپی کردن میانگیرها بدون مشخص کردن اندازه و جبران
- WGSL workgroupUniformLoad بااستفاده از اشارهگر به اتمی
- مشخصه GPUAdapterInfo powerPreference
- برداشتن مشخصه compatibilityMode در GPURequestAdapterOptions
- بهروزرسانیهای سپیدهدم
Chrome 136
- مشخصه GPUAdapterInfo isFallbackAdapter
- بهبود زمان گردآوری سایهزن در D3D12
- ذخیره و کپی کردن تصاویر بوم
- محدودیتهای حالت سازگاری بهینهگر
- بهروزرسانیهای سپیدهدم
۱۳۵ Chrome
- اجازه دادن به ایجاد چیدمان خط لوله با چیدمان گروه پیوند تهی
- اجازه دادن به درگاههای نمایش برای گسترش فراتر از محدودههای هدفهای پردازشی
- دسترسی آسانتر به حالت سازگاری آزمایشی در Android
- برداشتن محدودیت maxInterStageShaderComponents
- بهروزرسانیهای سپیدهدم
۱۳۴ Chrome
- بهبود دادن حجم کار یادگیری ماشین با زیرگروهها
- برداشتن پشتیبانی از انواع بافت فیلترپذیر شناور بهعنوان ترکیبشدنی
- بهروزرسانیهای سپیدهدم
Chrome 133
- قالبهای رأس تکمؤلفه و unorm8x4-bgra اضافی
- اجازه دادن به درخواست محدودیتهای ناشناخته با مقدار تعریفنشده
- تغییرات قوانین تراز WGSL
- بهبود عملکرد WGSL با کنار گذاشتن
- استفاده از displaySize در VideoFrame برای بافتهای خارجی
- مدیریت تصاویر با جهتگیریهای غیرپیشفرض بااستفاده از copyExternalImageToTexture
- بهبود تجربه توسعهدهنده
- فعال کردن حالت سازگاری با featureLevel
- پاکسازی ویژگیهای زیرگروه آزمایشی
- منسوخ کردن محدودیت maxInterStageShaderComponents
- بهروزرسانیهای سپیدهدم
۱۳۲ Chrome
- استفاده از نمای بافت
- ترکیب بافتهای شناور ۳۲ بیتی
- مشخصه GPUDevice adapterInfo
- پیکربندی بافت بوم با قالب نامعتبر باعث خطای جاوا اسکریپت میشود
- محدودیتهای فیلتر کردن نمونهبرداری روی بافتها
- آزمایش زیرگروههای گسترده
- بهبود تجربه توسعهدهنده
- پشتیبانی آزمایشی از قالبهای بافت نرمالسازیشده ۱۶ بیتی
- بهروزرسانیهای سپیدهدم
۱۳۱ Chrome
- فاصلههای کلیپ در WGSL
- GPUCanvasContext getConfiguration()
- نقطه و خطهای اولیه نباید انحراف عمق داشته باشند
- عملکردهای داخلی اسکن فراگیر برای زیرگروهها
- پشتیبانی آزمایشی برای چندقرعه غیرمستقیم
- گزینه کامپایل واحد سایهزن ریاضیات دقیق
- برداشتن GPUAdapter requestAdapterInfo()
- بهروزرسانیهای سپیدهدم
Chrome 130
- ترکیب منبع دوگانه
- بهبود زمان گردآوری سایهزن در Metal
- منسوخ شدن GPUAdapter requestAdapterInfo()
- بهروزرسانیهای سپیدهدم
Chrome 129
Chrome 128
- آزمایش با زیرگروهها
- منسوخ کردن تنظیم انحراف عمق برای خطوط و نقاط
- پنهان کردن هشدار DevTools خطای ثبتنشده درصورت preventDefault
- ابتدا نمونهبرداری درونیابی WGSL و سپس
- بهروزرسانیهای سپیدهدم
Chrome 127
- پشتیبانی آزمایشی از OpenGL ES در Android
- مشخصه اطلاعات GPUAdapter
- بهبودهای قابلیت تعامل WebAssembly
- خطاهای بهبودیافته کدبند فرمان
- بهروزرسانیهای سپیدهدم
Chrome 126
- افزایش حد maxTextureArrayLayers
- بهینهسازی بارگذاری بافر برای زیرینه Vulkan
- بهبود زمان گردآوری سایهزن
- بافرهای فرمان ارسالی باید منحصربهفرد باشند
- بهروزرسانیهای سپیدهدم
Chrome 125
Chrome 124
- بافتهای فضای ذخیرهسازی فقط خواندنی و خواندنی-نوشتنی
- پشتیبانی از عاملان خدماتی و عاملان همرسانیشده
- مشخصههای اطلاعات آداپتور جدید
- رفع اشکالها
- بهروزرسانیهای سپیدهدم
Chrome 123
- پشتیبانی از توابع داخلی DP4a در WGSL
- پارامترهای اشارهگر نامحدود در WGSL
- شکر نحوی برای ارجاعزدایی ترکیبات در WGSL
- وضعیت فقط خواندنی جداگانه برای جنبههای ژرفانمایی و عمق
- بهروزرسانیهای سپیدهدم
Chrome 122
- گسترش دسترسی با حالت سازگاری (ویژگی درحال توسعه)
- افزایش حد maxVertexAttributes
- بهروزرسانیهای سپیدهدم
Chrome 121
- پشتیبانی از WebGPU در Android
- استفاده از DXC بهجای FXC برای ترجمه سایهزن در Windows
- پرسشهای مُهر زمان در گذرگاههای محاسباتی و رندر
- نقاط ورودی پیشفرض به واحدهای سایهزن
- پشتیبانی از display-p3 بهعنوان فضای رنگ GPUExternalTexture
- اطلاعات پشتههای حافظه
- بهروزرسانیهای سپیدهدم
Chrome 120
- پشتیبانی از مقادیر ممیز شناور ۱۶ بیتی در WGSL
- محدودیتها را کنار بزنید
- تغییرات در وضعیت عمق-استنسیل
- بهروزرسانیهای اطلاعات آداپتور
- کمّیسازی پُرسمانهای مُهر زمان
- ویژگیهای نظافت بهاره
Chrome 119
- بافتهای شناور ۳۲ بیتی فیلترپذیر
- قالب رأس unorm10-10-10-2
- قالب بافت rgb10a2uint
- بهروزرسانیهای سپیدهدم
Chrome 118
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture() - پشتیبانی آزمایشی از بافت فضای ذخیرهسازی خواندن-نوشتن و فقط خواندنی
- بهروزرسانیهای سپیدهدم
Chrome 117
- لغو تنظیم بافر رأس
- لغو تنظیم گروه پیوند
- بیصدا کردن خطاهای ایجاد خط لوله ناهمزمان هنگام گم شدن دستگاه
- بهروزرسانیهای ایجاد واحد سایهزن SPIR-V
- بهبود تجربه توسعهدهنده
- ذخیره کردن خطوط لوله با چیدمان تولیدشده خودکار
- بهروزرسانیهای سپیدهدم
Chrome 116
- یکپارچهسازی WebCodecs
- دستگاه ازدسترفته توسط GPUAdapter
requestDevice()برگردانده شد - اگر با
importExternalTexture()تماس گرفته شد، بازپخش ویدیو روان باشد - مطابقت با مشخصات
- بهبود تجربه توسعهدهنده
- بهروزرسانیهای سپیدهدم
Chrome 115
- افزونههای زبان WGSL پشتیبانیشده
- پشتیبانی آزمایشی از Direct3D 11
- در حالت اتصال به برق متناوب، بهطور پیشفرض از واحد پردازش گرافیکی مجزا استفاده کنید
- بهبود تجربه توسعهدهنده
- بهروزرسانیهای سپیدهدم
Chrome 114
- بهینهسازی جاوا اسکریپت
- getCurrentTexture() در بوم پیکربندینشده InvalidStateError را پرتاب میکند
- بهروزرسانیهای WGSL
- بهروزرسانیهای سپیدهدم