افزونه fragment_depth در WGSL
در گذرهای رندرینگ با هندسه فشرده، بهینهسازیهای early-Z بهترین دوست توسعهدهندگان هستند. این بافرها با اجازه دادن به GPU برای دور انداختن پیکسلهای پنهان قبلاز اجرای سایهزنهای قطعهای پرهزینه، عملکرد را بهطور چشمگیری تقویت میکنند. اگر عمق شطرنجیشده در آزمایش عمق رد شود، واحد پردازش گرافیکی بهطور کامل از سایهزن قطعه صرفنظر میکند، مشروط بر اینکه سایهزن عوارض جانبی دیگری نداشته باشد.
اگر میخواهید درباره نحوه مدیریت این موضوع توسط سختافزار بیشتر بدانید، MJP مقاله عالیای درباره چه زمانی Early-Z باید غیرفعال شود؟ دارد.
اگرچه دستکاری عمق سفارشی مفید است، انجام آن در سایهزن قطعه شما با هزینه پنهانی همراه است. نوشتن در @builtin(frag_depth) داخل سایهزن قطعه معمولاً درایورها را مجبور میکند این بهینهسازیهای Z اولیه را برای کل فراخوانی ترسیم غیرفعال کنند. این اتفاق به این دلیل میافتد که اکتشافات درایور نمیتواند تضمین کند که عمق خروجی محاسبهشده سایهزن با عمق درونیابیشده توسط شطرنجیساز مطابقت دارد.
برای رفع این جریمه عملکرد، افزونه WGSL fragment_depth به شما امکان میدهد نام حالت عمق less یا greater را در @builtin(frag_depth) مشخص کنید تا بهطور صریح بیان کنید که عمق نوشتهشده چگونه با عمق درونیابیشده مقایسه میشود، و به GPU امکان میدهد تا بهینهسازیهای early-Z را بهطور ایمن اعمال کند.
این افزونه زبان را میتوان بااستفاده از navigator.gpu.wgslLanguageFeatures در جاوا اسکریپت شناسایی کرد. توصیه میشود از دستورالعمل requires-directive برای نشان دادن احتمال عدمقابلیت انتقال با requires fragment_depth; در بالای کد سایهزن WGSL استفاده کنید. مثال زیر و قصد ارسال را ببینید.
if (!navigator.gpu.wgslLanguageFeatures.has("fragment_depth")) {
throw new Error(`WGSL fragment depth is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires fragment_depth;
@fragment
fn main() -> @builtin(frag_depth, less) f32 {
// Explicitly states that the output fragment depth is less than early-Z depth,
// allowing the GPU to safely preserve early-Z optimizations.
return 0.0f;
}`,
});
فشردهسازی بافت تراز نشده است
ویژگی واحد پردازش گرافیکی «texture-compression-unaligned» امکان ایجاد بافتهای فشرده با ابعادی را فراهم میکند که مضربهای صحیح اندازه بلوک نیستند (مانند ۴×۴ برای قالبهای BC، ETC2، و ASTC). قبلاً WebGPU بهطور جدی نیاز داشت که اندازههای بافت با این مرزهای بلوک همتراز باشند. این ویژگی با حذف نیاز به لایهگذاری یا مقیاسبندی بافتها برای مطابقت با ترازهای بلوک، وفاداری فشردهسازی اصلی را بدون ایجاد اعوجاج مقیاسبندی حفظ میکند. قصد ارسال را ببینید.
تکهکد زیر بررسی میکند که آیا آداپتور از فشردهسازی بافت غیرهمتراز پشتیبانی میکند یا نه و درصورت دردسترس بودن، دستگاهی را با آن درخواست میکند.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("texture-compression-unaligned")) {
throw new Error("Texture compression unaligned support is not available");
}
// Explicitly request texture compression unaligned support.
const device = await adapter.requestDevice({
requiredFeatures: ["texture-compression-unaligned"],
});
از مشارکتکننده خارجی Ignacio Castaño از spark.js برای پیشبرد این ویژگی، مشخصات، و کار CTS بسیار سپاسگزاریم!
فضاهای رنگی srgb-linear و display-p3-linear
با افزودن فضاهای رنگی ازپیش تعریفشده «srgb-linear» و «display-p3-linear»، بافت بوم WebGPU اکنون میتواند مستقیماً در فضاهای رنگی خطی با دامنه گسترده برای پشتیبانی از نمایشگرهای با گاموت گسترده رندر شود. این فضاهای رنگی رابطه خطی بین مقادیر پیکسل و درخشندگی فیزیکی را حفظ میکنند. این امر آنها را برای پردازش نور فیزیکی در بازیها و همچنین کارهای پردازش فضایی مانند ضدپلگی، درونیابی، و کاهش نرخ نمونهبرداری ایدهآل میکند. قصد ارسال و نمونه Particles (HDR) PR #574 را ببینید.
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",
colorSpace: "display-p3-linear",
});
قالب رأس snorm10-10-10-2 اضافی
قالب رأس «snorm10-10-10-2» یک قالب ۳۲ بیتی فشرده است که چهار مقدار نرمالشده علامتدار را نگه میدارد: سه مؤلفه ۱۰ بیتی (r, g, b) و یک مؤلفه ۲ بیتی (a). با این قالب، میتوانید بهطور کارآمد ویژگیهایی مانند بردارهای نرمال سهبعدی را با یک اسکالر ۲ بیتی اضافی یا پرچم تراز ذخیره کنید و درعینحال پهنای باند حافظه را حفظ کنید. spec PR 6491 را ببینید.
پشتیبانی f16 در Linux برای NVIDIA
ویژگی اختیاری «shader-f16» که پشتیبانی از مقادیر ممیز شناور ۱۶ بیتی در WGSL را ارائه میدهد، اکنون در Linux برای درایورهای GPU اخیر NVIDIA پشتیبانی میشود. مشکل chromium:42251215 را ببینید.
بهروزرسانیهای Dawn
اکنون میتوانید بااستفاده از ساختار WGPUAdapterPropertiesD3D، شناسه منحصربهفرد محلی (LUID) مربوط به DXGIAdapter زیربنایی را برای یک آداپتور GPU مشخص پُرسمان کنید. مشکل chromium:562849566 را ببینید.
این بخش برخیاز نکات برجسته کلیدی را پوشش میدهد. فهرست کامل ثبتها را بررسی کنید.
ویژگیهای جدید WebGPU
فهرستی از همه مواردی که در مجموعه جدیدترینهای WebGPU پوشش داده شده است.
Chrome 155-156
- افزونه fragment_depth در WGSL
- فشردهسازی بافت تراز نشده است
- فضاهای رنگی srgb-linear و display-p3-linear
- قالب رأس snorm10-10-10-2 اضافی
- پشتیبانی f16 در Linux برای NVIDIA
- بهروزرسانیهای Dawn
Chrome 153-154
- افزونه WGSL buffer_view
- افزونه WGSL swizzle_assignment
- بهروزرسانیهای افزونه WGSL
- بهروزرسانیهای Dawn
Chrome 151-152
Chrome 149-150
Chrome 147-148
Chrome 146
- پشتیبانی از حالت سازگاری WebGPU در OpenGL ES 3.1
- پیوستهای گذرا
- افزونه WGSL texture_and_sampler_let
- بهروزرسانیهای Dawn
Chrome 145
Chrome 144
- افزونه subgroup_id در WGSL
- WGSL uniform_buffer_standard_layout extension
- WebGPU در Linux
- writeBuffer و writeTexture سریعتر
- بهروزرسانیهای Dawn
Chrome 143
- جابهجایی مؤلفه بافت
- برداشتن استفاده از بافت فضای ذخیرهسازی فقط خواندنی bgra8unorm
- بهروزرسانیهای Dawn
Chrome 142
Chrome 141
- «سایهرنگ فروسرخ» تکمیل شد
- تحلیل محدوده عدد صحیح در کامپایلر WGSL
- بهروزرسانی SPIR-V 1.4 برای Vulkan backend
- بهروزرسانیهای Dawn
Chrome 140
- آداپتور مصرف درخواستهای دستگاه
- خلاصه برای استفاده از بافت در جایی که از نمای بافت استفاده میشود
- WGSL textureSampleLevel از بافتهای یکبعدی پشتیبانی میکند
- منسوخ شدن استفاده از بافت فضای ذخیرهسازی فقط خواندنی bgra8unorm
- برداشتن مشخصه isFallbackAdapter GPUAdapter
- بهروزرسانیهای Dawn
Chrome 139
- پشتیبانی از بافت سهبعدی برای قالبهای فشرده BC و ASTC
- ویژگی جدید «core-features-and-limits»
- آزمایش معرفی ویژگی جدید برای حالت سازگاری WebGPU
- بهروزرسانیهای Dawn
Chrome 138
- کوتهنوشت برای استفاده از میانگیر بهعنوان منبع اتصال
- تغییرات الزامات اندازه برای میانگیرهای نگاشتشده در زمان ایجاد
- گزارش معماری برای واحدهای پردازش گرافیکی اخیر
- منسوخ کردن مشخصه isFallbackAdapter GPUAdapter
- بهروزرسانیهای Dawn
Chrome 137
- استفاده از نمای بافت برای اتصال externalTexture
- کپی میانگیرها بدون مشخص کردن انحراف و اندازه
- WGSL workgroupUniformLoad using pointer to atomic
- مشخصه powerPreference GPUAdapterInfo
- برداشتن مشخصه compatibilityMode در GPURequestAdapterOptions
- بهروزرسانیهای Dawn
Chrome 136
- مشخصه isFallbackAdapter GPUAdapterInfo
- بهبود زمان ترجمه سایهزن در D3D12
- ذخیره و کپی کردن تصاویر بوم
- محدودیتهای حالت سازگاری Lift
- بهروزرسانیهای Dawn
Chrome 135
- اجازه دادن به ایجاد طرح خط لوله با طرح گروه اتصال تهی
- اجازه دادن به درگاههای دید برای گسترش یافتن فراتر از مرزهای هدفهای پردازش
- دسترسی آسانتر به حالت سازگاری آزمایشی در Android
- برداشتن محدودیت maxInterStageShaderComponents
- بهروزرسانیهای Dawn
Chrome 134
- بهبود حجم کاری یادگیری ماشین با زیرگروهها
- Remove float filterable texture types support as blendable
- بهروزرسانیهای Dawn
Chrome 133
- قالبهای رأس unorm8x4-bgra و ۱-مؤلفهای اضافی
- اجازه دادن به درخواست محدودیتهای ناشناخته با مقدار تعریفنشده
- تغییرات قوانین تراز WGSL
- بهبود عملکرد WGSL با discard
- استفاده از displaySize در VideoFrame برای بافتهای خارجی
- مدیریت تصاویر با جهتهای غیرپیشفرض بااستفاده از copyExternalImageToTexture
- بهبود تجربه توسعهدهنده
- فعال کردن حالت سازگاری با featureLevel
- پاکسازی ویژگیهای آزمایشی زیرگروه
- منسوخ کردن محدودیت maxInterStageShaderComponents
- بهروزرسانیهای Dawn
Chrome 132
- استفاده از نمای بافت
- ترکیب بافتهای ممیز شناور ۳۲ بیتی
- مشخصه adapterInfo GPUDevice
- پیکربندی زمینه بوم با قالب نامعتبر خطای جاوا اسکریپت ایجاد میکند
- محدودیتهای نمونهبردار فیلترکننده در بافتها
- آزمایش زیرگروههای گسترشیافته
- بهبود تجربه توسعهدهنده
- پشتیبانی آزمایشی از قالبهای بافت نرمالشده ۱۶ بیتی
- بهروزرسانیهای Dawn
Chrome 131
- فاصلههای برش در WGSL
- GPUCanvasContext getConfiguration()
- نقطه و خط اولیه نباید سوگیری عمق داشته باشند
- توابع داخلی اسکن فراگیر برای زیرگروهها
- پشتیبانی آزمایشی برای multi-draw indirect
- Shader module compilation option strict math
- برداشتن GPUAdapter requestAdapterInfo()
- بهروزرسانیهای Dawn
Chrome 130
- ترکیب منبع دوگانه
- بهبود زمان ترجمه سایهزن در Metal
- منسوخ شدن GPUAdapter requestAdapterInfo()
- بهروزرسانیهای Dawn
Chrome 129
Chrome 128
- آزمایش با زیرگروهها
- منسوخ کردن تنظیم سوگیری عمق برای خطوط و نقاط
- پنهان کردن هشدار DevTools برای خطای ضبطنشده درصورت وجود preventDefault
- WGSL interpolate sampling first and either
- بهروزرسانیهای Dawn
Chrome 127
- پشتیبانی آزمایشی از OpenGL ES در Android
- مشخصه اطلاعات GPUAdapter
- بهبودهای تعاملپذیری WebAssembly
- خطاهای کدبند فرمان بهبودیافته است
- بهروزرسانیهای Dawn
Chrome 126
- افزایش حد maxTextureArrayLayers
- بهینهسازی بارگذاری میانگیر برای پسای Vulkan
- بهبود زمان ترجمه سایهزن
- بافرهای فرمان ارسالشده باید منحصربهفرد باشند
- بهروزرسانیهای Dawn
Chrome 125
Chrome 124
- بافتهای ذخیرهسازی فقط خواندنی و خواندنی-نوشتنی
- پشتیبانی از عاملان خدماتی و عاملان مشترک
- مشخصههای اطلاعات آداپتور جدید
- رفع اشکالها
- بهروزرسانیهای Dawn
Chrome 123
- پشتیبانی از توابع داخلی DP4a در WGSL
- پارامترهای اشارهگر نامحدود در WGSL
- قند نحوی برای ارجاعزدایی ترکیبها در WGSL
- وضعیت فقط خواندنی جداگانه برای جنبههای شابلون و عمق
- بهروزرسانیهای Dawn
Chrome 122
Chrome 121
- پشتیبانی از WebGPU در Android
- استفاده از DXC بهجای FXC برای کامپایل کردن سایهزن در Windows
- پرسوجوهای مُهر زمان در گذرهای محاسباتی و پردازشی
- نقطه ورودی پیشفرض به ماژولهای سایهزن
- پشتیبانی از display-p3 بهعنوان فضای رنگ GPUExternalTexture
- اطلاعات تودههای حافظه
- بهروزرسانیهای Dawn
Chrome 120
- پشتیبانی از مقادیر ممیز شناور ۱۶ بیتی در WGSL
- محدودیتها را کنار بزنید
- تغییرات در وضعیت شابلون عمق
- بهروزرسانیهای اطلاعات آداپتور
- کوانتیزاسیون پرسمانهای مُهر زمان
- ویژگیهای نظافت بهاره
Chrome 119
- بافتهای ممیز شناور ۳۲ بیتی قابلفیلتر
- قالب رأس unorm10-10-10-2
- قالب بافت rgb10a2uint
- بهروزرسانیهای Dawn
Chrome 118
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture() - پشتیبانی آزمایشی از بافت فضای ذخیرهسازی خواندن-نوشتن و فقط خواندنی
- بهروزرسانیهای Dawn
Chrome 117
- Unset vertex buffer
- لغو تنظیم گروه پیوند
- بیصدا کردن خطاهای ایجاد خط لوله ناهمگام هنگام گم شدن دستگاه
- بهروزرسانیهای ایجاد ماژول سایهزن SPIR-V
- بهبود تجربه توسعهدهنده
- ذخیره کردن خطوط لوله در حافظه نهان با چیدمان تولیدشده بهطور خودکار
- بهروزرسانیهای Dawn
Chrome 116
- ادغام WebCodecs
- دستگاه گمشده برگرداندهشده توسط GPUAdapter
requestDevice() - اگر
importExternalTexture()فراخوانده شد، بازپخش ویدیو را روان نگه دارید - مطابقت با مشخصات
- بهبود تجربه توسعهدهنده
- بهروزرسانیهای Dawn
Chrome 115
- افزونههای زبان WGSL پشتیبانیشده
- پشتیبانی آزمایشی از Direct3D 11
- دریافت GPU مجزا بهطور پیشفرض در برق AC
- بهبود تجربه توسعهدهنده
- بهروزرسانیهای Dawn
Chrome 114
- بهینهسازی جاوا اسکریپت
- getCurrentTexture() در بوم پیکربندینشده InvalidStateError را برمیگرداند
- بهروزرسانیهای WGSL
- بهروزرسانیهای Dawn