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

تمت إزالة السمة wgpu::ShaderModuleWGSLDescriptor التي تم إيقافها نهائيًا source واستخدام code بدلاً منها. راجِع change 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 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