ویژگی‌های جدید WebGPU (‏Chrome 119)

François Beaufort
François Beaufort

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

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

پشتیبانی از بافت‌های شناور ۳۲ بیتی فیلترپذیر توانایی GPU در فیلتر کردن بافت‌های شناور ۳۲ بیتی را توصیف می‌کند. این یعنی GPU می‌تواند لبه‌های بافت‌های ممیز شناور را صاف کند و آن‌ها را کمتر دندانه‌دار نشان دهد. این ویژگی مشابه افزونه «OES_texture_float_linear» در WebGL است.

همه واحدهای GPU از بافت‌های شناور ۳۲ بیتی فیلترپذیر پشتیبانی نمی‌کنند. وقتی ویژگی "float32-filterable" در GPUAdapter دردسترس باشد، اکنون می‌توانید GPUDevice را با این ویژگی درخواست کنید و با قالب‌های «r32float»،‏ «rg32float»، و «rgba32float» بافت‌ها را فیلتر کنید. به مثال زیر و issue 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 اضافه شده است. این مقدار از یک مقدار ۳۲ بیتی بسته‌بندی‌شده با چهار مقدار عدد صحیح بدون علامت نرمال‌سازی‌شده تشکیل شده است که به‌صورت ۱۰ بیت، ۱۰ بیت، ۱۰ بیت، و ۲ بیت مرتب شده‌اند. به مثال زیر توجه کنید و issue 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 اضافه شده است. این قالب از قالب پیکسل فشرده ۳۲ بیتی با چهار مؤلفه عدد صحیح بدون علامت تشکیل شده است: ۱۰ بیت قرمز، ۱۰ بیت سبز، ۱۰ بیت آبی، و ۲ بیت آلفا. به مثال زیر و issue 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 مطابقت داشته باشد. مثال زیر و issue 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 پوشش داده شده است.

‫۱۵۵-۱۵۶ 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