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

François Beaufort
François Beaufort

دمج مصدرَين

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

تتيح لك ميزة "dual-source-blending" WebGPU الجديدة استخدام السمة @blend_src WGSL في @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 149-150

Chrome 147-148

‫Chrome 146

Chrome 145

‫Chrome 144

Chrome 143

الإصدار 142 من Chrome

‫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