การทดสอบกับกลุ่มย่อย
ฟีเจอร์กลุ่มย่อยเปิดใช้การทำงานพร้อมกันระดับ SIMD ทำให้ชุดข้อความภายในกลุ่มสื่อสารและดำเนินการทางคณิตศาสตร์ร่วมกันได้ (เช่น การคำนวณผลรวมของตัวเลข 16 ตัว) ทำให้ได้รูปแบบการแชร์ข้อมูลข้ามชุดข้อความที่มีประสิทธิภาพสูง
การนำข้อเสนอกลุ่มย่อยมาใช้เพียงเล็กน้อยสำหรับการทดสอบในเครื่องที่อยู่เบื้องหลัง "การสนับสนุน 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 ก่อนและแบบใดแบบหนึ่ง
แอตทริบิวต์ interpolate
ของ WGSL ช่วยให้คุณจัดการการประมาณช่วงข้อมูล IO ที่ผู้ใช้กำหนดได้ ในตอนนี้ พารามิเตอร์การสุ่มตัวอย่างแบบช่วงใหม่ first
(ค่าเริ่มต้น) และ either
จะช่วยให้คุณควบคุมเพิ่มเติมได้ โดย first
จะใช้ค่าจากจุดยอดมุมแรกของดั้งเดิม ในขณะที่ either
อนุญาตให้ใช้จุดยอดมุมแรกหรือจุดสุดท้าย ดูปัญหา 340278447
ข้อมูลอัปเดตรุ่งเช้า
การปรับใช้ WGPUFuture ของ Dawn เพื่อจัดการกับการดำเนินการที่ไม่พร้อมกันเสร็จสมบูรณ์แล้วในขณะนี้ แนวคิดหลัก ได้แก่ wgpuInstanceProcessEvents สำหรับการประมวลผลเหตุการณ์ตามโอกาส และ WGPUCallbackMode สำหรับกำหนดตำแหน่งของ Callback WGPUFuture แสดงถึงกิจกรรมแบบครั้งเดียวที่มีอายุการใช้งานไม่จำกัด และ wgpuInstanceWaitAny รอการเสร็จสิ้นในอนาคตหรือหมดเวลา ดูปัญหา 42240932
ขณะนี้ Surface::GetCapabilities()
ไม่รายงานค่า CompositeAlphaMode::Auto
บัตรยังคงใช้ได้และเทียบเท่ากับ Surface::GetCapabilities().alphaMode[0]
ดูปัญหา 292
ตอนนี้แบ็กเอนด์ OpenGL รองรับ Surface
พร้อม y- Flip สำหรับการเรียก Present()
แต่ละครั้งแล้ว ดูปัญหา 344814083
เมธอด Adapter::GetProperties()
เลิกใช้งานแล้วเพื่อใช้ Adapter::GetInfo()
Jaswant ซึ่งเป็นผู้จัดทำภายนอกได้เขียนไฟล์ CMake ทั้งหมดใหม่เพื่อให้อัปเดตได้ง่ายขึ้นและอนุญาตให้สร้างล่วงหน้าได้ ดูคู่มือเริ่มใช้งานฉบับย่อเพื่อใช้ Dawn ในโปรเจ็กต์ CMake
ซึ่งกล่าวถึงไฮไลต์สำคัญเพียงบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด
มีอะไรใหม่ใน WebGPU
รายการทั้งหมดที่กล่าวถึงในซีรีส์ What's New in WebGPU
Chrome 128
- การทดสอบกับกลุ่มย่อย
- ลดการให้น้ำหนักพิเศษในการตั้งค่าสำหรับเส้นและจุด
- ซ่อนคำเตือนข้อผิดพลาดที่ไม่ได้บันทึกไว้สำหรับ DevTools หาก preventDefault
- การสุ่มตัวอย่างแบบสอดแทรกของ WGSL ก่อนหรือแบบใดแบบหนึ่ง
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 127
- การทดสอบการรองรับ OpenGL ES บน Android
- แอตทริบิวต์ข้อมูลของ GPU
- การปรับปรุงการทำงานร่วมกันของ WebAssembly
- ข้อผิดพลาดของโปรแกรมเปลี่ยนไฟล์คำสั่งที่ปรับปรุงใหม่
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 126
- เพิ่มขีดจำกัด maxTextureArraydataLayer
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สำหรับแบ็กเอนด์ Vulkan
- ปรับปรุงเวลาคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 125
Chrome 124
- พื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่านอย่างเดียว
- การสนับสนุนของ Service Worker และผู้ปฏิบัติงานที่แชร์
- แอตทริบิวต์ข้อมูลอะแดปเตอร์ใหม่
- แก้ไขข้อบกพร่อง
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 123
- รองรับฟังก์ชัน DP4a ในตัวของ WGSL
- พารามิเตอร์ตัวชี้แบบไม่จำกัดใน WGSL
- น้ำตาลทางไวยากรณ์สำหรับลดการอ้างอิงองค์ประกอบใน WGSL
- แยกสถานะอ่านอย่างเดียวสำหรับลายฉลุและความลึก
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 122
- ขยายการเข้าถึงด้วยโหมดความเข้ากันได้ (ฟีเจอร์ที่กำลังพัฒนา)
- เพิ่มขีดจำกัด maxVertexAttributes
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 121
- รองรับ WebGPU ใน Android
- ใช้ DXC แทน FXC สำหรับการคอมไพล์ตัวปรับแสงเงาใน Windows
- การค้นหาการประทับเวลาในการประมวลผลและแสดงผลบัตรผ่าน
- จุดแรกเข้าเริ่มต้นสำหรับโมดูลตัวปรับเฉดสี
- รองรับ display-p3 เป็นพื้นที่สี GPUExternalTexture
- ข้อมูลฮีปหน่วยความจำ
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 120
- การรองรับค่าทศนิยม 16 บิตใน WGSL
- ก้าวข้ามขีดจำกัด
- การเปลี่ยนแปลงสถานะความลึกของลายฉลุ
- การอัปเดตข้อมูลอะแดปเตอร์
- การวัดปริมาณการค้นหาการประทับเวลา
- ฟีเจอร์ทำความสะอาดในฤดูใบไม้ผลิ
Chrome 119
- พื้นผิวแบบลอย 32 บิตที่กรองได้
- รูปแบบเวอร์เท็กซ์ unorm10-10-10-2
- รูปแบบพื้นผิวของrgb10a2uint
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 118
- การรองรับ HTMLImageElement และ ImageData ใน
copyExternalImageToTexture()
- เวอร์ชันทดลองสำหรับพื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่านอย่างเดียว
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 117
- ยกเลิกการตั้งค่าบัฟเฟอร์ Vertex
- ยกเลิกการตั้งค่ากลุ่มการเชื่อมโยง
- ปิดข้อผิดพลาดจากการสร้างไปป์ไลน์แบบไม่พร้อมกันเมื่ออุปกรณ์สูญหาย
- การอัปเดตการสร้างโมดูลตัวปรับแสงเงา SPIR-V
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ไปป์ไลน์การแคชที่มีเลย์เอาต์ที่สร้างขึ้นโดยอัตโนมัติ
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 116
- การผสานรวม WebCodecs
- อุปกรณ์ที่สูญหายส่งคืนโดย GPUAdapter
requestDevice()
- เล่นวิดีโอได้อย่างราบรื่นหากมีการเรียกใช้
importExternalTexture()
- ความสอดคล้องตามข้อกำหนด
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 115
- ส่วนขยายภาษา WGSL ที่รองรับ
- การสนับสนุนรุ่นทดลองสำหรับ Direct3D 11
- รับ GPU แบบแยกกันโดยค่าเริ่มต้นเมื่อใช้พลังงานจากไฟฟ้า AC
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 114
- เพิ่มประสิทธิภาพ JavaScript
- getCurrentTexture() ในผืนผ้าใบที่ไม่ได้กำหนดค่าไว้แสดงข้อผิดพลาดที่ไม่ถูกต้อง
- ข้อมูลอัปเดตเกี่ยวกับ WGSL
- ข้อมูลอัปเดตเมื่อรุ่งเช้า