การทดสอบกลุ่มย่อย
ฟีเจอร์กลุ่มย่อยจะเปิดใช้การทำงานแบบขนานระดับ SIMD ซึ่งช่วยให้เธรดภายในกลุ่มสื่อสารและดำเนินการทางคณิตศาสตร์แบบรวมได้ (เช่น การคำนวณผลรวมของตัวเลข 16 รายการ) ทำให้ได้รูปแบบการแชร์ข้อมูลข้ามชุดข้อความที่มีประสิทธิภาพสูง
การใช้งาน proposal ของกลุ่มย่อยขั้นต่ำพร้อมให้ใช้งานแล้วสำหรับการทดสอบในเครื่องหลังการตั้งค่าสถานะ "การรองรับ WebGPU ที่ไม่เป็นอันตราย" ที่ chrome://flags/#enable-unsafe-webgpu
นอกจากนี้ คุณยังลองใช้กลุ่มย่อยในเว็บไซต์กับผู้ใช้จริงได้โดยลงชื่อสมัครใช้ช่วงทดลองใช้เวอร์ชันที่ใช้งานจริง อ่านเริ่มต้นใช้งานการทดสอบต้นทางเพื่อดูวิธีการเตรียมเว็บไซต์ให้พร้อมใช้การทดสอบต้นทาง ช่วงทดลองใช้จากต้นทางจะเริ่มต้นจาก Chrome 128 ถึง 131 (สิ้นสุดวันที่ 19 กุมภาพันธ์ 2025) ดูความตั้งใจที่จะทดสอบ
เมื่อฟีเจอร์ "subgroups"
พร้อมใช้งานใน GPUAdapter
แล้ว ให้ขอ GPUDevice
ที่มีฟีเจอร์นี้เพื่อรับการสนับสนุนกลุ่มย่อยใน WGSL และตรวจสอบขีดจํากัด minSubgroupSize
และ maxSubgroupSize
นอกจากนี้ คุณยังต้องเปิดใช้ส่วนขยายนี้ในโค้ด WGSL อย่างชัดแจ้งด้วย enable subgroups;
เมื่อเปิดใช้แล้ว คุณจะได้รับสิทธิ์เข้าถึงฟีเจอร์เพิ่มเติมต่อไปนี้
subgroup_invocation_id
: ค่าในตัวสำหรับดัชนีของชุดข้อความภายในกลุ่มย่อยsubgroup_size
: ค่าในตัวสำหรับการเข้าถึงขนาดกลุ่มย่อยsubgroupBallot(value)
: แสดงผลชุดของช่องบิตซึ่งบิตที่ตรงกับsubgroup_invocation_id
คือ 1 หากvalue
เป็นจริงสำหรับการเรียกใช้ที่ทำงานอยู่นั้น และจะแสดงผลเป็น 0 ในกรณีอื่นๆsubgroupBroadcast(value, id)
: ออกอากาศvalue
จากคําเรียกที่มีsubgroup_invocation_id
ตรงกับid
ไปยังคําเรียกทั้งหมดภายในกลุ่มย่อย หมายเหตุ:id
ต้องเป็นค่าคงที่เวลาคอมไพล์
ฟังก์ชันในตัวอื่นๆ เช่น subgroupAdd
, subgroupAll
, subgroupElect
, subgroupShuffle
จะเพิ่มเข้ามาในอนาคต ดูปัญหา 354738715
หากต้องการอนุญาตการดำเนินการ f16 ในกลุ่มย่อย ให้ขอ GPUDevice
ที่มีฟีเจอร์ "subgroups"
, "subgroups-f16"
และ "shader-f16"
จากนั้นเปิดใช้ในโค้ด WGSL ด้วย enable f16, subgroups, subgroups_f16;
ข้อมูลโค้ดต่อไปนี้เป็นพื้นฐานในการทดลองและค้นพบศักยภาพของกลุ่มย่อย
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
ลดการให้น้ำหนักพิเศษในการตั้งค่าสำหรับเส้นและจุด
การเปลี่ยนแปลงข้อมูลจำเพาะของ WebGPU ทำให้เป็นข้อผิดพลาดในการตรวจสอบความถูกต้องในการตั้งค่า depthBias
, depthBiasSlopeScale
และ depthBiasClamp
เป็นค่าที่ไม่ใช่ 0 เมื่อโทโพโลยีสำหรับไปป์ไลน์การแสดงผลเป็นชนิดเส้นหรือประเภทจุด ระบบจะแสดงคำเตือนในคอนโซลเครื่องมือสำหรับนักพัฒนาเว็บเกี่ยวกับการตรวจสอบที่กําลังจะเกิดขึ้นนี้ และบังคับให้ค่าเป็น 0 ในกรณีเหล่านี้เพื่อให้นักพัฒนาแอปมีเวลาเพียงพอในการอัปเดตโค้ด ดูปัญหา 352567424
ซ่อนคำเตือนข้อผิดพลาดที่ไม่ได้บันทึกไว้สำหรับ DevTools หาก preventDefault
ในคอนโซลเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ คำเตือนสําหรับเหตุการณ์ uncapturederror
จะไม่แสดงอีกต่อไปหากมีการลงทะเบียน Listener เหตุการณ์สําหรับ uncapturederror
และมีการเรียกใช้เมธอดเหตุการณ์ preventDefault()
ภายใน Callback ของ Listener เหตุการณ์ ลักษณะการทํางานนี้ตรงกับการจัดการเหตุการณ์ใน JavaScript โปรดดูตัวอย่างต่อไปนี้และปัญหา 40263619
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
การสุ่มตัวอย่างแบบอินเตอร์โพเลทของ WGSL ก่อนและแบบใดแบบหนึ่ง
แอตทริบิวต์ WGSL interpolate
ช่วยให้คุณจัดการการอินเตอร์โพเลชันข้อมูล IO ที่ผู้ใช้กำหนดได้ ในตอนนี้ พารามิเตอร์การสุ่มตัวอย่างแบบช่วงใหม่ first
(ค่าเริ่มต้น) และ either
จะช่วยให้คุณควบคุมเพิ่มเติมได้ โดย first
จะใช้ค่าจากจุดยอดมุมแรกของดั้งเดิม ในขณะที่ either
อนุญาตให้ใช้จุดยอดมุมแรกหรือจุดสุดท้าย ดูปัญหา 340278447
การอัปเดต Dawn
การติดตั้งใช้งาน WGPUFuture ของ Dawn เพื่อจัดการการดำเนินการแบบไม่พร้อมกันเสร็จสมบูรณ์แล้ว แนวคิดหลัก ได้แก่ wgpuInstanceProcessEvents สำหรับการประมวลผลเหตุการณ์แบบมีโอกาส และ WGPUCallbackMode สำหรับการกําหนดตําแหน่งการเรียกกลับ WGPUFuture หมายถึงเหตุการณ์ที่เกิดขึ้นเพียงครั้งเดียวซึ่งมีอายุการใช้งานแบบไม่จำกัด และ wgpuInstanceWaitAny จะรอให้การดำเนินการในอนาคตเสร็จสมบูรณ์หรือรอให้หมดเวลา ดูปัญหา 42240932
ตอนนี้ Surface::GetCapabilities()
ไม่ได้รายงานค่า CompositeAlphaMode::Auto
รหัสดังกล่าวยังคงใช้งานได้และเทียบเท่ากับ Surface::GetCapabilities().alphaMode[0]
โปรดดูปัญหา 292
ตอนนี้แบ็กเอนด์ OpenGL รองรับ Surface
ด้วย blit แบบพลิก Y สําหรับการเรียก Present()
แต่ละครั้ง ดูปัญหา 344814083
เลิกใช้งานเมธอด Adapter::GetProperties()
แล้วเพื่อใช้ Adapter::GetInfo()
แทน
Jaswant ผู้มีส่วนร่วมภายนอกได้เขียนไฟล์ CMake ทั้งหมดขึ้นใหม่ ทำให้อัปเดตได้ง่ายขึ้นและอนุญาตให้สร้างก่อนการคอมไพล์ได้ ดูคู่มือเริ่มใช้งานฉบับย่อเพื่อใช้ Dawn ในโปรเจ็กต์ CMake
ข้อมูลนี้เป็นเพียงไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด
มีอะไรใหม่ใน WebGPU
รายการทุกอย่างที่ครอบคลุมในชุดมีอะไรใหม่ใน WebGPU
Chrome 131
- ระยะห่างของคลิปใน WGSL
- GPUCanvasContext getConfiguration()
- องค์ประกอบพื้นฐานของจุดและเส้นต้องไม่มีอคติด้านความลึก
- ฟังก์ชันการสแกนแบบรวมในตัวสำหรับกลุ่มย่อย
- การรองรับการดึงข้อมูลแบบหลายดึงข้อมูลโดยอ้อมในขั้นทดลอง
- ตัวเลือกการรวบรวมโมดูล Shader คณิตศาสตร์แบบเข้มงวด
- นํา GPUAdapter requestAdapterInfo() ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 130
- การผสมผสานแหล่งที่มาแบบคู่
- การปรับปรุงเวลาคอมไพล์ Shader ใน Metal
- การเลิกใช้งาน requestAdapterInfo() ของ GPUAdapter
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 129
- การรองรับ HDR ด้วยโหมดการปรับโทนสีของ Canvas
- การรองรับกลุ่มย่อยที่เพิ่มขึ้น
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 128
- การทดสอบกับกลุ่มย่อย
- เลิกใช้งานการตั้งค่าความเอียงของภาพสำหรับเส้นและจุด
- ซ่อนคำเตือนข้อผิดพลาดของเครื่องมือสำหรับนักพัฒนาเว็บที่ไม่ได้บันทึกไว้หาก preventDefault
- การสุ่มตัวอย่างแบบสอดแทรกของ WGSL ก่อนหรือแบบใดแบบหนึ่ง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 127
- การรองรับ OpenGL ES ใน Android แบบทดลอง
- แอตทริบิวต์ข้อมูล GPUAdapter
- การปรับปรุงความสามารถในการทำงานร่วมกันของ WebAssembly
- ข้อผิดพลาดเกี่ยวกับโปรแกรมเข้ารหัสคําสั่งที่ปรับปรุงแล้ว
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 126
- เพิ่มขีดจํากัด maxTextureArrayLayers
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สำหรับแบ็กเอนด์ Vulkan
- การปรับปรุงเวลาคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 125
Chrome 124
- พื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและแบบอ่านและเขียน
- การสนับสนุนของ Service Worker และผู้ปฏิบัติงานที่แชร์
- แอตทริบิวต์ข้อมูลอะแดปเตอร์ใหม่
- แก้ไขข้อบกพร่อง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 123
- การรองรับฟังก์ชันในตัวของ DP4a ใน WGSL
- พารามิเตอร์พอยน์เตอร์ที่ไม่จํากัดใน WGSL
- น้ำตาลทางไวยากรณ์สำหรับลดการอ้างอิงองค์ประกอบใน WGSL
- แยกสถานะอ่านอย่างเดียวสำหรับแสตนซิลและมิติความลึก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 122
- ขยายการเข้าถึงด้วยโหมดความเข้ากันได้ (ฟีเจอร์ที่อยู่ระหว่างการพัฒนา)
- เพิ่มขีดจํากัด maxVertexAttributes
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 121
- รองรับ WebGPU ใน Android
- ใช้ DXC แทน FXC สำหรับการคอมไพล์ตัวปรับแสงเงาใน Windows
- การค้นหาการประทับเวลาในการประมวลผลและแสดงผลบัตรผ่าน
- จุดแรกเข้าเริ่มต้นไปยังโมดูล Shader
- รองรับ display-p3 เป็นพื้นที่สี GPUExternalTexture
- ข้อมูลกองหน่วยความจำ
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 120
- การรองรับค่าทศนิยม 16 บิตใน WGSL
- ก้าวข้ามขีดจำกัด
- การเปลี่ยนแปลงสถานะความลึกของสเตนซิล
- การอัปเดตข้อมูลอะแดปเตอร์
- การแปลงค่าการค้นหาการประทับเวลา
- ฟีเจอร์ทำความสะอาดช่วงฤดูใบไม้ผลิ
Chrome 119
- พื้นผิวแบบจำนวนลอยตัว 32 บิตที่กรองได้
- รูปแบบเวิร์กเท็กซ์ unorm10-10-10-2
- รูปแบบพื้นผิว rgb10a2uint
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
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
- การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาแอป
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 114
- เพิ่มประสิทธิภาพ JavaScript
- getCurrentTexture() ใน Canvas ที่ไม่ได้กําหนดค่าจะแสดงข้อผิดพลาด InvalidStateError
- ข้อมูลอัปเดตเกี่ยวกับ WGSL
- ข้อมูลอัปเดตเมื่อรุ่งเช้า