موارد جدید در WebGPU (Chrome 119)

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

بافت‌های شناور ۳۲ بیتی قابل فیلتر

بافت‌های ممیز شناور ۳۲ بیتی برای ذخیره داده‌های با دقت بالا، مانند تصاویر HDR و نقشه‌های عمق، استفاده می‌شوند. آن‌ها به ویژه برای پردازنده‌های گرافیکی (GPU) مورد استفاده در بازی‌های سطح بالا و برنامه‌های حرفه‌ای اهمیت دارند.

پشتیبانی از بافت‌های شناور ۳۲ بیتی قابل فیلتر، توانایی یک پردازنده گرافیکی (GPU) را در فیلتر کردن بافت‌های ممیز شناور ۳۲ بیتی توصیف می‌کند. این بدان معناست که پردازنده گرافیکی (GPU) می‌تواند لبه‌های بافت‌های ممیز شناور را صاف کند و باعث شود که آنها کمتر ناهموار به نظر برسند. این مشابه افزونه "OES_texture_float_linear" در WebGL است.

همه پردازنده‌های گرافیکی (GPU) از بافت‌های شناور ۳۲ بیتی قابل فیلتر پشتیبانی نمی‌کنند. وقتی ویژگی "float32-filterable" در یک GPUAdapter در دسترس باشد، اکنون می‌توانید یک GPUDevice با این ویژگی درخواست کنید و بافت‌ها را با فرمت‌های "r32float"، "rg32float" و "rgba32float" فیلتر کنید. به مثال زیر و مشکل dawn:1664 مراجعه کنید.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-filterable")) {
  throw new Error("Filterable 32-bit float textures support is not available");
}
// Explicitly request filterable 32-bit float textures support.
const device = await adapter.requestDevice({
  requiredFeatures: ["float32-filterable"],
});

// Create a sampler with linear filtering.
const sampler = device.createSampler({
  magFilter: "linear",
});

// Create a texture with rgba32float format.
const texture = device.createTexture({
  size: [100, 100],
  format: "rgba32float",
  usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});

// Write data to texture, create a bindgroup with sampler and texture and
// send the appropriate commands to the GPU....

قالب رأس unorm10-10-10-2

یک قالب رأس جدید به نام "unorm10-10-10-2" یا "rgb10a2" به مشخصات WebGPU اضافه شده است. این قالب شامل یک مقدار ۳۲ بیتی فشرده با چهار مقدار صحیح بدون علامت نرمال شده است که به صورت ۱۰ بیت، ۱۰ بیت، ۱۰ بیت و ۲ بیت مرتب شده‌اند. به مثال زیر و شماره dawn:2044 مراجعه کنید.

// Define the layout of vertex attribute data with unorm10-10-10-2 format.
const buffers = [
  {
    arrayStride: 0,
    attributes: [
      { format: "unorm10-10-10-2", offset: 0, shaderLocation: 0 },
    ],
  },
];

// Describe the vertex shader entry point and its input buffer layouts.
const vertex = {
  module: myVertexShaderModule,
  entryPoint: "main",
  buffers,
};

// Pass vertex to device.createRenderPipeline() and
// use vec4<f32> type in WGSL shader code to manipulate data.

فرمت بافت rgb10a2uint

یک فرمت بافت جدید به نام "rgb10a2uint" به مشخصات WebGPU اضافه شده است. این فرمت شامل یک فرمت پیکسلی فشرده ۳۲ بیتی با چهار جزء صحیح بدون علامت است: ۱۰ بیت قرمز، ۱۰ بیت سبز، ۱۰ بیت آبی و ۲ بیت آلفا. به مثال و شماره dawn:1936 زیر مراجعه کنید.

// Create a texture with rgb10a2uint format.
const texture = device.createTexture({
  size: [100, 100],
  format: "rgb10a2uint",
  usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});

// Write data to texture, create a bindgroup with texture and
// send the appropriate commands to the GPU....

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

پرس‌وجوهای برچسب زمانی به برنامه‌های WebGPU اجازه می‌دهند تا دقیقاً (تا حد نانوثانیه) مدت زمان اجرای دستورات GPU خود را اندازه‌گیری کنند. شکل API برای ثبت پرس‌وجوهای برچسب زمانی در ابتدا و انتهای گذرها، برای مطابقت با مشخصات WebGPU به‌روزرسانی شده است. به مثال و شماره dawn:1800 زیر مراجعه کنید.

// Create a timestamp query set that will store the timestamp values.
wgpu::QuerySetDescriptor querySetDescriptor = {
    .count = 2,
    .type = wgpu::QueryType::Timestamp};
wgpu::QuerySet querySet = device.CreateQuerySet(&querySetDescriptor);

wgpu::RenderPassTimestampWrites timestampWrites = {
    .querySet = querySet,
    .beginningOfPassWriteIndex = 0,
    .endOfPassWriteIndex = 1};
wgpu::ComputePassDescriptor pass{.timestampWrites = &timestampWrites};

// Write the queue timestamp into beginningOfPassWriteIndex and
// endOfPassWriteIndex of myQuerySet respectively before and after the pass
// commands execute.
myEncoder.BeginComputePass(&pass);

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

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

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

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳