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

François Beaufort
François Beaufort

การผสานรวม WebCodecs

WebGPU จะแสดง API เพื่อสร้างออบเจ็กต์ "พื้นผิวภายนอก" ทึบแสงจาก HTMLVideoElement ถึง importExternalTexture() คุณสามารถใช้ออบเจ็กต์เหล่านี้เพื่อสุ่มตัวอย่างเฟรมวิดีโอได้อย่างมีประสิทธิภาพ ซึ่งอาจใช้วิธีไม่คัดลอกจากข้อมูลรูปแบบสี 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 ดู issue dawn:1345

ระดับรายละเอียดสูงสุดเริ่มต้น (lodMaxClamp) ที่ใช้ในการสุ่มตัวอย่างพื้นผิวด้วย createSampler() คือ 32 ดูchange chromium:4608063

ปรับปรุงประสบการณ์การใช้งานสำหรับนักพัฒนาแอป

ระบบจะแสดงข้อความในคอนโซล JavaScript ของเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์เพื่อเตือนนักพัฒนาแอปเมื่อใช้ WebGPU ในแพลตฟอร์มที่ไม่รองรับ ดูการเปลี่ยนแปลง chromium:4589369

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

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

การอัปเดต Dawn

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

ระบบจะนำแอตทริบิวต์ source ของ wgpu::ShaderModuleWGSLDescriptor ที่ถูกเลิกใช้งานแล้วออกเพื่อใช้ 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