การผสานรวม 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 ของเครื่องมือสำหรับนักพัฒนาเว็บที่มีข้อความแสดงข้อผิดพลาดเกี่ยวกับการตรวจสอบบัฟเฟอร์](https://developer.chrome.com/static/blog/new-in-webgpu-116/image/screenshot-devtools-java-f6335abfb3e85.png?authuser=6&hl=th)
ข้อมูลอัปเดตรุ่งเช้า
ปุ่มสลับการแก้ไขข้อบกพร่องของ 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 127
- การทดสอบการรองรับ OpenGL ES บน Android
- แอตทริบิวต์ข้อมูลของ GPU
- การปรับปรุงการทำงานร่วมกันของ WebAssembly
- ข้อผิดพลาดของโปรแกรมเปลี่ยนไฟล์คำสั่งที่ปรับปรุงใหม่
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 126
- เพิ่มขีดจำกัด maxTextureArraydataLayer
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สำหรับแบ็กเอนด์ Vulkan
- ปรับปรุงเวลาคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 125
Chrome 124
- พื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่านอย่างเดียว
- การสนับสนุนของ Service Worker และผู้ปฏิบัติงานที่แชร์
- แอตทริบิวต์ข้อมูลอะแดปเตอร์ใหม่
- แก้ไขข้อบกพร่อง
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 123
- รองรับฟังก์ชัน DP4a ในตัวของ WGSL
- พารามิเตอร์ตัวชี้แบบไม่จำกัดใน WGSL
- น้ำตาลทางไวยากรณ์สำหรับลดการอ้างอิงองค์ประกอบใน WGSL
- แยกสถานะอ่านอย่างเดียวสำหรับลายฉลุและความลึก
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 122
- ขยายการเข้าถึงด้วยโหมดความเข้ากันได้ (ฟีเจอร์ที่กำลังพัฒนา)
- เพิ่มขีดจำกัด maxVertexAttributes
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 121
- รองรับ WebGPU ใน Android
- ใช้ DXC แทน FXC สำหรับการคอมไพล์ตัวปรับแสงเงาใน Windows
- การค้นหาการประทับเวลาในการประมวลผลและแสดงผลบัตรผ่าน
- จุดแรกเข้าเริ่มต้นสำหรับโมดูลตัวปรับเฉดสี
- รองรับ display-p3 เป็นพื้นที่สี GPUExternalTexture
- ข้อมูลฮีปหน่วยความจำ
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 120
- การรองรับค่าทศนิยม 16 บิตใน WGSL
- ก้าวข้ามขีดจำกัด
- การเปลี่ยนแปลงสถานะความลึกของลายฉลุ
- การอัปเดตข้อมูลอะแดปเตอร์
- การวัดปริมาณการค้นหาการประทับเวลา
- ฟีเจอร์ทำความสะอาดในฤดูใบไม้ผลิ
Chrome 119
- พื้นผิวแบบลอย 32 บิตที่กรองได้
- รูปแบบเวอร์เท็กซ์ unorm10-10-10-2
- รูปแบบพื้นผิวของrgb10a2uint
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 118
- การรองรับ HTMLImageElement และ ImageData ใน
copyExternalImageToTexture()
- เวอร์ชันทดลองสำหรับพื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่านอย่างเดียว
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 117
- ยกเลิกการตั้งค่าบัฟเฟอร์ Vertex
- ยกเลิกการตั้งค่ากลุ่มการเชื่อมโยง
- ปิดข้อผิดพลาดจากการสร้างไปป์ไลน์แบบไม่พร้อมกันเมื่ออุปกรณ์สูญหาย
- การอัปเดตการสร้างโมดูลตัวปรับแสงเงา SPIR-V
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ไปป์ไลน์การแคชที่มีเลย์เอาต์ที่สร้างขึ้นโดยอัตโนมัติ
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 116
- การผสานรวม WebCodecs
- อุปกรณ์ที่สูญหายส่งคืนโดย GPUAdapter
requestDevice()
- เล่นวิดีโอได้อย่างราบรื่นหากมีการเรียกใช้
importExternalTexture()
- ความสอดคล้องตามข้อกำหนด
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 115
- ส่วนขยายภาษา WGSL ที่รองรับ
- การสนับสนุนรุ่นทดลองสำหรับ Direct3D 11
- รับ GPU แบบแยกกันโดยค่าเริ่มต้นเมื่อใช้พลังงานจากไฟฟ้า AC
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 114
- เพิ่มประสิทธิภาพ JavaScript
- getCurrentTexture() ในผืนผ้าใบที่ไม่ได้กำหนดค่าไว้แสดงข้อผิดพลาดที่ไม่ถูกต้อง
- ข้อมูลอัปเดตเกี่ยวกับ WGSL
- ข้อมูลอัปเดตเมื่อรุ่งเช้า