มีอะไรใหม่ใน WebGPU (Chrome 116)

François Beaufort
François Beaufort

การผสานรวม WebCodecs

WebGPU จะแสดง API เพื่อสร้างออบเจ็กต์ "พื้นผิวภายนอก" ทึบแสงจาก HTMLVideoElement ถึง importExternalTexture() คุณใช้วัตถุเหล่านี้เพื่อสุ่มตัวอย่างเฟรมวิดีโอได้อย่างมีประสิทธิภาพ ซึ่งอาจทำได้แบบ 0 คัดลอกจากข้อมูลโมเดลสีต้นฉบับ YUV โดยตรง

อย่างไรก็ตาม ข้อกำหนด WebGPU เริ่มต้นไม่อนุญาตให้สร้างออบเจ็กต์ GPUExternalTexture จากออบเจ็กต์ WebCodecs VideoFrame ความสามารถนี้สำคัญอย่างยิ่งสำหรับแอปการประมวลผลวิดีโอขั้นสูงที่ใช้ WebCodec อยู่แล้วและต้องการผสานรวม 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 ในแพลตฟอร์มที่ไม่รองรับ ดูการเปลี่ยนแปลง chromium:4589369

ข้อความแสดงข้อผิดพลาดในการตรวจสอบบัฟเฟอร์จะปรากฏทันทีในคอนโซล JavaScript ของเครื่องมือสำหรับนักพัฒนาเว็บเมื่อ getMappedRange() ทำงานไม่สำเร็จโดยไม่มีการบังคับให้นักพัฒนาซอฟต์แวร์ส่งคำสั่งไปยังคิว ดูchange chromium:4597950

ภาพหน้าจอคอนโซล JavaScript ของเครื่องมือสำหรับนักพัฒนาเว็บที่มีข้อความแสดงข้อผิดพลาดในการตรวจสอบบัฟเฟอร์
ข้อความแสดงข้อผิดพลาดเกี่ยวกับการตรวจสอบบัฟเฟอร์ในคอนโซล JavaScript ของเครื่องมือสำหรับนักพัฒนาเว็บ

การอัปเดต Dawn

เปลี่ยนชื่อปุ่มสลับการแก้ไขข้อบกพร่อง disallow_unsafe_apis เป็น allow_unsafe_apis และตั้งค่าเริ่มต้นเป็นปิดใช้ ปุ่มสลับนี้จะซ่อนข้อผิดพลาดในการตรวจสอบที่จุดแรกเข้าของ API หรือชุดค่าผสมพารามิเตอร์ที่ยังไม่ถือว่าปลอดภัย ซึ่งมีประโยชน์ในการแก้ไขข้อบกพร่อง ดู issue dawn:1685

แอตทริบิวต์ wgpu::ShaderModuleWGSLDescriptor ที่เลิกใช้งานแล้ว source จะถูกนำออกเพื่อเริ่มใช้ code ดู change dawn:130321

มีการใช้เมธอด wgpu::RenderBundle::SetLabel() ที่ขาดหายไปแล้ว ดู change dawn:134502

แอปพลิเคชันสามารถขอแบ็กเอนด์ที่เฉพาะเจาะจงเมื่อรับอะแดปเตอร์ที่มีตัวเลือก wgpu::RequestAdapterOptionsBackendType ดูตัวอย่างด้านล่างและ issue 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 ในสำเนาได้ ดูตัวอย่างด้านล่างและ issue dawn:1551

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

ข้อมูลนี้เป็นเพียงไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด

มีอะไรใหม่ใน WebGPU

รายการทุกอย่างที่ครอบคลุมในชุดมีอะไรใหม่ใน WebGPU

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