การทดลองใช้กลุ่มย่อย
ฟีเจอร์กลุ่มย่อยช่วยให้เกิดการทำงานแบบขนานในระดับ SIMD ซึ่งช่วยให้เธรดภายในกลุ่มสื่อสารและดำเนินการทางคณิตศาสตร์ร่วมกันได้ (เช่น การคำนวณผลรวมของตัวเลข 16 ตัว) ซึ่งเป็นการแชร์ข้อมูลระหว่างเธรดที่มีประสิทธิภาพสูง
การใช้งานข้อเสนอแนะเกี่ยวกับกลุ่มย่อยแบบมินิมัลพร้อมให้ทดสอบในเครื่องแล้วโดยซ่อนไว้หลังแฟล็ก "Unsafe WebGPU Support" ที่ chrome://flags/#enable-unsafe-webgpu
นอกจากนี้ คุณยังลองใช้กลุ่มย่อยในเว็บไซต์กับผู้ใช้จริงได้ด้วยการลงชื่อสมัครใช้ช่วงทดลองใช้จากต้นทาง อ่าน คู่มือเริ่มต้นใช้งานช่วงทดลองใช้จากต้นทาง เพื่อดูวิธีการเตรียมเว็บไซต์ให้พร้อมสำหรับการใช้ช่วงทดลองใช้จากต้นทาง ช่วงทดลองใช้จากต้นทางจะเริ่มตั้งแต่ Chrome 128 ถึง 131 (สิ้นสุดวันที่ 19 กุมภาพันธ์ 2025) ดู Intent to Experiment
เมื่อฟีเจอร์ "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
ในคอนโซล DevTools ระบบจะไม่แสดงคำเตือนสำหรับเหตุการณ์ uncapturederror อีกต่อไป หากมีการลงทะเบียน Listener เหตุการณ์สำหรับ uncapturederror และมีการเรียกใช้เมธอด Event 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 interpolate sampling first and either
แอตทริบิวต์ WGSL interpolate ช่วยให้คุณจัดการการประมาณค่าข้อมูลอินพุต/เอาต์พุตที่ผู้ใช้กำหนด ตอนนี้พารามิเตอร์การประมาณค่าใหม่ first (ค่าเริ่มต้น) และ either จะช่วยให้คุณควบคุมได้มากขึ้น โดย first จะใช้ค่าจากจุดยอดแรกของรูปทรงเรขาคณิต ขณะที่ either อนุญาตให้ใช้จุดยอดแรกหรือจุดยอดสุดท้าย ดู ปัญหา 340278447
ข้อมูลอัปเดตเกี่ยวกับ Dawn
การใช้งาน WGPUFuture ของ Dawn เพื่อจัดการการดำเนินการแบบไม่พร้อมกันเสร็จสมบูรณ์แล้ว แนวคิดหลัก ได้แก่ wgpuInstanceProcessEvents สำหรับการประมวลผลเหตุการณ์แบบโอกาส และ WGPUCallbackMode สำหรับการกำหนดตำแหน่ง Callback 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 147-148
Chrome 146
- รองรับโหมดความเข้ากันได้ของ WebGPU ใน OpenGL ES 3.1
- ไฟล์แนบชั่วคราว
- ส่วนขยาย texture_and_sampler_let ของ WGSL
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 145
- ส่วนขยาย subgroup_uniformity ของ WGSL
- การแมปบัฟเฟอร์แบบซิงโครนัสเวอร์ชันทดลองใน Worker
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 144
- ส่วนขยาย subgroup_id ของ WGSL
- ส่วนขยาย uniform_buffer_standard_layout ของ WGSL
- WebGPU ใน Linux
- writeBuffer และ writeTexture เร็วขึ้น
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 143
- การสลับคอมโพเนนต์พื้นผิว
- นำการใช้งานพื้นที่จัดเก็บพื้นผิวแบบอ่านอย่างเดียว bgra8unorm ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 142
Chrome 141
- Tint IR เสร็จสมบูรณ์แล้ว
- การวิเคราะห์ช่วงจำนวนเต็มในคอมไพเลอร์ WGSL
- การอัปเดต SPIR-V 1.4 สำหรับแบ็กเอนด์ Vulkan
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 140
- คำขออุปกรณ์ใช้ Adapter
- ชวเลขสำหรับการใช้พื้นผิวในที่ที่ใช้มุมมองพื้นผิว
- textureSampleLevel ของ WGSL รองรับพื้นผิว 1 มิติ
- เลิกใช้งานการใช้งานพื้นที่จัดเก็บพื้นผิวแบบอ่านอย่างเดียว bgra8unorm
- นำแอตทริบิวต์ isFallbackAdapter ของ GPUAdapter ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 139
- การรองรับพื้นผิว 3 มิติสำหรับรูปแบบที่บีบอัด BC และ ASTC
- ฟีเจอร์ใหม่ "core-features-and-limits"
- ช่วงทดลองใช้จากต้นทางสำหรับโหมดความเข้ากันได้ของ WebGPU
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 138
- ชวเลขสำหรับการใช้บัฟเฟอร์เป็นทรัพยากรการผูก
- การเปลี่ยนแปลงข้อกำหนดด้านขนาดสำหรับบัฟเฟอร์ที่แมปเมื่อสร้าง
- รายงานสถาปัตยกรรมสำหรับ GPU ล่าสุด
- เลิกใช้งานแอตทริบิวต์ isFallbackAdapter ของ GPUAdapter
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 137
- ใช้มุมมองพื้นผิวสำหรับการผูก externalTexture
- คัดลอกบัฟเฟอร์โดยไม่ต้องระบุออฟเซ็ตและขนาด
- workgroupUniformLoad ของ WGSL โดยใช้ตัวชี้ไปยังอะตอม
- แอตทริบิวต์ powerPreference ของ GPUAdapterInfo
- นำแอตทริบิวต์ compatibilityMode ของ GPURequestAdapterOptions ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 136
- แอตทริบิวต์ isFallbackAdapter ของ GPUAdapterInfo
- การปรับปรุงเวลาคอมไพล์ Shader ใน D3D12
- บันทึกและคัดลอกรูปภาพ Canvas
- ยกเลิกข้อจำกัดของโหมดความเข้ากันได้
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 135
- อนุญาตให้สร้างเลย์เอาต์ไปป์ไลน์ด้วยเลย์เอาต์กลุ่มการผูกเป็น Null
- อนุญาตให้ Viewport ขยายออกไปนอกขอบเขตของเป้าหมายการแสดงผล
- เข้าถึงโหมดความเข้ากันได้เวอร์ชันทดลองใน Android ได้ง่ายขึ้น
- นำขีดจำกัด maxInterStageShaderComponents ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 134
- ปรับปรุงเวิร์กโหลดแมชชีนเลิร์นนิงด้วยกลุ่มย่อย
- นำการรองรับประเภทพื้นผิวที่กรองได้แบบลอยตัวออกเนื่องจากไม่สามารถผสมได้
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 133
- รูปแบบจุดยอด unorm8x4-bgra และรูปแบบจุดยอด 1 คอมโพเนนต์เพิ่มเติม
- อนุญาตให้ขอขีดจำกัดที่ไม่รู้จักด้วยค่าที่ไม่ได้กำหนด
- การเปลี่ยนแปลงกฎการจัดแนวของ WGSL
- การปรับปรุงประสิทธิภาพของ WGSL ด้วยการทิ้ง
- ใช้ displaySize ของ VideoFrame สำหรับพื้นผิวภายนอก
- จัดการรูปภาพที่มีการวางแนวที่ไม่ใช่ค่าเริ่มต้นโดยใช้ copyExternalImageToTexture
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- เปิดใช้โหมดความเข้ากันได้ด้วย featureLevel
- การล้างฟีเจอร์กลุ่มย่อยเวอร์ชันทดลอง
- เลิกใช้งานขีดจำกัด maxInterStageShaderComponents
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 132
- การใช้งานมุมมองพื้นผิว
- การผสมพื้นผิวแบบลอยตัว 32 บิต
- แอตทริบิวต์ adapterInfo ของ GPUDevice
- การกำหนดค่าบริบท Canvas ด้วยรูปแบบที่ไม่ถูกต้องจะทำให้เกิดข้อผิดพลาด JavaScript
- ข้อจำกัดของตัวกรองตัวอย่างในพื้นผิว
- การทดลองใช้กลุ่มย่อยแบบขยาย
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- การรองรับรูปแบบพื้นผิวแบบปกติ 16 บิตเวอร์ชันทดลอง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 131
- ระยะตัดใน WGSL
- getConfiguration() ของ GPUCanvasContext
- รูปทรงเรขาคณิตแบบจุดและเส้นต้องไม่มีความลึกของอคติ
- ฟังก์ชันบิวท์อินการสแกนแบบรวมสำหรับกลุ่มย่อย
- การรองรับ multi-draw indirect เวอร์ชันทดลอง
- ตัวเลือกการคอมไพล์โมดูล Shader แบบเข้มงวด
- นำ requestAdapterInfo() ของ GPUAdapter ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 130
- การผสมแหล่งที่มาคู่
- การปรับปรุงเวลาคอมไพล์ Shader ใน Metal
- การเลิกใช้งาน requestAdapterInfo() ของ GPUAdapter
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 129
Chrome 128
- การทดลองใช้กลุ่มย่อย
- เลิกใช้งานการตั้งค่าความลึกของอคติสำหรับเส้นและจุด
- ซ่อนคำเตือน DevTools เกี่ยวกับข้อผิดพลาดที่ไม่ได้ดักจับหากมีการเรียกใช้ preventDefault
- WGSL interpolate sampling first and either
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 127
- การรองรับ OpenGL ES ใน Android เวอร์ชันทดลอง
- แอตทริบิวต์ info ของ GPUAdapter
- การปรับปรุงการทำงานร่วมกันของ WebAssembly
- ข้อผิดพลาดของตัวเข้ารหัสคำสั่งที่ปรับปรุงแล้ว
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 126
- เพิ่มขีดจำกัด maxTextureArrayLayers
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สำหรับแบ็กเอนด์ Vulkan
- การปรับปรุงเวลาคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 125
Chrome 124
- พื้นที่จัดเก็บพื้นผิวแบบอ่านอย่างเดียวและอ่าน-เขียน
- การรองรับ Service Worker และ Shared Worker
- แอตทริบิวต์ข้อมูล Adapter ใหม่
- แก้ไขข้อบกพร่อง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 123
- การรองรับฟังก์ชันบิวท์อิน DP4a ใน WGSL
- พารามิเตอร์ตัวชี้ที่ไม่จำกัดใน WGSL
- ไวยากรณ์ที่กระชับสำหรับการอ้างอิงแบบคอมโพสิตใน WGSL
- สถานะแบบอ่านอย่างเดียวแยกกันสำหรับด้านการเขียนลายฉลุและความลึก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 122
- ขยายการเข้าถึงด้วยโหมดความเข้ากันได้ (ฟีเจอร์อยู่ระหว่างการพัฒนา)
- เพิ่มขีดจำกัด maxVertexAttributes
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 121
- รองรับ WebGPU ใน Android
- ใช้ DXC แทน FXC สำหรับการคอมไพล์ Shader ใน Windows
- การค้นหาการประทับเวลาในการคำนวณและการแสดงผล
- จุดเริ่มต้นเริ่มต้นสำหรับโมดูล Shader
- รองรับ display-p3 เป็นพื้นที่สี GPUExternalTexture
- ข้อมูลฮีปหน่วยความจำ
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 120
- การรองรับค่าจุดลอยตัว 16 บิตใน WGSL
- ก้าวข้ามขีดจำกัด
- การเปลี่ยนแปลงสถานะความลึก-ลายฉลุ
- ข้อมูลอัปเดตเกี่ยวกับ Adapter
- การหาปริมาณการค้นหาการประทับเวลา
- ฟีเจอร์การล้างข้อมูล
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