מה חדש ב-WebGPU‏ (Chrome 146)

François Beaufort
François Beaufort

תאריך פרסום: 25 בפברואר 2026

תמיכה במצב תאימות של WebGPU ב-OpenGL ES 3.1

‫WebGPU מתוכנן להתאים לממשקי API מודרניים לגרפיקה כמו Vulkan,‏ Metal ו-D3D12, אבל להרבה משתמשים יש חומרה ישנה שלא תומכת בתקנים האלה. כדי לגשר על הפער הזה ולהבטיח נגישות רחבה, אנחנו משיקים ב-Chrome תכונה חדשה שנקראת מצב תאימות.

במצב הזה אפשר להפעיל WebGPU בממשקי API ישנים יותר לגרפיקה, כמו OpenGL ES 3.1. אם תטרגטו קבוצת משנה מוגבלת מעט של מפרט WebGPU, תוכלו לוודא שאפליקציית האינטרנט שלכם תהיה נגישה לכולם, החל ממערכות הגיימינג העדכניות ביותר ועד למחשבים ניידים ולמכשירים ניידים ישנים יותר. הצוות מתחיל עם Android, אבל בודק אפשרות לתמיכה במכשירים אחרים, כמו ChromeOS עם OpenGL ES 3.1 ו-Windows עם Direct3D 11.

בהרבה אפליקציות אינטרנט, כדי להפעיל את מצב התאימות צריך להעביר featureLevel: "compatibility" כשקוראים ל-requestAdapter(). אם המכשיר שלכם תומך ב-Core WebGPU, ‏ Chrome יחזיר מתאם עם יכולת Core, אבל אפליקציית האינטרנט תדע להישאר בגבולות התאימות אלא אם היא תפעיל את התכונה "core-features-and-limits" (או תפעיל את כל התכונות הזמינות). באפליקציות מורכבות יותר, יכול להיות שיידרשו שינויים קלים כדי להתאים למגבלות של המצב הזה.

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
const device = await adapter.requestDevice();

מידע מפורט על ההגבלות הארכיטקטוניות הספציפיות של המצב הזה זמין במדריך בנושא יסודות WebGPU. בנוסף, כל הדוגמאות של WebGPU תומכות עכשיו במצב תאימות. אפשר גם לקרוא את המידע על הכוונה לשלוח.

קבצים מצורפים זמניים

אתם יכולים להשתמש בדגל החדש TRANSIENT_ATTACHMENT GPUTextureUsage כדי ליצור קבצים מצורפים שחוסכים בזיכרון. כך פעולות של העברת רנדור נשארות בזיכרון של ה-tile, מה שמונע תנועה של VRAM ויכול למנוע הקצאה של VRAM לטקסטורות.

כשמגדירים טקסטורה כזמנית (או כטקסטורה ללא זיכרון), ה-GPU יודע שהוא צריך את התוכן של הטקסטורה רק באופן זמני – באופן ספציפי, רק במהלך שלב העיבוד הנוכחי. בנוסף, מכיוון שהתוכן של הטקסטורה נמחק אחרי שלב העיבוד, יכול להיות שהדרייבר לא יצטרך להקצות לה בכלל VRAM.

בדוגמה הבאה אפשר לראות איך יוצרים טקסטורה זמנית.

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

if ('TRANSIENT_ATTACHMENT' in GPUTextureUsage) {

  const transientTexture = device.createTexture({
    size: [42, 42],
    // The TRANSIENT_ATTACHMENT flag indicates the texture content is temporary,
    // potentially keeping it in fast on-chip memory.
    usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT,
    format: 'rgba8unorm',
  });
}

אפשר לעיין בדוגמה של MSAA ב-WebGPU‏ – Hello Triangle ובהודעה על כוונה להשיק.

התוסף texture_and_sampler_let של WGSL

תוסף השפה WGSL‏ texture_and_sampler_let מאפשר להקצות משתני טקסטורה או דגימה ל-let בתוך הצללה של WGSL. התכונה הזו מספקת כרגע מנגנון חלופי למתן שמות, ומכינה את הקרקע לתמיכה ב-bindless, שבה אפשר לאחסן ישירות משתנים מקומיים בשיטות שמחזירות טקסטורות או דוגמים.

אפשר לעיין בדוגמה הבאה ובכוונה להשיק.

@group(0) @binding(0) var tex: texture_2d<f32>;
@group(1) @binding(0) var store : texture_storage_2d<r32float, read_write>;

@fragment fn main() {
    let a = tex;
    var res: vec4f = textureLoad(a, vec2i(1i), 0);

    textureStore(store, vec2i(0i), res);
}

עדכונים של Dawn

אלה רמות המגבלה החדשות שזמינות:

אימות SPIR-V מופעל כברירת מחדל ב-Android כדי לספק שכבת אבטחה נוספת ולמנוע חוסר יציבות של מנהלי התקנים כתוצאה מקלט פגום. מידע נוסף

המידע הזה כולל רק נקודות עיקריות. רשימה מלאה של קומיטים

מה חדש ב-WebGPU

רשימה של כל הנושאים שמופיעים בסדרת המאמרים What's New in WebGPU.

‫Chrome 155-156

‫Chrome 153-154

‫Chrome 151-152

‫Chrome 149-150

‫Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

‫Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

‫Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113