รองรับ HDR ด้วยโหมดการปรับโทนสีแคนวาส
นักพัฒนาเว็บมีตัวเลือกที่จํากัดในการส่งเนื้อหา HDR โดยอาศัยองค์ประกอบ <img>
และ <video>
เป็นหลัก อย่างไรก็ตาม องค์ประกอบ <canvas>
จะยังคงจำกัดไว้สำหรับ SDR การสร้างเนื้อหา HDR แบบไดนามิกภายใน Canvas จำเป็นต้องมีการเข้ารหัสเนื้อหาเป็นภาพ HDR ก่อนแสดง (ดูตัวอย่างได้ที่เดโมนี้)
ตอนนี้พารามิเตอร์ GPUCanvasToneMappingMode
ใหม่ในการกําหนดค่าแคนวาส 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)
: แสดงผลการดำเนินการvalue
ที่ใช้งานอยู่ทั้งหมดแบบไบนารี AND ในกลุ่มย่อย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
จากการเรียกใช้ Quad ที่มีรหัสเท่ากับ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
- ข้อมูลอัปเดตเกี่ยวกับ 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