การทดสอบกับกลุ่มย่อย
ฟีเจอร์กลุ่มย่อยช่วยให้เกิดการทำงานแบบขนานระดับ SIMD ซึ่งช่วยให้เธรดภายในกลุ่มสื่อสารและดำเนินการทางคณิตศาสตร์ร่วมกันได้ (เช่น การคำนวณผลรวมของตัวเลข 16 ตัว) ซึ่งเป็นรูปแบบการแชร์ข้อมูลข้ามเธรดที่มีประสิทธิภาพสูง
การใช้งานข้อเสนอเกี่ยวกับกลุ่มย่อยแบบน้อยที่สุดพร้อมให้ทดสอบในพื้นที่แล้วโดยอยู่หลังฟีเจอร์แฟล็ก "การรองรับ WebGPU ที่ไม่ปลอดภัย" ที่ chrome://flags/#enable-unsafe-webgpu
นอกจากนี้ คุณยังลองใช้กลุ่มย่อยในเว็บไซต์กับผู้ใช้จริงได้โดยลงชื่อสมัครใช้การทดลองใช้ต้นทาง อ่านเริ่มต้นใช้งาน Origin Trials เพื่อดูวิธีการเตรียมเว็บไซต์ให้พร้อมใช้งาน Origin Trials ช่วงทดลองใช้จากต้นทางจะเริ่มตั้งแต่ 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
เป็นค่าที่ไม่ใช่ศูนย์เมื่อโทโพโลยีสำหรับไปป์ไลน์การแสดงผลเป็นประเภทเส้นหรือจุดถือเป็นข้อผิดพลาดในการตรวจสอบ เราจะแสดงคำเตือนในคอนโซล DevTools เกี่ยวกับการตรวจสอบที่กำลังจะเกิดขึ้นนี้ พร้อมทั้งบังคับให้ค่าเป็น 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 จะทำการสุ่มตัวอย่างแบบอินเทอร์โพเลชันก่อน แล้ว
แอตทริบิวต์ interpolate
WGSL ช่วยให้คุณจัดการการประมาณค่าข้อมูล 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
พร้อมการส่งผ่านข้อมูลแบบพลิกแกน y สำหรับการเรียกใช้ Present()
แต่ละครั้งแล้ว ดูปัญหา 344814083
เราเลิกใช้งานเมธอด Adapter::GetProperties()
แล้ว ให้ใช้ Adapter::GetInfo()
แทน
Jaswant ซึ่งเป็นผู้มีส่วนร่วมภายนอกได้เขียนไฟล์ CMake ทั้งหมดใหม่ ทำให้ง่ายต่อการอัปเดตและอนุญาตให้มีการสร้างล่วงหน้า ดูคู่มือเริ่มใช้งานฉบับย่อสำหรับการใช้ Dawn ในโปรเจ็กต์ CMake
ซึ่งเป็นเพียงไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด
มีอะไรใหม่ใน WebGPU
รายการทุกอย่างที่ครอบคลุมในซีรีส์มีอะไรใหม่ใน WebGPU
Chrome 140
- คำขอของอุปกรณ์จะใช้ตัวดัดแปลง
- รูปแบบย่อสำหรับการใช้พื้นผิวในที่ที่ใช้มุมมองพื้นผิว
- textureSampleLevel ของ WGSL รองรับพื้นผิว 1 มิติ
- เลิกใช้งานการใช้พื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียว bgra8unorm
- นำแอตทริบิวต์ isFallbackAdapter ของ GPUAdapter ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 139
- รองรับพื้นผิว 3 มิติสำหรับรูปแบบที่บีบอัด BC และ ASTC
- ฟีเจอร์ใหม่ "ฟีเจอร์หลักและขีดจำกัด"
- การทดลองใช้แหล่งที่มาสำหรับโหมดความเข้ากันได้ของ WebGPU
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 138
- คำย่อสำหรับการใช้บัฟเฟอร์เป็นทรัพยากรที่เชื่อมโยง
- การเปลี่ยนแปลงข้อกำหนดด้านขนาดสำหรับบัฟเฟอร์ที่แมปไว้ตอนสร้าง
- รายงานสถาปัตยกรรมสำหรับ GPU รุ่นล่าสุด
- เลิกใช้งานแอตทริบิวต์ isFallbackAdapter ของ GPUAdapter
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 137
- ใช้มุมมองพื้นผิวสำหรับการเชื่อมโยง ExternalTexture
- คัดลอกบัฟเฟอร์โดยไม่ต้องระบุออฟเซ็ตและขนาด
- WGSL workgroupUniformLoad โดยใช้พอยน์เตอร์ไปยังอะตอม
- แอตทริบิวต์ powerPreference ของ GPUAdapterInfo
- นำแอตทริบิวต์ compatibilityMode ของ GPURequestAdapterOptions ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 136
- แอตทริบิวต์ isFallbackAdapter ของ GPUAdapterInfo
- การปรับปรุงเวลาในการคอมไพล์ Shader ใน D3D12
- บันทึกและคัดลอกรูปภาพแคนวาส
- ข้อจำกัดของโหมดความเข้ากันได้ของ Lift
- ข้อมูลอัปเดตเกี่ยวกับ 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
- GPUCanvasContext getConfiguration()
- Primitive ของจุดและเส้นต้องไม่มีการปรับความลึก
- ฟังก์ชันการสแกนแบบรวมสำหรับกลุ่มย่อย
- การรองรับการวาดหลายรายการแบบอ้อมในเวอร์ชันทดลอง
- ตัวเลือกการคอมไพล์โมดูล Shader แบบเข้มงวด
- นำ requestAdapterInfo() ของ GPUAdapter ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 130
- การผสมผสานแหล่งที่มา 2 แหล่ง
- การปรับปรุงเวลาในการคอมไพล์ Shader บน Metal
- การเลิกใช้งาน requestAdapterInfo() ของ GPUAdapter
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 129
- รองรับ HDR ด้วยโหมดการแมปโทนสีของ Canvas
- การสนับสนุนกลุ่มย่อยที่เพิ่มขึ้น
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 128
- การทดลองใช้กลุ่มย่อย
- เลิกใช้งานการตั้งค่าอคติของความลึกสำหรับเส้นและจุด
- ซ่อนคำเตือนในเครื่องมือสำหรับนักพัฒนาเว็บเกี่ยวกับข้อผิดพลาดที่ไม่ได้บันทึกหาก preventDefault
- WGSL interpolate sampling first and either
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 127
- การรองรับ OpenGL ES ใน Android เวอร์ชันทดลอง
- แอตทริบิวต์ข้อมูล GPUAdapter
- การปรับปรุงการทำงานร่วมกันของ WebAssembly
- ข้อผิดพลาดของเครื่องมือเข้ารหัสคำสั่งที่ปรับปรุงแล้ว
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 126
- เพิ่มขีดจำกัด maxTextureArrayLayers
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สำหรับแบ็กเอนด์ Vulkan
- การปรับปรุงเวลาการคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 125
- กลุ่มย่อย (ฟีเจอร์ที่อยู่ระหว่างการพัฒนา)
- แสดงผลไปยังชิ้นส่วนของพื้นผิว 3 มิติ
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 124
- เท็กซ์เจอร์พื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและแบบอ่านและเขียน
- การรองรับ Service Worker และ Shared Worker
- แอตทริบิวต์ข้อมูลอะแดปเตอร์ใหม่
- แก้ไขข้อบกพร่อง
- ข้อมูลอัปเดตเกี่ยวกับ 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
- ก้าวข้ามขีดจำกัด
- การเปลี่ยนแปลงสถานะของสเตนซิลความลึก
- การอัปเดตข้อมูลอะแดปเตอร์
- การหาปริมาณการค้นหาการประทับเวลา
- ฟีเจอร์การทำความสะอาดช่วงฤดูใบไม้ผลิ
Chrome 119
- เท็กซ์เจอร์แบบลอยตัว 32 บิตที่กรองได้
- รูปแบบจุดยอด unorm10-10-10-2
- รูปแบบพื้นผิว rgb10a2uint
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 118
- การรองรับ HTMLImageElement และ ImageData ใน
copyExternalImageToTexture()
- การรองรับแบบทดลองสำหรับเท็กซ์เจอร์พื้นที่เก็บข้อมูลแบบอ่าน-เขียนและแบบอ่านอย่างเดียว
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 117
- Unset vertex buffer
- ยกเลิกการตั้งค่ากลุ่มที่เชื่อมโยง
- ปิดเสียงข้อผิดพลาดจากการสร้างไปป์ไลน์แบบไม่พร้อมกันเมื่ออุปกรณ์สูญหาย
- ข้อมูลอัปเดตเกี่ยวกับการสร้างโมดูล 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