รองรับ HDR ในโหมดการแมปโทนสี Canvas
นักพัฒนาเว็บมีตัวเลือกที่จํากัดในการส่งเนื้อหา HDR โดยอาศัยองค์ประกอบ <img>
และ <video>
เป็นหลัก อย่างไรก็ตาม องค์ประกอบ <canvas>
จะยังจำกัดเฉพาะ SDR การสร้างเนื้อหา HDR แบบไดนามิกภายใน Canvas จำเป็นต้องเข้ารหัสเนื้อหาเป็นภาพ HDR ก่อนแสดง (ดูตัวอย่างได้ที่เดโมนี้)
ตอนนี้พารามิเตอร์ GPUCanvasToneMappingMode
ใหม่ในการกำหนดค่า Canvas ของ WebGPU จะอนุญาตให้ WebGPU วาดสีที่สว่างกว่าสีขาว (#FFFFFF
) ได้ ซึ่งทำได้ในโหมดต่อไปนี้
"standard"
: ลักษณะการทำงานเริ่มต้นจะจำกัดเนื้อหาให้อยู่ในช่วง SDR ของหน้าจอ โหมดนี้ทำได้ด้วยการปรับค่าสีทั้งหมดในพื้นที่สีของหน้าจอให้เป็นช่วง[0, 1]
"extended"
: ปลดล็อกช่วง HDR ทั้งหมดของหน้าจอ โหมดนี้จะจับคู่"standard"
ในช่วง[0, 1]
ของหน้าจอ การจำกัดหรือการแสดงผลจะทำกับช่วงไดนามิกแบบขยายของหน้าจอ แต่ไม่ทำกับ[0, 1]
ข้อมูลโค้ดต่อไปนี้แสดงวิธีกำหนดค่า Canvas สำหรับช่วงไดนามิกสูง
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
context.configure({
device,
format: "rgba16float",
toneMapping: { mode: "extended" },
});
สำรวจ HDR ด้วย WebGPU โดยดูตัวอย่างอนุภาค (HDR) และตัวอย่าง HDR ของ WebGPU รวมถึงดูรายการ chromestatus
การรองรับกลุ่มย่อยที่ขยายการให้บริการ
หลังจากประกาศการทดสอบกลุ่มย่อย ตอนนี้ฟังก์ชันในตัวของกลุ่มย่อยพร้อมให้ใช้งานทั้งในคอมพิวตเชดและแฟรกเมนต์เชดเดอร์แล้ว จึงไม่จํากัดอยู่แค่คอมพิวตเชดเดอร์อีกต่อไป ดูปัญหา 354738715
โปรดทราบว่าตอนนี้ค่าในตัว subgroup_size
คือข้อบกพร่องในตัวสร้างส่วนย่อย โปรดหลีกเลี่ยงการใช้ฟีเจอร์นี้ไปก่อน
นอกจากนี้ ระบบยังเพิ่มฟังก์ชันในตัวของกลุ่มย่อยต่อไปนี้ด้วย
subgroupAdd(value)
: แสดงผลรวมของvalue
การเรียกใช้ที่ใช้งานอยู่ทั้งหมดในกลุ่มย่อยsubgroupExclusiveAdd(value)
: แสดงผลรวมการสแกนเฉพาะของvalue
การเรียกใช้ที่ใช้งานอยู่ทั้งหมดในกลุ่มย่อยsubgroupMul(value)
: แสดงผลผลคูณของvalue
การเรียกใช้ที่ใช้งานอยู่ทั้งหมดในกลุ่มย่อยsubgroupExclusiveMul(value)
: แสดงผลคูณการสแกนที่ไม่รวมของvalue
การเรียกใช้ที่ใช้งานอยู่ทั้งหมดในกลุ่มย่อยsubgroupAnd(value)
: แสดงผลไบนารี AND ของการเรียกใช้value
ที่ใช้งานอยู่ทั้งหมดในกลุ่มย่อยsubgroupOr(value)
: แสดงผล OR แบบไบนารีของvalue
การเรียกใช้ที่ใช้งานอยู่ทั้งหมดในกลุ่มย่อยsubgroupXor(value)
: แสดงผล XOR ไบนารีของการเรียกใช้ที่ใช้งานอยู่ทั้งหมดvalue
ในกลุ่มย่อยsubgroupMin(value)
: แสดงผลค่าต่ำสุดของการเรียกใช้value
ที่ใช้งานอยู่ทั้งหมดในกลุ่มย่อยsubgroupMax(value)
: แสดงผลค่าสูงสุดของการเรียกใช้ที่ใช้งานอยู่value
ทั้งหมดในกลุ่มย่อยsubgroupAll(value)
: แสดงผลเป็น "จริง" หากvalue
เป็น "จริง" สําหรับการเรียกใช้ที่ใช้งานอยู่ทั้งหมดในกลุ่มย่อยsubgroupAny(value)
: แสดงผลเป็น "จริง" หากvalue
เป็น "จริง" สําหรับการเรียกใช้ที่ใช้งานอยู่ในกลุ่มย่อยsubgroupElect()
: แสดงผลเป็น "จริง" หากการเรียกใช้นี้มีค่าsubgroup_invocation_id
ต่ำสุดในการเรียกใช้ที่ใช้งานอยู่ในกลุ่มย่อยsubgroupBroadcastFirst(value)
: ประกาศvalue
จากคําเรียกที่ใช้งานอยู่ซึ่งมีsubgroup_invocation_id
ต่ำที่สุดในกลุ่มย่อยไปยังคําเรียกที่ใช้งานอยู่อื่นๆ ทั้งหมดsubgroupShuffle(value, id)
: แสดงผลvalue
จากคําเรียกที่ใช้งานอยู่ซึ่งมีsubgroup_invocation_id
ตรงกับid
subgroupShuffleXor(value, mask)
: แสดงผลvalue
จากคําเรียกที่ใช้งานอยู่ซึ่งมีsubgroup_invocation_id
ตรงกับsubgroup_invocation_id ^ mask
mask
ต้องเป็นแบบเดียวกันแบบไดนามิกsubgroupShuffleUp(value, delta)
: แสดงผลvalue
จากคําเรียกที่ใช้งานอยู่ซึ่งมีsubgroup_invocation_id
ตรงกับsubgroup_invocation_id - delta
subgroupShuffleDown(value, delta)
: แสดงผลvalue
จากคําเรียกที่ใช้งานอยู่ซึ่งsubgroup_invocation_id
ตรงกับsubgroup_invocation_id + delta
quadBroadcast(value, id)
: เผยแพร่value
จากการเรียกใช้ควอดที่มีรหัสเท่ากับid
id
ต้องเป็นนิพจน์คงที่quadSwapX(value)
: สลับvalue
ระหว่างการเรียกใช้ในรูปสี่เหลี่ยมจัตุรัสในทิศทาง XquadSwapY(value)
: สลับvalue
ระหว่างการเรียกใช้ในรูปสี่เหลี่ยมจัตุรัสในแนว YquadSwapDiagonal(value)
: สลับvalue
ระหว่างการเรียกใช้ในรูปสี่เหลี่ยมจัตุรัสในแนวทแยง
การอัปเดต Dawn
ตอนนี้โครงสร้าง wgpu::PrimitiveState
มีการตั้งค่าการควบคุมคลิปเชิงลึกโดยตรงแล้ว จึงไม่จำเป็นต้องใช้โครงสร้าง wgpu::PrimitiveDepthClipControl
แยกต่างหาก ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลโค้ดต่อไปนี้และ webgpu-headers PR
// Before
wgpu::PrimitiveState primitive = {};
wgpu::PrimitiveDepthClipControl depthClipControl;
depthClipControl.unclippedDepth = true;
primitive.nextInChain = &depthClipControl;
// Now
wgpu::PrimitiveState primitive = {};
primitive.unclippedDepth = true;
ข้อมูลนี้เป็นเพียงไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด
มีอะไรใหม่ใน WebGPU
รายการทุกอย่างที่ครอบคลุมในชุดมีอะไรใหม่ใน WebGPU
Chrome 131
- ตัดระยะทางใน WGSL
- GPUCanvasContext getConfiguration()
- องค์ประกอบพื้นฐานของจุดและเส้นต้องไม่มีอคติด้านความลึก
- ฟังก์ชันการสแกนที่ครอบคลุมสำหรับกลุ่มย่อย
- การรองรับการทดสอบโดยอ้อมสำหรับการสุ่มหลายรายการ
- ตัวเลือกการรวบรวมโมดูล Shader คณิตศาสตร์แบบเข้มงวด
- นํา GPUAdapter requestAdapterInfo() ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 130
- การผสมผสานแหล่งที่มาแบบคู่
- การปรับปรุงเวลาคอมไพล์ Shader ใน Metal
- การเลิกใช้งาน requestAdapterInfo() ของ GPUAdapter
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 129
- การรองรับ HDR ด้วยโหมดการปรับโทนสีของ Canvas
- การรองรับกลุ่มย่อยที่เพิ่มขึ้น
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 128
- การทดสอบกับกลุ่มย่อย
- เลิกใช้งานการตั้งค่าความเอียงของภาพสำหรับเส้นและจุด
- ซ่อนคำเตือนข้อผิดพลาดของเครื่องมือสำหรับนักพัฒนาเว็บที่ไม่ได้บันทึกไว้หาก preventDefault
- WGSL จะปัดเศษการสุ่มตัวอย่างก่อน แล้วทำอย่างใดอย่างหนึ่งต่อไปนี้
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 127
- การรองรับ OpenGL ES ใน Android แบบทดลอง
- แอตทริบิวต์ข้อมูล GPUAdapter
- การปรับปรุงการทำงานร่วมกันของ WebAssembly
- ข้อผิดพลาดเกี่ยวกับโปรแกรมเข้ารหัสคําสั่งที่ปรับปรุงแล้ว
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 126
- เพิ่มขีดจํากัด maxTextureArrayLayers
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สำหรับแบ็กเอนด์ Vulkan
- ปรับปรุงเวลาคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
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
- การค้นหาการประทับเวลาในการประมวลผลและแสดงผลบัตรผ่าน
- จุดแรกเข้าเริ่มต้นสำหรับโมดูลตัวปรับเฉดสี
- รองรับ display-p3 เป็นพื้นที่สี GPUExternalTexture
- ข้อมูลกองหน่วยความจำ
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 120
- การรองรับค่าทศนิยม 16 บิตใน WGSL
- ก้าวข้ามขีดจำกัด
- การเปลี่ยนแปลงสถานะความลึกของสเตนซิล
- การอัปเดตข้อมูลอะแดปเตอร์
- การแปลงค่าการค้นหาการประทับเวลา
- ฟีเจอร์ทำความสะอาดในฤดูใบไม้ผลิ
Chrome 119
- พื้นผิวแบบจำนวนลอยตัว 32 บิตที่กรองได้
- รูปแบบเวิร์กเท็กซ์ unorm10-10-10-2
- รูปแบบพื้นผิว rgb10a2uint
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 118
- การรองรับ HTMLImageElement และ ImageData ใน
copyExternalImageToTexture()
- การรองรับแบบทดลองสำหรับพื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่าน/เขียน
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 117
- ยกเลิกการตั้งค่าบัฟเฟอร์เวิร์กเทกซ์
- ยกเลิกการตั้งค่ากลุ่มการเชื่อมโยง
- ซ่อนข้อผิดพลาดจากการสร้างไปป์ไลน์แบบแอซิงค์เมื่ออุปกรณ์สูญหาย
- การอัปเดตการสร้างโมดูล Shader ของ SPIR-V
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- การแคชไปป์ไลน์ที่มีเลย์เอาต์ที่สร้างขึ้นโดยอัตโนมัติ
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 116
- การผสานรวม WebCodecs
- อุปกรณ์ที่สูญหายที่ GPUAdapter
requestDevice()
แสดง - เล่นวิดีโอได้อย่างราบรื่นหากมีการเรียกใช้
importExternalTexture()
- การปฏิบัติตามข้อกำหนด
- การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาแอป
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 115
- ส่วนขยายภาษา WGSL ที่รองรับ
- การรองรับ Direct3D 11 แบบทดลอง
- ใช้ GPU แบบแยกต่างหากโดยค่าเริ่มต้นเมื่อใช้แหล่งจ่ายไฟ AC
- การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาแอป
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 114
- เพิ่มประสิทธิภาพ JavaScript
- getCurrentTexture() ใน Canvas ที่ไม่ได้กําหนดค่าจะแสดงข้อผิดพลาด InvalidStateError
- ข้อมูลอัปเดตเกี่ยวกับ WGSL
- ข้อมูลอัปเดตเมื่อรุ่งเช้า