ویژگی‌های جدید WebGPU (Chrome 149-150)

François Beaufort
François Beaufort

منتشرشده: ۱۷ ژوئن ۲۰۲۶

خویشاوندان نزدیک

«مقادیر فوری»، که به‌عنوان «ثابت‌های فشار» یا «ثابت‌های ریشه» نیز شناخته می‌شوند، به شما امکان می‌دهند مقادیر کمی از داده‌های مکرراً درحال تغییر را مستقیماً به سایه‌زن‌ها منتقل کنید. این فرایند از سربار ایجاد بافرهای GPU و مدیریت گروه‌های پیوند دور می‌زند.

به‌روزرسانی پیوندهای بافر یکنواخت برای داده‌هایی که در هر فراخوانی رسم تغییر می‌کنند—مانند شناسه یکتای شیء یا ماتریس تبدیل سه‌بعدی برای صدها شیء—سربار CPU ایجاد می‌کند. برای جلوگیری از نوشتن داده‌ها در حافظه و مدیریت جستجوهای GPU، مقادیر خام را مستقیماً در کدبند مجوز تزریق کنید.

«فوری‌ها» مسیر سریعی برای متغیرهای کوچک و بسیار پویا فراهم می‌کنند. از بافرهای یکنواخت یا بافرهای ذخیره‌سازی برای آرایه‌های بزرگ داده، ساختارهای نورپردازی پیچیده، یا ماتریس‌های عظیم استفاده کنید.

در سایه‌زن WGSL، فضای نشانی <immediate> به شما امکان می‌دهد داده‌های فوری را تعریف کنید که می‌توانند مستقیماً به کدبند گذر ارسال شوند. برای ارائه این داده‌ها بدون پیوند دادن گروه، setImmediates() را در JavaScript قبل‌از تماس طراحی فراخوانی کنید. برای بررسی پشتیبانی، افزونه زبان immediate_address_space WGSL را ازطریق navigator.gpu.wgslLanguageFeatures تشخیص ویژگی دهید. مثال زیر و قصد ارسال را ببینید.

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

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

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

برای آشنایی بیشتر با این ویژگی، به WebGPUFundamentals Immediates نگاهی بیندازید.

به تیم Microsoft به‌خاطر همیاری‌هایشان تبریک می‌گوییم!

اعتبارسنجی دقیق‌تر برای پیوست‌های گذرا

‫WebGPU اخیراً پرچم TRANSIENT_ATTACHMENT GPUTextureUsage را معرفی کرده است که به توسعه‌دهندگان امکان می‌دهد پیوست‌های رندر موقت، مانند بافرهای عمق-استنسیل یا هدف‌های چندنمونه‌ای، ایجاد کنند. این پیوست‌ها بدون اختصاص دادن VRAM اصلی در حافظه کاشی سریع روی تراشه باقی می‌مانند.

به‌روزرسانی‌های اخیر (#6248 و #6267) قوانین اعتبارسنجی را اصلاح می‌کنند تا از سوءاستفاده از این پیوست‌های بافت حافظه کارآمد جلوگیری کنند:

  • به‌دلیل محدودیت‌های پلاتفرم، هنگام ایجاد بافت‌های گذرا، viewFormats باید آرایه خالی باشد. قالب‌های نمای جایگزین لازم نیست زیرا بافت‌های گذرا فقط برای پردازش هستند.
  • ایجاد نمای بافت باعث محدود شدن پرچم‌های استفاده نمی‌شود. وقتی createView() را در بافت گذرا فرا می‌خوانید، نما نمی‌تواند استفاده‌اش را تغییر دهد.
  • از پیوست‌های گذرا نمی‌توان به‌عنوان resolveTarget در گذر رندر استفاده کرد.

به‌روزرسانی‌های سپیده‌دم

این فقط برخی‌از نکات برجسته کلیدی را پوشش می‌دهد. فهرست کامل تعهدات را بررسی کنید.

ویژگی‌های جدید WebGPU

فهرستی از همه مواردی که در مجموعه ویژگی‌های جدید WebGPU پوشش داده شده است.

‫۱۵۵-۱۵۶ Chrome

‫۱۵۳-۱۵۴ Chrome

Chrome 151-152

‫۱۴۹-۱۵۰ Chrome

‫۱۴۷-۱۴۸ Chrome

‫۱۴۶ Chrome

‫Chrome 145

‫۱۴۴ Chrome

‫۱۴۳ Chrome

‫۱۴۲ Chrome

Chrome 141

‫۱۴۰ Chrome

Chrome 139

‫Chrome 138

Chrome 137

‫Chrome 136

‫۱۳۵ Chrome

‫۱۳۴ Chrome

‫Chrome 133

‫۱۳۲ Chrome

‫۱۳۱ Chrome

‫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