الميزات الجديدة في WebGPU (إصدار Chrome 130)

François Beaufort
François Beaufort

دمج مصدرَين

يُطلق على دمج ناتجَين من برنامج تظليل الأجزاء في إطار مخزن مؤقت واحد اسم الدمج الثنائي المصدر. تكون هذه التقنية مفيدة بشكل خاص للتطبيقات التي تتطلّب عمليات دمج معقّدة، مثل تلك التي تستند إلى أوضاع الدمج Porter-Duff. من خلال استبدال عمليات العرض اللاحقة بعملية عرض واحدة، يمكن أن يؤدي دمج مصدرَين إلى تحسين الأداء والمرونة.

تتيح لك ميزة "dual-source-blending" WebGPU الجديدة استخدام السمة WGSL @blend_src في @location(0) للإشارة إلى فهرس مصدر المزج وعوامل المزج التالية: "src1" و"one-minus-src1" و"src1-alpha" و"one-minus-src1-alpha". راجِع المقتطف التالي وإدخال chromestatus والمشكلة 341973423.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
  throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
  requiredFeatures: ["dual-source-blending"],
});

const code = `
  enable dual_source_blending;

  struct FragOut {
    @location(0) @blend_src(0) color : vec4f,
    @location(0) @blend_src(1) blend : vec4f,
  }

  @fragment fn main() -> FragOut {
    var output : FragOut;
    output.color = vec4f(1.0, 1.0, 1.0, 1.0);
    output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
    return output;
  }
`;

const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...

تحسينات على وقت تجميع Shader على Metal

يعمل فريق Chrome على تحسين Tint، وهي أداة تجميع لغة التظليل WebGPU، من خلال تقديم تمثيل وسيط (IR) للأجهزة التي تتوافق مع WebGPU مع Metal backend. ستعمل هذه اللغة التمثيلية الوسيطة، التي يتم وضعها بين شجرة بناء الجملة المجردة (AST) الخاصة بلغة Tint وبرنامج Metal الخلفي، على جعل المترجم أكثر كفاءة وقابلية للصيانة، ما سيعود بالنفع في النهاية على كل من المطوّرين والمستخدمين. تُظهر الاختبارات الأولية أنّ الإصدار الجديد من Tint أسرع بما يصل إلى 10 مرات عند ترجمة مظلّلات WGSL في Unity إلى MSL.

يعرض مخطط انسيابي عملية تحويل رمز تظليل WGSL إلى تعليمات منخفضة المستوى لوحدة معالجة الرسومات.
إنشاء مسار العرض في نظام التشغيل macOS

يتم توسيع نطاق هذه التحسينات، التي يمكن الوصول إليها حاليًا على Android وChromeOS، بشكل تدريجي لتشمل أجهزة macOS المتوافقة مع WebGPU باستخدام Metal backend. اطّلِع على المشكلة 42251016.

إيقاف طريقة requestAdapterInfo()‎ في GPUAdapter نهائيًا

الطريقة غير المتزامنة requestAdapterInfo() في GPUAdapter غير ضرورية لأنّه يمكن للمطوّرين الحصول على GPUAdapterInfo بشكل متزامن باستخدام السمة info في GPUAdapter. وبالتالي، تم الآن إيقاف طريقة requestAdapterInfo() غير العادية في GPUAdapter نهائيًا. اطّلِع على إشعار الإيقاف النهائي.

تعرض وحدة تحكّم "أدوات مطوّري البرامج" تحذيرًا بشأن الإيقاف النهائي للدالة requestAdapterInfo().
تحذير بشأن الميزة المتوقّفة نهائيًا requestAdapterInfo() في "أدوات مطوّري البرامج في Chrome"

إشعارات الفجر

حدّدت واجهة برمجة التطبيقات C في webgpu.h بعض اصطلاحات التسمية لبُنى الإضافات. اطّلِع على تغييرات الأسماء التالية والمشكلة 42241174.

WGPURenderPassDescriptor إضافة
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
WGPUShaderModuleDescriptor إضافة
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
WGPUSurfaceDescriptor إضافة
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

يتم تبديل نوع السمة depthWriteEnabled في WGPUDepthStencilState من منطقي إلى WGPUOptionalBool ليعكس بشكل أفضل حالاته الثلاث المحتملة (صحيح، خطأ، غير محدّد) كما هو الحال في JavaScript API. لمزيد من المعلومات، يمكنك الاطّلاع على مقتطف الرمز التالي وطلب السحب webgpu-headers.

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

هذا يشمل بعض النقاط الرئيسية فقط. اطّلِع على قائمة عمليات الدمج الشاملة.

الميزات الجديدة في WebGPU

قائمة بكل ما تم تناوله في سلسلة الميزات الجديدة في WebGPU

Chrome 143

Chrome 142

Chrome 141

Chrome 140

‫Chrome 139

‫Chrome 138

‫Chrome 137

Chrome 136

Chrome 135

‫Chrome 134

‫Chrome 133

‫Chrome 132

‫Chrome 131

Chrome 130

Chrome 129

‫Chrome 128

Chrome 127

‫Chrome 126

‫Chrome 125

Chrome 124

Chrome 123

‫Chrome 122

‫Chrome 121

‫Chrome 120

‫Chrome 119

Chrome 118

‫Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113