תאריך פרסום: 26 במאי 2025
שימוש בתצוגת המרקם לקישור של externalTexture
עכשיו מותר להשתמש ב-GPUTextureView תואם (2D, משאב משנה יחיד) במקום קישור של GPUExternalTexture כשיוצרים GPUBindGroup.
כך אפשר לפשט את הלוגיקה של שדרן (shader) בצינורות עיבוד של אפקטים לווידאו, שבהם צריך לטפל גם ב-GPUExternalTexture (לסרטון המקור) וגם ב-GPUTextureView (לעיבוד ביניים). בנוסף, היא מפחיתה את הצורך לבצע הידור דינמי של שגיאות בהתאם למקור של המרקם. אפשר לעיין במאמר Intent to Ship: WebGPU: GPUTextureView for externalTexture binding.
const texture = myDevice.createTexture({
size: [42, 42],
format: navigator.gpu.getPreferredCanvasFormat(),
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
@compute @workgroup_size(1) fn main() {
buffer = textureDimensions(texture);
}`;
const pipeline = myDevice.createComputePipeline({
layout: "auto",
compute: { module: myDevice.createShaderModule({ code }) },
});
const bindGroup = myDevice.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{ binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
{ binding: 1, resource: { buffer: myBuffer } },
],
});
העתקה של מאגרים בלי לציין את הזזות האופרטור והגודל
עומס יתר חדש בשיטה של GPUCommandEncoder מאפשר למפתחים להשמיט את הפרמטרים של המרווחים והגדלים כשמשתמשים ב-copyBufferToBuffer()
כדי לפשט את ההעתקה של מאגרים שלמים. ראו Intent to Ship: WebGPU: copyBufferToBuffer overload.
const size = 42;
const srcBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);
// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);
WGSL workgroupUniformLoad באמצעות pointer to atomic
הוספנו עומס יתר חדש של workgroupUniformLoad(ptr)
ב-WGSL לנוחות המפתחים. הפונקציה טוענת באופן אטומי את הערך ש-ptr
מפנה אליו ומחזירה אותו לכל ההפעלות בקבוצת העבודה, כאשר ptr
הוא מצביע לאטומי בתוך משתנה של קבוצת עבודה. בעיה מס' 408241039
@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;
var<workgroup> wgvar : atomic<u32>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
if (lid == 0) {
atomicStore(&(wgvar), 42u);
}
buffer[lid] = workgroupUniformLoad(&wgvar);
}
המאפיין powerPreference של GPUAdapterInfo
מאפיין המחרוזת הלא סטנדרטי powerPreference
של GPUAdapterInfo זמין עכשיו כשהמשתמש הפעיל את הדגל 'WebGPU Developer Features' ב-chrome://flags/#enable-webgpu-developer-features
. אם התכונה נתמכת, הערך של powerPreference
יכול להיות "low-power"
או "high-performance"
, בהתאם לערך של GPUPowerPreference ששימש ב-GPURequestAdapterOptions. CL 6438860
function checkPowerPreferenceForGpuDevice(device) {
const powerPreference = device.adapterInfo.powerPreference;
if (powerPreference === "high-performance") {
// High-performance GPU detected. Enabling enhanced graphics settings.
} else if (powerPreference === "low-power") {
// Low-power GPU detected. Optimizing for battery life.
}
}
הסרת המאפיין compatibilityMode של GPURequestAdapterOptions
המאפיין הניסיוני compatibilityMode
של GPURequestAdapterOptions הוסרה לטובת המאפיין הסטנדרטי featureLevel
שנוסף בגרסה 133 של Chrome. בעיה מס' 366151404
עדכונים בנושא Dawn
מפתחים יכולים ליצור פרויקטים של WebGPU בשפות כמו C++, ולהשתמש ב-webgpu.h כדי לטרגט גם את WebAssembly וגם פלטפורמות ספציפיות. ב-emdawnwebgpu (Emscripten Dawn WebGPU) שפורסם לאחרונה על ידי Dawn, מוטמעת הגרסה העדכנית ביותר של webgpu.h דרך ה-API של הדפדפן.
Emdawnwebgpu הוא פורק (מתוחזק) של קישורי Emscripten המובנים (USE_WEBGPU
) (שאינם מתוחזקים עכשיו). כל הפיתוח החדש מתבצע ב-emdawnwebgpu, והקישורים המובנים של Emscripten יוסרו כשהמפתחים יעברו ל-emdawnwebgpu. הכותרת של Emdawnwebgpu ב-C דומה מאוד לזו של Dawn, אבל הקישורים המובנים מיושנים מאוד.
מורידים את emdawnwebgpu מדף הגרסאות של Dawn ב-GitHub וקוראים את README.md של החבילה כדי לקבל מידע על השימוש בה. קובצי המקור נמצאים במאגר Dawn.
למדריך מלא, אפשר לעיין במסמכי התיעוד המעודכנים בנושא פיתוח אפליקציות באמצעות WebGPU.
כאן מפורטות רק חלק מהנקודות העיקריות. רשימת ההצהרות המלאה
מה חדש ב-WebGPU
רשימה של כל מה שנדון בסדרה מה חדש ב-WebGPU.
Chrome 138
- קיצור דרך לשימוש במאגר כמשאב קישור
- שינויים בדרישות לגבי גודל מאגרים שממופים בזמן היצירה
- דוח ארכיטקטורה של מעבדי GPU מהדורות האחרונות
- הוצאה משימוש של המאפיין isFallbackAdapter ב-GPUAdapter
- עדכונים לגבי Dawn
Chrome 137
- שימוש בתצוגת טקסטורה לקישור של externalTexture
- העתקה של מאגרים בלי לציין את האופסים והגודל
- WGSL workgroupUniformLoad using pointer to atomic
- המאפיין powerPreference של GPUAdapterInfo
- הסרת המאפיין compatibilityMode של GPURequestAdapterOptions
- עדכונים לגבי Dawn
Chrome 136
- המאפיין isFallbackAdapter של GPUAdapterInfo
- שיפורים בזמן הידור של שגיאות ב-D3D12
- שמירה והעתקה של תמונות על קנבס
- הגבלות במצב תאימות של Lift
- עדכונים לגבי Dawn
Chrome 135
- אישור ליצירת פריסה של צינור עיבוד נתונים עם פריסה של קבוצת קישור null
- מתן אפשרות לחלונות תצוגה להרחיב מעבר לגבולות של יעדי הרינדור
- גישה קלה יותר למצב התאימות הניסיוני ב-Android
- הסרת המגבלה maxInterStageShaderComponents
- עדכונים לגבי Dawn
Chrome 134
- שיפור עומסי העבודה של למידת המכונה באמצעות קבוצות משנה
- הסרת התמיכה בסוגי מרקמים שניתנים לסינון באמצעות רכיבי float כרכיבים שניתן למזג
- עדכונים לגבי Dawn
Chrome 133
- פורמטים נוספים של קודקודים מסוג unorm8x4-bgra וקודקודים עם רכיב אחד
- איך מאפשרים לבקש מגבלות לא ידועות עם ערך לא מוגדר
- שינויים בכללי היישור של WGS84
- שיפור בביצועים של WGSL באמצעות ביטול
- שימוש ב-displaySize של VideoFrame למרקמים חיצוניים
- טיפול בתמונות עם כיוונים שאינם ברירת המחדל באמצעות copyExternalImageToTexture
- שיפור חוויית המפתחים
- הפעלת מצב תאימות באמצעות featureLevel
- ניקוי של תכונות ניסיוניות של קבוצות משנה
- הוצאה משימוש של המגבלה maxInterStageShaderComponents
- עדכונים לגבי Dawn
Chrome 132
- שימוש בתצוגת טקסטורה
- מיזוג של מרקמים מסוג float ב-32 ביט
- המאפיין adapterInfo של GPUDevice
- הגדרת הקשר של לוח הציור בפורמט לא חוקי גורמת לשגיאת JavaScript
- הגבלות על סינון של טקסטורות
- ניסוי עם תת-קבוצות מורחבות
- שיפור חוויית המפתחים
- תמיכה ניסיונית בפורמטים של טקסטורות מנורמלות ב-16 ביט
- עדכונים לגבי Dawn
Chrome 131
- חיתוך מרחקים ב-WGSL
- GPUCanvasContext getConfiguration()
- אסור שתהיה הטיה של עומק בפרימיטיבים של נקודות וקווים
- פונקציות מובנות של סריקה כוללת לקבוצות משנה
- תמיכה ניסיונית בקריאה עקיפה עם כמה משיכות
- Shader module compilation option strict math
- הסרת השיטה requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 130
- שילוב של שני מקורות
- שיפורי זמן הידור של שגיאות ב-Metal
- הוצאה משימוש של requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 129
Chrome 128
- ניסוי עם תתי-קבוצות
- הוצאה משימוש של הגדרת הטיה של עומק לקווים ולנקודות
- הסתרת אזהרת DevTools על שגיאה שלא תועדה אם preventDefault
- WGSL מבצעת אינטרפולציה של הדגימה קודם ואז
- עדכונים לגבי Dawn
Chrome 127
- תמיכה ניסיונית ב-OpenGL ES ב-Android
- מאפיין המידע של GPUAdapter
- שיפורים בתאימות הדדית של WebAssembly
- שיפור שגיאות של מקודד הפקודות
- עדכונים לגבי Dawn
Chrome 126
- הגדלת המגבלה של maxTextureArrayLayers
- אופטימיזציה של העלאה למאגר לצד העורפי של Vulkan
- שיפורים בזמן הידור של שגיאות (shaders)
- מאגרי הפקודות שנשלחים חייבים להיות ייחודיים
- עדכונים לגבי Dawn
Chrome 125
Chrome 124
- טקסטורות אחסון לקריאה בלבד ולקריאה וכתיבה
- תמיכה ב-Service Workers וב-Shared Workers
- מאפיינים חדשים של פרטי מתאם
- תיקוני באגים
- עדכונים לגבי Dawn
Chrome 123
- תמיכה בפונקציות מובנות של DP4a ב-WGSL
- פרמטרים של מצביע ללא הגבלה ב-WGSL
- תחביר פשוט יותר לביטול ההפניה לרכיבים ב-WGSL
- מצב נפרד לקריאה בלבד של אספקטים של תבנית ועומק
- עדכונים לגבי Dawn
Chrome 122
- הרחבת פוטנציאל החשיפה באמצעות מצב תאימות (תכונה בפיתוח)
- הגדלת המגבלה של maxVertexAttributes
- עדכונים לגבי Dawn
Chrome 121
- תמיכה ב-WebGPU ב-Android
- שימוש ב-DXC במקום ב-FXC לצורך הידור של שגיאות ב-Windows
- שאילתות של חותמות זמן בשלבי המחשוב והעיבוד
- נקודות כניסה שמוגדרות כברירת מחדל למודולי Shader
- תמיכה ב-display-p3 כמרחב צבע של GPUExternalTexture
- מידע על ערמות זיכרון
- עדכונים לגבי Dawn
Chrome 120
- תמיכה בערכים של נקודה צפה (floating-point) באורך 16 ביט ב-WGSL
- מעבר למגבלות
- שינויים במצב של עומק-המרחק
- עדכונים לגבי פרטי המתאם
- קידוד נתונים של שאילתות עם חותמות זמן
- תכונות לניקוי האביב
Chrome 119
- טקסטורות של מספרים ממשיים (float) ב-32 ביט שניתן לסנן
- פורמט קודקוד unorm10-10-10-2
- פורמט טקסטורה של rgb10a2uint
- עדכונים לגבי Dawn
Chrome 118
- תמיכה ב-HTMLImageElement וב-ImageData ב-
copyExternalImageToTexture()
- תמיכה ניסיונית ברקמות אחסון לקריאה וכתיבה ולקריאה בלבד
- עדכונים לגבי Dawn
Chrome 117
- ביטול ההגדרה של מאגר הנקודות
- ביטול ההגדרה של קבוצת הקישור
- השתקת שגיאות שנוצרות ביצירת צינור עיבוד נתונים אסינכררוני כשהמכשיר אבד
- עדכונים ביצירת מודולים של שַדְררים מסוג 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