الميزات الجديدة في 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 إلى تعليمات GPU منخفضة المستوى.
إنشاء مسار العرض في نظام التشغيل macOS

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

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

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

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

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

حدّد C API في 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 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