การทดสอบกลุ่มย่อย
ฟีเจอร์กลุ่มย่อยเปิดใช้การทำงานแบบขนานระดับ 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
ซ่อนคำเตือนข้อผิดพลาดที่เครื่องมือสำหรับนักพัฒนาเว็บไม่ได้บันทึกไว้หาก 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
- การรองรับกลุ่มย่อยที่เพิ่มขึ้น
- ข้อมูลอัปเดตเกี่ยวกับ 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