มีอะไรใหม่ใน 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 เพื่อทดลองเล่น

อุปกรณ์ที่สูญหายซึ่งส่งคืนโดย 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 ดูรุ่งอรุณปัญหา:1345

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

การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาซอฟต์แวร์

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

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

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

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

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

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

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

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

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

ทั้งหมดนี้พูดถึงไฮไลต์สำคัญเพียงบางส่วน ดูรายการสัญญาผูกมัดอย่างละเอียด

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

รายการของทุกอย่างที่มีการพูดถึงในซีรีส์มีอะไรใหม่ใน WebGPU

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