چیزهای جدید در WebGPU (Chrome 124)

فرانسوا بوفور
François Beaufort

بافت های ذخیره سازی فقط خواندنی و خواندنی و نوشتنی

نوع اتصال بافت ذخیره‌سازی به سایه‌زن‌ها اجازه می‌دهد بدون افزودن TEXTURE_BINDING از بافت‌های ذخیره‌سازی بخوانند و خواندن و نوشتن ترکیبی را در قالب‌های خاصی انجام دهند. هنگامی که پسوند زبان WGSL "readonly_and_readwrite_storage_textures" در navigator.gpu.wgslLanguageFeatures وجود دارد، اکنون می توانید دسترسی GPUStorageTexture را هنگام ایجاد طرح بندی گروه bind روی "read-write" یا "read-only" تنظیم کنید. قبلاً این به "write-only" محدود می شد.

سپس، کد سایه زن WGSL شما می‌تواند از واجد شرایط دسترسی read_write و read برای بافت‌های ذخیره‌سازی استفاده کند، توابع داخلی textureLoad() و textureStore() بر این اساس رفتار می‌کنند، و یک تابع داخلی textureBarrier() برای همگام‌سازی دسترسی‌های حافظه بافت در دسترس است. یک گروه کاری

توصیه می‌شود از دستورالعمل نیازمندی‌ها برای سیگنال‌دهی پتانسیل غیرقابل‌حمل بودن با requires readonly_and_readwrite_storage_textures; در بالای کد سایه زن WGSL شما. مثال زیر و شماره سپیده دم: 1972 را ببینید.

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

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

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

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

  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

پشتیبانی کارگران خدماتی و کارگران مشترک

WebGPU در Chrome پشتیبانی از کارگران وب را به سطح بعدی ارتقا می‌دهد و اکنون هم برای کارگران خدماتی و هم برای کارگران مشترک ارائه می‌دهد. می‌توانید از سرویس‌دهندگان برای بهبود وظایف پس‌زمینه و قابلیت‌های آفلاین، و از کارگران مشترک برای به اشتراک‌گذاری کارآمد منابع در بین اسکریپت‌ها استفاده کنید. به شماره chromium:41494731 مراجعه کنید.

نمونه برنامه افزودنی کروم و افزونه کروم WebLLM را بررسی کنید تا نحوه استفاده از WebGPU را در یک سرویس دهنده برنامه افزودنی ببینید.

تصویر صفحه پسوند WebLLM کروم.
پسوند کروم WebLLM.

ویژگی های اطلاعات آداپتور جدید

اگر کاربر پرچم «ویژگی‌های برنامه‌نویس WebGPU» را در chrome://flags/#enable-webgpu-developer-features فعال کرده باشد، ویژگی‌های اطلاعات آداپتور d3dShaderModel و vkDriverVersion غیر استاندارد اکنون با فراخوانی requestAdapterInfo() در دسترس هستند. هنگامی که پشتیبانی می شود:

تصویری از https://webgpureport.org دارای vkDriverVersion در اطلاعات آداپتور.
اطلاعات آداپتور vkDriverVersion در https://webgpureport.org نشان داده شده است.

رفع اشکال

ایجاد دو خط لوله با گروه های پیوندی منطبق با استفاده از layout: "auto" ، سپس ایجاد یک bindgroup با خط لوله اول، و استفاده از آن در خط لوله دوم، اکنون یک GPUValidationError را ایجاد می کند. اجازه دادن به آن یک اشکال پیاده سازی بود که اکنون با آزمایش های مناسب برطرف شده است. به شماره سپیده دم: 2402 مراجعه کنید.

به روز رسانی سحر

در Dawn API، پس از از بین رفتن دستگاه GPU، مجموعه پاسخگویی خطای ضبط نشده با wgpuDeviceSetUncapturedErrorCallback اکنون فراخوانی نمی شود. این اصلاح Dawn را با مشخصات API جاوا اسکریپت و اجرای Blink هماهنگ می کند. به شماره سپیده دم: 2459 مراجعه کنید.

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

چه چیزی در WebGPU جدید است

فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.

کروم 125

کروم 124

کروم 123

کروم 122

کروم 121

کروم 120

کروم 119

کروم 118

کروم 117

کروم 116

کروم 115

کروم 114

کروم 113