การผสานรวม 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
การอัปเดต 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
- ตัดระยะทางใน WGSL
- GPUCanvasContext getConfiguration()
- องค์ประกอบพื้นฐานของจุดและเส้นต้องไม่มีอคติด้านความลึก
- ฟังก์ชันการสแกนแบบรวมในตัวสำหรับกลุ่มย่อย
- การรองรับการดึงข้อมูลแบบหลายดึงข้อมูลโดยอ้อมในขั้นทดลอง
- ตัวเลือกการคอมไพล์โมดูล Shader เป็นแบบคณิตศาสตร์ที่เข้มงวด
- นํา GPUAdapter requestAdapterInfo() ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 130
- การผสมผสานแหล่งที่มาแบบคู่
- การปรับปรุงเวลาคอมไพล์ Shader ใน Metal
- การเลิกใช้งาน requestAdapterInfo() ของ GPUAdapter
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 129
- การรองรับ HDR ด้วยโหมดการปรับโทนสีของ Canvas
- การรองรับกลุ่มย่อยที่เพิ่มขึ้น
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 128
- การทดสอบกลุ่มย่อย
- เลิกใช้งานการตั้งค่าความเอียงของภาพสำหรับเส้นและจุด
- ซ่อนคำเตือนข้อผิดพลาดของเครื่องมือสำหรับนักพัฒนาเว็บที่ตรวจไม่พบหาก preventDefault
- WGSL จะปัดเศษการสุ่มตัวอย่างก่อน แล้วทำอย่างใดอย่างหนึ่งต่อไปนี้
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 127
- การรองรับ OpenGL ES ใน Android แบบทดลอง
- แอตทริบิวต์ข้อมูล GPUAdapter
- การปรับปรุงความสามารถในการทำงานร่วมกันของ WebAssembly
- ปรับปรุงข้อผิดพลาดเกี่ยวกับโปรแกรมเข้ารหัสคำสั่ง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 126
- เพิ่มขีดจํากัด maxTextureArrayLayers
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สําหรับแบ็กเอนด์ Vulkan
- การปรับปรุงเวลาคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 125
Chrome 124
- พื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและแบบอ่านและเขียน
- การรองรับ Service Worker และ Shared Worker
- แอตทริบิวต์ข้อมูลอะแดปเตอร์ใหม่
- แก้ไขข้อบกพร่อง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 123
- การรองรับฟังก์ชันในตัวของ DP4a ใน WGSL
- พารามิเตอร์พอยน์เตอร์ที่ไม่จํากัดใน WGSL
- Syntax sugar สำหรับการนำคอมโพสิทมาอ้างอิงใน WGSL
- แยกสถานะอ่านอย่างเดียวสำหรับแสตนซิลและมิติความลึก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 122
- ขยายการเข้าถึงด้วยโหมดความเข้ากันได้ (ฟีเจอร์ที่อยู่ระหว่างการพัฒนา)
- เพิ่มขีดจํากัด maxVertexAttributes
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 121
- รองรับ WebGPU ใน Android
- ใช้ DXC แทน FXC สำหรับการคอมไพล์ shader ใน Windows
- การค้นหาการประทับเวลาในการคำนวณและผ่านการแสดงผล
- จุดแรกเข้าเริ่มต้นไปยังโมดูล Shader
- รองรับ display-p3 เป็นพื้นที่สี GPUExternalTexture
- ข้อมูลกองหน่วยความจำ
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 120
- การรองรับค่าทศนิยม 16 บิตใน WGSL
- ก้าวข้ามขีดจำกัด
- การเปลี่ยนแปลงสถานะความลึกของสเตนซิล
- การอัปเดตข้อมูลอะแดปเตอร์
- การแปลงค่าการค้นหาการประทับเวลา
- ฟีเจอร์ทำความสะอาดช่วงฤดูใบไม้ผลิ
Chrome 119
- พื้นผิวแบบจำนวนลอยตัว 32 บิตที่กรองได้
- รูปแบบเวิร์กเท็กซ์ unorm10-10-10-2
- รูปแบบพื้นผิว rgb10a2uint
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 118
- การรองรับ HTMLImageElement และ ImageData ใน
copyExternalImageToTexture()
- การรองรับแบบทดลองสำหรับพื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่าน/เขียน
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 117
- ยกเลิกการตั้งค่าบัฟเฟอร์เวิร์กเทกซ์
- ยกเลิกการตั้งค่ากลุ่มการเชื่อมโยง
- ซ่อนข้อผิดพลาดจากการสร้างไปป์ไลน์แบบแอซิงค์เมื่ออุปกรณ์สูญหาย
- การอัปเดตการสร้างโมดูล Shader ของ SPIR-V
- การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาแอป
- การแคชไปป์ไลน์ที่มีเลย์เอาต์ที่สร้างขึ้นโดยอัตโนมัติ
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 116
- การผสานรวม WebCodecs
- อุปกรณ์ที่สูญหายที่ GPUAdapter
requestDevice()
แสดง - ทำให้การเล่นวิดีโอราบรื่นหากมีการเรียกใช้
importExternalTexture()
- การปฏิบัติตามข้อกำหนด
- การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาแอป
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 115
- ส่วนขยายภาษา WGSL ที่รองรับ
- การรองรับ Direct3D 11 แบบทดลอง
- ใช้ GPU แบบแยกต่างหากโดยค่าเริ่มต้นเมื่อใช้แหล่งจ่ายไฟ AC
- การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาแอป
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 114
- เพิ่มประสิทธิภาพ JavaScript
- getCurrentTexture() ใน Canvas ที่ไม่ได้กําหนดค่าจะแสดงข้อผิดพลาด InvalidStateError
- ข้อมูลอัปเดตเกี่ยวกับ WGSL
- ข้อมูลอัปเดตเกี่ยวกับ Dawn