الميزات الجديدة في WebGPU (Chrome 116)

François Beaufort
François Beaufort

دمج WebCodecs

تعرض WebGPU واجهة برمجة تطبيقات لإنشاء عناصر "نسيج خارجي" مبهمة من HTMLVideoElement إلى importExternalTexture(). يمكنك استخدام هذه العناصر لأخذ عيّنات من إطارات الفيديو بكفاءة، وربما بطريقة لا تتطلّب نسخًا مباشرةً من بيانات نموذج الألوان YUV المصدر.

ومع ذلك، لم تسمح مواصفات WebGPU الأولية بإنشاء عناصر GPUExternalTexture من عناصر VideoFrame في WebCodecs. هذه الإمكانية مهمة لتطبيقات معالجة الفيديو المتقدّمة التي تستخدم WebCodecs حاليًا وتريد دمج WebGPU في مسار معالجة الفيديو. تتيح عملية دمج WebCodecs استخدام VideoFrame كمصدر لمكالمة GPUExternalTexture وcopyExternalImageToTexture(). اطّلِع على المثال التالي وإدخال chromestatus.

// Access the GPU device.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

// Create VideoFrame from HTMLVideoElement.
const video = document.querySelector("video");
const videoFrame = new VideoFrame(video);

// Create texture from VideoFrame.
const texture = device.importExternalTexture({ source: videoFrame });
// TODO: Use texture in bind group creation.

يمكنك الاطّلاع على عيّنة تحميل الفيديو باستخدام WebCodecs التجريبية لتجربتها.

الجهاز الذي تم فقدانه والذي تم عرضه من خلال GPUAdapter.requestDevice()‎

إذا تعذّر تنفيذ طريقة requestDevice() على GPUAdapter لأنّها استُخدمت من قبل لإنشاء GPUDevice، سيتم تنفيذها الآن باستخدام GPUDevice يتم وضع علامة "مفقود" عليه على الفور، بدلاً من عرض وعد يتم رفضه مع null. راجِع المشكلة chromium:1234617.

const adapter = await navigator.gpu.requestAdapter();
const device1 = await adapter.requestDevice();

// New! The promise is not rejected anymore with null.
const device2 = await adapter.requestDevice();
// And the device is immediately marked as lost.
const info = await device2.lost;

الحفاظ على سلاسة تشغيل الفيديو في حال استدعاء importExternalTexture()

عند استدعاء importExternalTexture() مع HTMLVideoElement، لن يتم بعد ذلك تقييد تشغيل الفيديو المرتبط عندما لا يكون الفيديو مرئيًا في إطار العرض. يُرجى الاطّلاع على المشكلة chromium:1425252.

التوافق مع المواصفات

المَعلمة message في الدالة الإنشائية GPUPipelineError() اختيارية. اطّلِع على التغيير chromium:4613967.

يتم إطلاق خطأ عند استدعاء createShaderModule() إذا كان مصدر WGSL code يحتوي على \0. اطّلِع على المشكلة dawn:1345.

يبلغ الحدّ الأقصى التلقائي لمستوى التفاصيل (lodMaxClamp) المستخدَم عند أخذ عيّنة من زخرفة باستخدام createSampler()،‏ 32. راجِع التغيير chromium:4608063.

تحسين تجربة المطوّرين

يتم عرض رسالة في وحدة تحكّم JavaScript في "أدوات مطوّري البرامج" لتذكير المطوّرين عند استخدام WebGPU على نظام أساسي غير متوافق. راجِع change chromium:4589369.

تظهر رسائل خطأ التحقّق من صحة المخزن المؤقت على الفور في وحدة تحكّم JavaScript في "أدوات مطوّري البرامج" عند تعذُّر تنفيذ getMappedRange() بدون إجبار المطوّرين على إرسال أوامر إلى قائمة الانتظار. راجِع التغيير chromium:4597950.

لقطة شاشة لوحدة تحكّم JavaScript في "أدوات مطوّري البرامج" تعرض رسالة خطأ في التحقّق من صحة المخزن المؤقت
رسالة خطأ في التحقّق من صحة المخزن المؤقت في وحدة تحكّم JavaScript في "أدوات مطوّري البرامج"

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

تمت إعادة تسمية خيار تصحيح الأخطاء disallow_unsafe_apis ليصبح allow_unsafe_apis، وتم ضبطه على الإيقاف تلقائيًا. يؤدي إيقاف هذا الزر إلى إخفاء أخطاء التحقّق من الصحة في نقاط دخول واجهة برمجة التطبيقات أو مجموعات المَعلمات التي لا تُعدّ آمنة بعد. يمكن أن يكون ذلك مفيدًا في تصحيح الأخطاء. اطّلِع على المشكلة dawn:1685.

تمت إزالة السمة source المتوقّفة نهائيًا wgpu::ShaderModuleWGSLDescriptor واستخدام code بدلاً منها. راجِع تغيير dawn:130321.

تم تنفيذ الطريقة wgpu::RenderBundle::SetLabel() الناقصة. راجِع تغيير dawn:134502.

يمكن للتطبيقات طلب نظام خلفي معيّن عند الحصول على محوّل باستخدام الخيار wgpu::RequestAdapterOptionsBackendType. يمكنك الاطّلاع على مثال أدناه وإصدار dawn:1875.

wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;

wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;

// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);

تمت إضافة طريقة SwapChain::GetCurrentTexture() جديدة مع استخدامات إضافية لنسيج swapchain، وذلك حتى يمكن استخدام القيمة المعروضة wgpu::Texture في النسخ. اطّلِع على مثال أدناه والمشكلة dawn:1551.

wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();

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

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