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

François Beaufort
François Beaufort

การผสานรวม WebCodecs

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

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

อุปกรณ์ที่สูญหายส่งกลับมาโดยคำขอ GPUAdapterDevice()

หากเมธอด 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() ทำงานไม่สำเร็จโดยไม่มีการบังคับให้นักพัฒนาซอฟต์แวร์ส่งคำสั่งไปยังคิว ดูเปลี่ยน chromium:4597950

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

ข้อมูลอัปเดตรุ่งเช้า

ปุ่มสลับการแก้ไขข้อบกพร่องของ disallow_unsafe_apis ได้เปลี่ยนชื่อเป็น allow_unsafe_apis และกำหนดให้ปิดใช้เป็นค่าเริ่มต้น ปุ่มสลับนี้จะระงับข้อผิดพลาดในการตรวจสอบความถูกต้องของจุดแรกเข้า API หรือชุดค่าผสมพารามิเตอร์ที่ถือว่ายังไม่ปลอดภัย ซึ่งมีประโยชน์ในการแก้ไขข้อบกพร่อง ดูปัญหา 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

รายการทั้งหมดที่กล่าวถึงในซีรีส์ What's New in WebGPU

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