إضافة fragment_depth في WGSL
في عمليات العرض التي تعتمد بشكل كبير على الأشكال الهندسية، تُعدّ تحسينات early-Z أفضل أداة للمطوّرين. وتوفّر هذه الميزة تحسينًا هائلاً في الأداء من خلال السماح لوحدة معالجة الرسومات بتجاهل وحدات البكسل المخفية قبل تشغيل أدوات تظليل الأجزاء المكلفة. إذا تعذّر اجتياز اختبار العمق المنقّط، تتخطّى وحدة معالجة الرسومات تظليل الأجزاء بالكامل، شرط ألا يكون للتظليل تأثيرات جانبية أخرى.
إذا أردت معرفة كيفية تعامل الأجهزة مع هذه المشكلة، يمكنك الاطّلاع على مقالة MJP الرائعة بعنوان متى يجب إيقاف Early-Z؟.
على الرغم من أنّ التلاعب المخصّص بالعمق مفيد، إلا أنّ تنفيذه في أداة تظليل الأجزاء ينطوي على ضريبة خفية. تؤدي الكتابة إلى @builtin(frag_depth) داخل تظليل الأجزاء عادةً إلى فرض برامج التشغيل لإيقاف تحسينات early-Z هذه لطلب الرسم بالكامل. يحدث ذلك لأنّ الأساليب الإرشادية لبرنامج التشغيل لا يمكنها ضمان تطابق عمق الناتج المحسوب لبرنامج التظليل مع العمق الذي تم استيفاؤه بواسطة أداة التنقيط.
لمعالجة هذا الانخفاض في الأداء، تتيح لك إضافة WGSL fragment_depth تحديد اسم وضع العمق less أو greater في @builtin(frag_depth) لتوضيح كيفية مقارنة العمق المكتوب بالعمق المُستقرأ، ما يتيح لوحدة معالجة الرسومات تطبيق تحسينات Z المبكرة بأمان.
يمكن رصد ميزات إضافة اللغة هذه في JavaScript باستخدام 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" إنشاء زخارف مضغوطة بأبعاد ليست مضاعفات صحيحة لحجم الكتلة (مثل 4×4 لتنسيقات 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"],
});
نتوجّه بالشكر إلى المساهم الخارجي إغناسيو كاستانيو من spark.js على تطوير هذه الميزة والمواصفات ومجموعة اختبارات التوافق (CTS).
الفضاءات اللونية srgb-linear وdisplay-p3-linear
من خلال إضافة الفضاءات اللونية المحدّدة مسبقًا "srgb-linear" و "display-p3-linear"، يمكن الآن لسياق لوحة WebGPU عرض الصور مباشرةً في فضاءات لونية خطية ذات نطاق موسّع لإتاحة الشاشات ذات النطاق الواسع. تحافظ هذه الفضاءات اللونية على علاقة خطية بين قيم البكسل والسطوع المادي. وهذا يجعلها مثالية لعرض الإضاءة المادية في الألعاب بالإضافة إلى مهام المعالجة المكانية مثل مكافحة التعرج والاستيفاء والإهلاك. يمكنك الاطّلاع على الهدف من الشحن ونموذج الجسيمات (النطاق العالي الديناميكية) في طلب الدمج رقم 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" هو تنسيق مضغوط بحجم 32 بت يحتوي على أربع قيم عادية موقَّعة: ثلاثة مكوّنات بحجم 10 بت (r, g, b) ومكوّن واحد بحجم 2 بت (a). يتيح لك هذا التنسيق تخزين السمات بكفاءة، مثل المتجهات العادية الثلاثية الأبعاد مع قيمة عددية إضافية بحجم 2 بت أو علامة محاذاة، مع توفير معدل نقل البيانات في الذاكرة. راجِع المواصفات PR 6491.
دعم f16 على Linux لـ NVIDIA
أصبحت ميزة "shader-f16" الاختيارية، التي توفّر دعمًا لقيم النقاط العائمة ذات 16 بت في WGSL، متاحة الآن على نظام التشغيل Linux لبرامج تشغيل وحدات معالجة الرسومات NVIDIA الحديثة. يُرجى الاطّلاع على المشكلة chromium:42251215.
تحديثات Dawn
يمكنك الآن طلب البحث عن معرّف LUID الخاص بـ DXGIAdapter الأساسي لمحوّل GPU معيّن باستخدام بنية WGPUAdapterPropertiesD3D. يُرجى الاطّلاع على المشكلة chromium:562849566.
يغطي هذا بعض النقاط البارزة الرئيسية. اطّلِع على قائمة عمليات الإرسال الشاملة.
الميزات الجديدة في WebGPU
قائمة بكل ما تم تناوله في سلسلة الميزات الجديدة في WebGPU.
الإصداران 155 و156 من Chrome
- إضافة WGSL fragment_depth
- ضغط الزخرفة غير متوافق
- الفضاءات اللونية srgb-linear وdisplay-p3-linear
- تنسيق إضافي للرؤوس snorm10-10-10-2
- إتاحة f16 على Linux لـ NVIDIA
- تحديثات Dawn
الإصداران 153 و154 من Chrome
الإصداران 151 و152 من Chrome
الإصداران 149 و150 من Chrome
الإصداران 147 و148 من Chrome
الإصدار 146 من Chrome
- إتاحة وضع التوافق مع WebGPU على OpenGL ES 3.1
- المرفقات المؤقتة
- إضافة WGSL texture_and_sampler_let
- تحديثات Dawn
الإصدار 145 من Chrome
Chrome 144
- إضافة WGSL subgroup_id
- إضافة WGSL uniform_buffer_standard_layout
- WebGPU على Linux
- تسريع writeBuffer وwriteTexture
- تحديثات Dawn
الإصدار 143 من Chrome
الإصدار 142 من Chrome
الإصدار 141 من Chrome
- اكتملت عملية التحقّق من معلومات الاتصال
- تحليل نطاق الأعداد الصحيحة في برنامج تجميع WGSL
- تحديث SPIR-V 1.4 لواجهة Vulkan الخلفية
- تحديثات Dawn
الإصدار 140 من Chrome
- محوّل استهلاك طلبات الجهاز
- اختصار لاستخدام الزخرفة في مكان استخدام عرض الزخرفة
- إتاحة استخدام الزخارف أحادية الأبعاد في WGSL textureSampleLevel
- إيقاف استخدام مادة العرض bgra8unorm للتخزين للقراءة فقط
- إزالة سمة isFallbackAdapter في GPUAdapter
- تحديثات Dawn
Chrome 139
- إتاحة الملمس الثلاثي الأبعاد لتنسيقات BC وASTC المضغوطة
- ميزة "core-features-and-limits" الجديدة
- مرحلة التجربة والتقييم لوضع التوافق مع WebGPU
- تحديثات Dawn
الإصدار 138 من Chrome
- اختصار لاستخدام المخزن المؤقت كمورد ربط
- تغييرات في متطلبات الحجم لذاكرات التخزين المؤقت التي يتم ربطها عند الإنشاء
- تقرير البنية لوحدات معالجة الرسومات الحديثة
- إيقاف سمة isFallbackAdapter في GPUAdapter نهائيًا
- تحديثات Dawn
الإصدار 137 من Chrome
- استخدام عرض الزخرفة لربط externalTexture
- نسخ المخازن المؤقتة بدون تحديد الإزاحات والحجم
- استخدام WGSL workgroupUniformLoad لمؤشر إلى atomic
- سمة powerPreference في GPUAdapterInfo
- إزالة سمة compatibilityMode في GPURequestAdapterOptions
- تحديثات Dawn
الإصدار 136 من Chrome
- سمة isFallbackAdapter في GPUAdapterInfo
- تحسينات على وقت تجميع أداة التظليل في D3D12
- حفظ صور Canvas ونسخها
- القيود المفروضة على وضع التوافق مع Lift
- تحديثات Dawn
الإصدار 135 من Chrome
- السماح بإنشاء تنسيق مسار باستخدام تنسيق مجموعة ربط فارغ
- السماح لمساحات العرض بالتمدّد خارج حدود أهداف العرض
- الوصول بسهولة أكبر إلى وضع التوافق التجريبي على Android
- إزالة حدّ maxInterStageShaderComponents
- تحديثات Dawn
الإصدار 134 من Chrome
- تحسين أعباء عمل تعلُّم الآلة باستخدام المجموعات الفرعية
- إزالة إمكانية مزج أنواع الأنسجة القابلة للفلترة العائمة
- تحديثات Dawn
الإصدار 133 من Chrome
- تنسيقات إضافية لـ unorm8x4-bgra و1-component vertex
- السماح بطلب حدود غير معروفة بقيمة غير محدّدة
- تغييرات في قواعد محاذاة WGSL
- تحسينات في أداء WGSL باستخدام discard
- استخدام displaySize في VideoFrame للأنسجة الخارجية
- التعامل مع الصور ذات الاتجاهات غير التلقائية باستخدام copyExternalImageToTexture
- تحسين تجربة المطوّرين
- تفعيل وضع التوافق مع featureLevel
- إزالة ميزات المجموعات الفرعية التجريبية
- إيقاف حدّ maxInterStageShaderComponents نهائيًا
- تحديثات Dawn
الإصدار 132 من Chrome
- استخدام TextureView
- دمج زخارف عائمة 32 بت
- سمة adapterInfo في GPUDevice
- يؤدي ضبط سياق لوحة الرسم بتنسيق غير صالح إلى ظهور خطأ في JavaScript
- قيود أخذ عينات الفلترة على الزخارف
- تجربة المجموعات الفرعية الموسّعة
- تحسين تجربة المطوّرين
- دعم تجريبي لتنسيقات الزخرفة التي تمّت تسويتها بـ 16 بت
- تحديثات Dawn
الإصدار 131 من Chrome
- مسافات الاقتصاص في WGSL
- GPUCanvasContext getConfiguration()
- يجب ألا تحتوي العناصر الأساسية للنقاط والخطوط على انحياز في العمق
- الدوال المدمَجة للمسح الشامل للمجموعات الفرعية
- دعم تجريبي لتقنية multi-draw indirect
- خيار تجميع وحدة Shader strict math
- إزالة requestAdapterInfo() من GPUAdapter
- تحديثات Dawn
Chrome 130
- دمج المصدر المزدوج
- تحسينات على وقت تجميع أدوات التظليل في Metal
- إيقاف requestAdapterInfo() نهائيًا في GPUAdapter
- تحديثات Dawn
Chrome 129
- التوافق مع تقنية النطاق العالي الديناميكية (HDR) مع وضع ربط درجات الألوان في لوحة العرض
- دعم المجموعات الفرعية الموسّعة
- تحديثات Dawn
الإصدار 128 من Chrome
- تجربة المجموعات الفرعية
- إيقاف إعداد انحياز العمق للخطوط والنقاط نهائيًا
- إخفاء تحذير "أدوات مطوّري البرامج" بشأن الأخطاء غير المكتشفة في حال استخدام preventDefault
- WGSL interpolate sampling first and either
- تحديثات Dawn
الإصدار 127 من Chrome
- دعم تجريبي لـ OpenGL ES على Android
- سمة معلومات GPUAdapter
- تحسينات على إمكانية التشغيل التفاعلي في WebAssembly
- تحسين أخطاء ترميز الأوامر
- تحديثات Dawn
الإصدار 126 من Chrome
- زيادة الحد الأقصى لـ maxTextureArrayLayers
- تحسين تحميل المخزن المؤقت لواجهة Vulkan الخلفية
- تحسينات على وقت تجميع أدوات التظليل
- يجب أن تكون مخازن الأوامر المؤقتة المُرسَلة فريدة
- تحديثات Dawn
Chrome 125
الإصدار 124 من Chrome
- مواد عرض التخزين للقراءة فقط وللقراءة والكتابة
- إتاحة استخدام مشغّلي الخدمات والمشغّلين المشترَكين
- سمات معلومات المحوّلات الجديدة
- إصلاح الأخطاء
- تحديثات Dawn
Chrome 123
- إتاحة الدوال المضمّنة في DP4a في لغة WGSL
- مَعلمات المؤشرات غير المقيّدة في WGSL
- تبسيط بنية إلغاء الإشارة إلى العناصر المركّبة في WGSL
- حالة منفصلة بإذن بالقراءة فقط لجوانب الاستنسل والعمق
- تحديثات Dawn
الإصدار 122 من Chrome
- توسيع مدى الوصول باستخدام وضع التوافق (ميزة قيد التطوير)
- زيادة الحد الأقصى لسمات maxVertexAttributes
- تحديثات Dawn
Chrome 121
- إتاحة WebGPU على Android
- استخدام DXC بدلاً من FXC لتجميع برامج التظليل على نظام التشغيل Windows
- طلبات البحث عن الطوابع الزمنية في عمليات الحوسبة والعرض
- نقاط الدخول التلقائية إلى وحدات التظليل
- إتاحة استخدام display-p3 كفضاء لوني في GPUExternalTexture
- معلومات حول أكوام الذاكرة
- تحديثات Dawn
الإصدار 120 من Chrome
- إتاحة قيم النقطة العائمة ذات 16 بت في WGSL
- تجاوز الحدود
- التغييرات في حالة الاستنسل العميق
- تعديلات على معلومات المحوّل
- تحديد كمية طلبات البحث عن الطوابع الزمنية
- ميزات التنظيم الشامل
Chrome 119
Chrome 118
- إتاحة HTMLImageElement وImageData في
copyExternalImageToTexture() - دعم تجريبي لنسيج التخزين للقراءة والكتابة والقراءة فقط
- تحديثات Dawn
Chrome 117
- إلغاء ضبط مخزن الرؤوس المؤقت
- إلغاء ضبط مجموعة الربط
- تجاهُل الأخطاء الناتجة عن إنشاء مسار غير متزامن عند فقدان الجهاز
- تعديلات على إنشاء وحدة تظليل SPIR-V
- تحسين تجربة المطوّرين
- تخزين مسارات المعالجة مؤقتًا باستخدام تنسيق يتم إنشاؤه تلقائيًا
- تحديثات Dawn
Chrome 116
- دمج WebCodecs
- تم إرجاع الجهاز المفقود من خلال GPUAdapter
requestDevice() - الحفاظ على سلاسة تشغيل الفيديو في حال استدعاء
importExternalTexture() - التوافق مع المواصفات
- تحسين تجربة المطوّرين
- تحديثات Dawn
Chrome 115
- إضافات لغة WGSL المتوافقة
- دعم تجريبي لـ Direct3D 11
- استخدام وحدة معالجة الرسومات المنفصلة تلقائيًا عند الاتصال بمصدر تيار متردد
- تحسين تجربة المطوّرين
- تحديثات Dawn
Chrome 114
- تحسين JavaScript
- ()getCurrentTexture في لوحة الرسم غير المضبوطة يعرض InvalidStateError
- تحديثات WGSL
- تحديثات Dawn