الميزات الجديدة في 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...

تحسينات في وقت تجميع التظليل على 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 نهائيًا

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

تعرض وحدة تحكّم أدوات المطوّرين تحذيرًا بشأن إيقاف 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 131

الإصدار 130 من Chrome

الإصدار 129 من Chrome

Chrome 128

الإصدار 127 من Chrome

الإصدار 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