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

François Beaufort
François Beaufort

การผสานรวม WebCodecs

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

อย่างไรก็ตาม ข้อกำหนด WebGPU เริ่มต้นไม่อนุญาตให้สร้างออบเจ็กต์ GPUExternalTexture จากออบเจ็กต์ VideoFrame ของ WebCodecs ความสามารถนี้มีความสำคัญต่อแอปประมวลผลวิดีโอขั้นสูงที่ใช้ WebCodecs อยู่แล้วและต้องการผสานรวม WebGPU ในไปป์ไลน์การประมวลผลวิดีโอ การผสานรวม WebCodecs จะเพิ่มการรองรับการใช้ VideoFrame เป็นแหล่งที่มาสำหรับ GPUExternalTexture และการโทร copyExternalImageToTexture() ดูตัวอย่างต่อไปนี้และรายการใน Chrome Status

// 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 ของ DevTools เพื่อเตือนนักพัฒนาแอปเมื่อใช้ WebGPU ในแพลตฟอร์มที่ไม่รองรับ ดู change chromium:4589369

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

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

ข้อมูลอัปเดตเกี่ยวกับ Dawn

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

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

เราได้ติดตั้งใช้งานเมธอด wgpu::RenderBundle::SetLabel() ที่ขาดหายไปแล้ว ดูchange 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