การรองรับฟังก์ชันในตัวของ DP4a ใน WGSL
DP4a (Dot Product of 4 Elements and Accumulate) หมายถึงชุดคำสั่ง GPU ที่ใช้กันโดยทั่วไปในการอนุมานการเรียนรู้เชิงลึกสำหรับการหาปริมาณ โดยจะดำเนินการดอทโปรดักต์จำนวนเต็ม 8 บิตอย่างมีประสิทธิภาพเพื่อเร่งการคำนวณโมเดลที่แปลงเป็นจำนวนเต็ม int8 ดังกล่าว ซึ่งช่วยประหยัดหน่วยความจำและแบนด์วิดท์เครือข่ายได้ (สูงสุด 75%) และปรับปรุงประสิทธิภาพของโมเดลแมชชีนเลิร์นนิงในการอนุมานเมื่อเทียบกับเวอร์ชัน f32 ด้วยเหตุนี้ ปัจจุบันจึงมีการใช้งานอย่างแพร่หลายในเฟรมเวิร์ก AI ยอดนิยมหลายรายการ
เมื่อมี"packed_4x8_integer_dot_product"
ส่วนขยายภาษา WGSL ใน navigator.gpu.wgslLanguageFeatures
ตอนนี้คุณสามารถใช้สเกลาร์จำนวนเต็ม 32 บิตที่แพ็กเวกเตอร์ 4 องค์ประกอบของจำนวนเต็ม 8 บิตเป็นอินพุตสำหรับคำสั่งดอทโปรดักต์ในโค้ด Shader ของ WGSL ด้วยฟังก์ชันในตัว dot4U8Packed
และ dot4I8Packed
นอกจากนี้ คุณยังใช้คำสั่งการแพ็กและแกะแพ็กกับเวกเตอร์ 4 องค์ประกอบที่แพ็กแล้วของจำนวนเต็ม 8 บิตได้ด้วยฟังก์ชันในตัวของ WGSL pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
และ unpack4xU8
เราขอแนะนำให้ใช้ requires-directive เพื่อส่งสัญญาณถึงความเป็นไปได้ที่จะไม่สามารถพกพาได้ด้วย requires packed_4x8_integer_dot_product;
ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้และissue tint:1497
if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
throw new Error(`DP4a built-in functions are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires packed_4x8_integer_dot_product;
fn main() {
const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
}`,
});
ขอขอบคุณเป็นพิเศษต่อทีมกราฟิกบนเว็บของ Intel ในเซี่ยงไฮ้ที่ขับเคลื่อนข้อกำหนดและการใช้งานนี้จนเสร็จสมบูรณ์
พารามิเตอร์พอยน์เตอร์ที่ไม่จำกัดใน WGSL
"unrestricted_pointer_parameters"
ส่วนขยายภาษา WGSL จะลดข้อจำกัดเกี่ยวกับพอยน์เตอร์ที่ส่งไปยังฟังก์ชัน WGSL ได้
ตัวชี้พารามิเตอร์ของช่องที่อยู่
storage
,uniform
และworkgroup
ไปยังฟังก์ชันที่ผู้ใช้ประกาศการส่งพอยน์เตอร์ไปยังสมาชิกโครงสร้างและองค์ประกอบอาร์เรย์ไปยังฟังก์ชันที่ผู้ใช้ประกาศ
ดูข้อมูลเพิ่มเติมได้ที่พอยน์เตอร์เป็นพารามิเตอร์ฟังก์ชัน | ทัวร์ WGSL
ฟีเจอร์นี้ตรวจหาได้โดยใช้ navigator.gpu.wgslLanguageFeatures
เราขอแนะนำให้ใช้ requires-directive เสมอเพื่อส่งสัญญาณถึงความเป็นไปได้ที่จะไม่สามารถพกพาได้ด้วย requires unrestricted_pointer_parameters;
ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้ การเปลี่ยนแปลงข้อกำหนด WGSL และปัญหา tint:2053
if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
throw new Error(`Unrestricted pointer parameters are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires unrestricted_pointer_parameters;
@group(0) @binding(0) var<storage, read_write> S : i32;
fn func(pointer : ptr<storage, i32, read_write>) {
*pointer = 42;
}
@compute @workgroup_size(1)
fn main() {
func(&S);
}`
});
ไวยากรณ์ที่ช่วยให้การอ้างอิงคอมโพสิตใน WGSL ง่ายขึ้น
เมื่อ"pointer_composite_access"
ส่วนขยายภาษาWGSL อยู่ใน navigator.gpu.wgslLanguageFeatures
โค้ด Shader WGSL จะรองรับการเข้าถึงคอมโพเนนต์ของประเภทข้อมูลที่ซับซ้อนโดยใช้ไวยากรณ์จุด (.
) เดียวกัน ไม่ว่าคุณจะทำงานกับข้อมูลโดยตรงหรือใช้พอยน์เตอร์ไปยังข้อมูลนั้น วิธีการมีดังนี้
หาก
foo
เป็นตัวชี้foo.bar
จะเป็นวิธีที่สะดวกกว่าในการเขียน(*foo).bar
โดยปกติแล้วจะต้องมีเครื่องหมายดอกจัน (*
) เพื่อเปลี่ยนพอยน์เตอร์ให้เป็น "การอ้างอิง" ที่สามารถยกเลิกการอ้างอิงได้ แต่ตอนนี้ทั้งพอยน์เตอร์และการอ้างอิงมีความคล้ายคลึงกันมากขึ้นและเกือบจะใช้แทนกันได้หาก
foo
ไม่ใช่พอยน์เตอร์: ตัวดำเนินการจุด (.
) จะทำงานเหมือนกับที่คุณเคยใช้เพื่อเข้าถึงสมาชิกโดยตรง
ในทำนองเดียวกัน หาก pa
เป็นตัวชี้ที่จัดเก็บที่อยู่เริ่มต้นของอาร์เรย์ การใช้ pa[i]
จะช่วยให้คุณเข้าถึงตำแหน่งหน่วยความจำโดยตรงซึ่งจัดเก็บองค์ประกอบที่ 'i
ของอาร์เรย์นั้น
เราขอแนะนำให้ใช้ requires-directive เพื่อส่งสัญญาณถึงความเป็นไปได้ที่จะไม่สามารถพกพาได้ด้วย requires pointer_composite_access;
ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้และออกสี:2113
if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
throw new Error(`Pointer composite access is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires pointer_composite_access;
fn main() {
var a = vec3f();
let p : ptr<function, vec3f> = &a;
let r1 = (*p).x; // always valid.
let r2 = p.x; // requires pointer composite access.
}`
});
สถานะแบบอ่านอย่างเดียวแยกกันสำหรับด้านลายฉลุและความลึก
ก่อนหน้านี้ ไฟล์แนบสเตนซิลเชิงลึกแบบอ่านอย่างเดียวใน Render Pass ต้องมีทั้ง 2 ด้าน (ความลึกและสเตนซิล) เป็นแบบอ่านอย่างเดียว ข้อจำกัดนี้ได้รับการยกเลิกแล้ว ตอนนี้คุณสามารถใช้ลักษณะความลึกในโหมดอ่านอย่างเดียวได้ เช่น สำหรับการติดตามเงาที่สัมผัสกัน ขณะที่เขียนบัฟเฟอร์ลายฉลุเพื่อระบุพิกเซลสำหรับการประมวลผลเพิ่มเติม ดูปัญหา dawn:2146
ข้อมูลอัปเดตเกี่ยวกับ Dawn
ตอนนี้ระบบจะเรียกใช้การเรียกกลับข้อผิดพลาดที่ไม่ได้บันทึกซึ่งตั้งค่าด้วย wgpuDeviceSetUncapturedErrorCallback()
ทันทีเมื่อเกิดข้อผิดพลาด นี่คือสิ่งที่นักพัฒนาแอปคาดหวังและต้องการสำหรับการแก้ไขข้อบกพร่องอย่างสม่ำเสมอ ดูการเปลี่ยนแปลง dawn:173620
มีการใช้เมธอด wgpuSurfaceGetPreferredFormat()
จาก webgpu.h API แล้ว ดูปัญหา dawn:1362
ซึ่งเป็นเพียงไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด
มีอะไรใหม่ใน 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