الميزات الجديدة في 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، وهو مُجمِّع لغة shaders في WebGPU، من خلال تقديم تمثيل وسيط للأجهزة التي تتوافق مع WebGPU مع الخلفية Metal. سيؤدي استخدام لغة IR هذه، التي تقع بين شجرة البنية المجردة (AST) في Tint وكاتب الخلفية في Metal، إلى جعل المُجمِّع أكثر كفاءة وقابلية للصيانة، ما يعود بالفائدة في النهاية على المطوّرين والمستخدمين. تُظهر الاختبارات الأولية أنّ الإصدار الجديد من Tint أسرع بنحو 10 مرات عند ترجمة Shaders WGSL في Unity إلى MSL.

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

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

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

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

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

آخر الأخبار من Dawn

حدّدت واجهة برمجة التطبيقات 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 131

Chrome 130

الإصدار 129 من Chrome

Chrome 128

Chrome 127

الإصدار 126 من Chrome

الإصدار 125 من Chrome

Chrome 124

Chrome 123

Chrome 122

الإصدار 121 من Chrome

الإصدار 120 من Chrome

الإصدار 119 من Chrome

Chrome 118

Chrome 117

Chrome 116

Chrome 115

الإصدار 114 من Chrome

Chrome 113