ویژگی‌های جدید WebGPU (Chrome 153-154)

François Beaufort
François Beaufort

تاریخ انتشار: ۱۵ سپتامبر ۲۰۲۶

افزونه WGSL buffer_view

افزونه زبان WGSL buffer_view اجازه می‌دهد داده‌های متغیر یکنواخت، ذخیره‌سازی، یا گروه کاری به‌عنوان چندین نوع مختلف تفسیر شود. این کار طیف وسیعی از کاربردها را دربرمی‌گیرد، از استفاده‌های نوعی از جناس گرفته تا تقسیم یک متغیر به چند متغیر منطقی.

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

  • ‫bufferView<T>() حافظه را در یک افست بایت خاص به‌عنوان اشاره‌گری به نوع T تفسیر می‌کند.
  • ‫bufferArrayView<T>() یک اشاره‌گر آرایه محدود با تعداد عنصر صریح ایجاد می‌کند.
  • bufferLength() اندازه بایت میان‌گیر را برمی‌گرداند.

این افزونه زبان را می‌توان بااستفاده از navigator.gpu.wgslLanguageFeatures در جاوا اسکریپت تشخیص ویژگی داد. توصیه می‌شود از یک دستور requires برای نشان دادن احتمال غیرقابل انتقال بودن با requires buffer_view در بالای کد سایه‌زن WGSL خود استفاده کنید. مثال WGSL زیر و قصد ارسال را ببینید.

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

همچنین می‌توانید پیشنهاد نمای بافر را برای جزئیات بیشتر بررسی کنید و با نمونه Wireframe WebGPU بازی کنید.

افزونه WGSL swizzle_assignment

در پاسخ به یکی از پردرخواست‌ترین ویژگی‌های انجمن، افزونه WGSL swizzle_assignment به شما امکان می‌دهد مستقیماً در چرخش‌های برداری بنویسید و به این ترتیب می‌توانید چندین مؤلفه را در یک عبارت به‌روز کنید. این ویژگی به‌طور چشمگیری متن‌های تکراری را کاهش می‌دهد و خوانایی سایه‌زن را بهبود می‌بخشد و درعین‌حال WGSL را با دیگر زبان‌های سایه‌زنی هماهنگ می‌کند.

این افزونه زبان را می‌توان بااستفاده از navigator.gpu.wgslLanguageFeatures در جاوا اسکریپت تشخیص ویژگی داد. توصیه می‌شود از یک دستور requires برای نشان دادن احتمال غیرقابل انتقال بودن با requires swizzle_assignment در بالای کد سایه‌زن WGSL خود استفاده کنید. مثال WGSL زیر و قصد ارسال را ببینید.

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

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

const shaderModule = device.createShaderModule({ code: `
  requires swizzle_assignment;

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

به‌روزرسانی‌های افزونه WGSL

افزونه زبان texture-formats-tier1، اگرچه در کد WGSL پشتیبانی می‌شود، قبلاً به‌درستی به navigator.gpu.wgslLanguageFeatures (به‌عنوان texture_formats_tier1) در جاوا اسکریپت نگاشت نشده بود. این مشکل نگاشت اکنون برطرف شده است. به Chromium CL 8159562 مراجعه کنید.

افزونه زبان subgroups اکنون وقتی subgroup_size_control در WGSL فعال باشد به‌طور خودکار فعال می‌شود. مشکل dawn:545285663 را ببینید.

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

ویژگی آزمایشی جدید wgpu::FeatureName::BufferMapWriteExtendedUsages به شما امکان می‌دهد با wgpu::BufferUsage::MapWrite ترکیب با هر wgpu::BufferUsage دیگری، به‌جز wgpu::BufferUsage::MapRead، بافر ایجاد کنید تا مستقیماً در بافر نقشه‌پذیر که از واحد پردازش گرافیکی نیز استفاده می‌کند بنویسید و بافر مرحله‌بندی و نسخه اضافی در زیرینه‌های Vulkan و D3D12 را حذف کنید. برای اطلاعات بیشتر، کاربردهای گسترده نوشتن نقشه میان‌گیری و مشکل dawn:386255678 را ببینید.

اکنون می‌توانید از ملزومات webgpu_cpp.h در بالای هر پیاده‌سازی webgpu.h استفاده کنید و بااستفاده از webgpu_upstream_cpp_headers جدید، دیگر به طعم Dawn وابسته نباشید. مشکل شماره ۵۹۶ سرصفحه‌های webgpu را ببینید.

‫Dawn اکنون به macOS نسخه ۱۳.۰ یا بالاتر نیاز دارد. Dawn CL 334415 را ببینید.

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

ویژگی‌های جدید 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