ตัดระยะทางใน WGSL
ระยะตัดช่วยให้คุณจำกัดระดับเสียงของคลิปดั้งเดิมด้วยช่องว่างครึ่งหนึ่งที่ผู้ใช้กำหนดในเอาต์พุตของขั้นตอนการประมวลผลจุดยอด การกำหนดระนาบการตัดของคุณเองจะช่วยให้ควบคุมสิ่งที่มองเห็นได้ในฉาก WebGPU ได้มากขึ้น เทคนิคนี้มีประโยชน์อย่างยิ่งสำหรับแอปพลิเคชัน เช่น ซอฟต์แวร์ CAD ซึ่งการควบคุมการแสดงภาพอย่างแม่นยำเป็นสิ่งสำคัญ
เมื่อ"clip-distances"ฟีเจอร์พร้อมใช้งานใน GPUAdapter ให้ขอ GPUDevice ที่มีฟีเจอร์นี้เพื่อรับการรองรับระยะตัดใน WGSL และเปิดใช้ส่วนขยายนี้อย่างชัดเจนในโค้ด WGSL ด้วย enable clip_distances; เมื่อเปิดใช้แล้ว คุณจะใช้clip_distancesอาร์เรย์ในตัวใน Vertex Shader ได้ อาร์เรย์นี้จะเก็บระยะทางไปยังระนาบตัดที่ผู้ใช้กำหนด
- ระยะคลิปเป็น 0 หมายความว่าจุดยอดอยู่บนระนาบ
- ระยะทางที่เป็นบวกหมายความว่าจุดยอดอยู่ภายในครึ่งพื้นที่ของคลิป (ด้านที่คุณต้องการเก็บไว้)
- ระยะทางที่เป็นค่าลบหมายความว่าจุดยอดอยู่นอกพื้นที่ครึ่งหนึ่งของการคลิป (ด้านที่คุณต้องการทิ้ง)
ดูข้อมูลโค้ดต่อไปนี้ รายการใน Chrome Status และปัญหา 358408571
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("clip-distances")) {
throw new Error("Clip distances support is not available");
}
// Explicitly request clip distances support.
const device = await adapter.requestDevice({
requiredFeatures: ["clip-distances"],
});
const vertexShaderModule = device.createShaderModule({ code: `
enable clip_distances;
struct VertexOut {
@builtin(clip_distances) my_clip_distances : array<f32, 1>,
@builtin(position) my_position : vec4f,
}
@vertex fn main() -> VertexOut {
var output : VertexOut;
output.my_clip_distances[0] = 1;
output.my_position = vec4f(0, 0, 0, 1);
return output;
}
`,
});
// Send the appropriate commands to the GPU...
GPUCanvasContext getConfiguration()
เมื่อเรียกใช้ GPUCanvasContext configure() ด้วยพจนานุกรมการกำหนดค่าแล้ว เมธอด GPUCanvasContext getConfiguration() จะช่วยให้คุณตรวจสอบการกำหนดค่าบริบท Canvas ได้ ซึ่งประกอบด้วยสมาชิก device, format, usage, viewFormats, colorSpace, toneMapping และ alphaMode ซึ่งมีประโยชน์สำหรับงานต่างๆ เช่น การตรวจสอบว่าเบราว์เซอร์รองรับ Canvas HDR หรือไม่ ดังที่แสดงในตัวอย่างอนุภาค (HDR) ดูข้อมูลโค้ดต่อไปนี้ รายการใน Chrome Status และปัญหา 370109829
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
// Configure the canvas for HDR.
context.configure({
device,
format: "rgba16float",
toneMapping: { mode: "extended" },
});
const configuration = context.getConfiguration();
if (configuration.toneMapping.mode === "extended") {
// The browser supports HDR canvas.
// Warning! The user still needs a HDR display to enjoy HDR content.
}
Primitive ของจุดและเส้นต้องไม่มีการปรับค่าความลึก
ตามที่ประกาศก่อนหน้านี้ ตอนนี้ข้อกำหนด WebGPU ทำให้การตั้งค่า depthBias, depthBiasSlopeScale และ depthBiasClamp เป็นค่าที่ไม่ใช่ 0 เมื่อโทโพโลยีสำหรับไปป์ไลน์การแสดงผลเป็นประเภทเส้นหรือจุดถือเป็นข้อผิดพลาดในการตรวจสอบ ดูปัญหา 352567424
ฟังก์ชันการสแกนแบบครอบคลุมที่ติดตั้งไว้สำหรับกลุ่มย่อย
เราได้เพิ่มฟังก์ชันในตัวของกลุ่มย่อยต่อไปนี้ในปัญหา 361330160 ซึ่งเป็นส่วนหนึ่งของการทดลองกลุ่มย่อย
subgroupInclusiveAdd(value): แสดงผลผลรวมการสแกนแบบรวมของคำขอเรียกใช้ที่ใช้งานอยู่ทั้งหมดvalues ในกลุ่มย่อยsubgroupInclusiveMul(value): แสดงผลการคูณแบบสแกนรวมของการเรียกใช้ที่ใช้งานอยู่ทั้งหมดvalues ในกลุ่มย่อย
การรองรับการวาดหลายรายการโดยอ้อมในเวอร์ชันทดลอง
ฟีเจอร์ GPU แบบอ้อมที่วาดหลายรายการช่วยให้คุณออกคำสั่งวาดหลายรายการได้ด้วยคำสั่ง GPU เดียว ซึ่งจะมีประโยชน์อย่างยิ่งในสถานการณ์ที่ต้องแสดงผลออบเจ็กต์จำนวนมาก เช่น ระบบอนุภาค การสร้างอินสแตนซ์ และฉากขนาดใหญ่ เมธอด drawIndirect() และ drawIndexedIndirect() GPURenderPassEncoder สามารถออกคำสั่งวาดภาพได้ครั้งละ 1 รายการจากภูมิภาคหนึ่งๆ ของบัฟเฟอร์ GPU เท่านั้น
จนกว่าฟีเจอร์ทดลองนี้จะได้มาตรฐาน ให้เปิดใช้ Flag "การรองรับ WebGPU ที่ไม่ปลอดภัย" ที่ chrome://flags/#enable-unsafe-webgpu เพื่อให้ฟีเจอร์นี้พร้อมใช้งานใน Chrome
เมื่อฟีเจอร์ GPU แบบไม่มาตรฐาน "chromium-experimental-multi-draw-indirect" พร้อมใช้งานใน GPUAdapter ให้ขอ GPUDevice ที่มีฟีเจอร์นี้ จากนั้นสร้าง GPUBuffer ที่มีGPUBufferUsage.INDIRECT usage เพื่อจัดเก็บการเรียกใช้การวาด คุณสามารถใช้ในภายหลังในเมธอด multiDrawIndirect() และ multiDrawIndexedIndirect() GPURenderPassEncoder ใหม่เพื่อออกคำสั่งวาดภายในการส่งผ่านการแสดงผล ดูข้อมูลโค้ดต่อไปนี้และปัญหา 356461286
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-multi-draw-indirect")) {
throw new Error("Experimental multi-draw indirect support is not available");
}
// Explicitly request experimental multi-draw indirect support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-multi-draw-indirect"],
});
// Draw call have vertexCount, instanceCount, firstVertex, and firstInstance parameters.
const drawData = new Uint32Array([
3, 1, 0, 0, // First draw call
3, 1, 3, 0, // Second draw call
]);
// Create a buffer to store the draw calls.
const drawBuffer = device.createBuffer({
size: drawData.byteLength,
usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST,
});
device.queue.writeBuffer(drawBuffer, 0, drawData);
// Create a render pipeline, a vertex buffer, and a render pass encoder...
// Inside a render pass, issue the draw calls.
myPassEncoder.setPipeline(myPipeline);
myPassEncoder.setVertexBuffer(0, myVertexBuffer);
myPassEncoder.multiDrawIndirect(drawBuffer, /*offset=*/ 0, /*maxDrawCount=*/ 2);
myPassEncoder.end();
ตัวเลือกการคอมไพล์โมดูล Shader ที่เข้มงวด
เพิ่มstrictMathตัวเลือกสำหรับนักพัฒนาแอปแบบบูลีนลงใน GPUShaderModuleDescriptor เพื่อให้คุณเปิดหรือปิดใช้คณิตศาสตร์ที่เข้มงวดในระหว่างการคอมไพล์โมดูล Shader ได้ ฟีเจอร์นี้พร้อมใช้งานภายใต้ค่าสถานะ "ฟีเจอร์สำหรับนักพัฒนาแอป WebGPU" ที่ chrome://flags/#enable-webgpu-developer-features ซึ่งหมายความว่าเป็นฟีเจอร์ที่มีไว้สำหรับใช้ในระหว่างการพัฒนาเท่านั้น ดูปัญหา 42241455
ขณะนี้ตัวเลือกนี้รองรับ Metal และ Direct3D เมื่อปิดใช้คณิตศาสตร์แบบเข้มงวด คอมไพเลอร์อาจเพิ่มประสิทธิภาพเชเดอร์โดยทำดังนี้
- ไม่พิจารณาค่า NaN และ Infinity
- ถือว่า -0 เป็น +0
- แทนที่การหารด้วยการคูณที่เร็วขึ้นโดยใช้ส่วนกลับ
- การจัดเรียงการดำเนินการใหม่โดยอิงตามคุณสมบัติการเปลี่ยนกลุ่มและการแจกแจง
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const code = `
// Examines the bit pattern of the floating-point number to
// determine if it represents a NaN according to the IEEE 754 standard.
fn isNan(x : f32) -> bool {
bool ones_exp = (bitcast<u32>(x) & 0x7f8) == 0x7f8;
bool non_zero_sig = (bitcast<u32>(x) & 0x7ffff) != 0;
return ones_exp && non_zero_sig;
}
// ...
`;
// Enable strict math during shader compilation.
const shaderModule = device.createShaderModule({ code, strictMath: true });
นำ requestAdapterInfo() ของ GPUAdapter ออก
เมธอดแบบไม่พร้อมกัน requestAdapterInfo() ของ GPUAdapter ไม่จำเป็นอีกต่อไป เนื่องจากคุณรับ GPUAdapterInfo แบบพร้อมกันได้อยู่แล้วโดยใช้แอตทริบิวต์ info ของ GPUAdapter ดังนั้นเราจึงนำเมธอด requestAdapterInfo() ของ GPUAdapter ที่ไม่เป็นไปตามมาตรฐานออกแล้ว ดูความตั้งใจที่จะนำออก
ข้อมูลอัปเดตเกี่ยวกับ Dawn
tint_benchmarkไฟล์ที่เรียกใช้งานได้จะวัดต้นทุนของการแปล Shader จาก WGSL เป็นภาษาของแต่ละแบ็กเอนด์ ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์นี้ได้ในเอกสารประกอบใหม่
นี่เป็นเพียงไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด
มีอะไรใหม่ใน WebGPU
รายการทุกอย่างที่ครอบคลุมในซีรีส์มีอะไรใหม่ใน WebGPU
Chrome 142
Chrome 141
- การปรับสมดุลสีเขียว-แดงเสร็จสมบูรณ์แล้ว
- การวิเคราะห์ช่วงจำนวนเต็มในคอมไพเลอร์ WGSL
- การอัปเดต SPIR-V 1.4 สำหรับแบ็กเอนด์ Vulkan
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
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
- เลิกตั้งค่าบัฟเฟอร์จุดยอด
- ยกเลิกการตั้งค่ากลุ่มที่เชื่อมโยง
- ปิดเสียงข้อผิดพลาดจากการสร้างไปป์ไลน์แบบไม่พร้อมกันเมื่ออุปกรณ์สูญหาย
- ข้อมูลอัปเดตเกี่ยวกับการสร้างโมดูล 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