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

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

بافت های شناور 32 بیتی قابل فیلتر

بافت های ممیز شناور 32 بیتی برای ذخیره داده های با دقت بالا مانند تصاویر HDR و نقشه های عمق استفاده می شوند. آنها به ویژه برای GPU های مورد استفاده در بازی های پیشرفته و برنامه های حرفه ای مهم هستند.

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

همه GPU ها از بافت های شناور 32 بیتی قابل فیلتر پشتیبانی نمی کنند. هنگامی که ویژگی "float32-filterable" در GPUAdapter در دسترس است، اکنون می توانید یک GPUDevice با این ویژگی درخواست کنید و بافت ها را با فرمت های "r32float"، "rg32float" و "rgba32float" فیلتر کنید. مثال زیر و شماره سپیده دم: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 اضافه شده است. این شامل یک مقدار 32 بیتی بسته بندی شده با چهار مقدار صحیح بدون علامت عادی شده است که به صورت 10 بیتی، 10 بیتی، 10 بیتی و 2 بیتی مرتب شده اند. مثال زیر و شماره 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 اضافه شده است. این شامل یک قالب پیکسلی 32 بیتی با چهار جزء صحیح بدون علامت است: قرمز 10 بیتی، سبز 10 بیتی، آبی 10 بیتی و آلفای 2 بیتی. مثال زیر و شماره سپیده دم: 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 جدید است

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

کروم 131

کروم 130

کروم 129

کروم 128

کروم 127

کروم 126

کروم 125

کروم 124

کروم 123

کروم 122

کروم 121

کروم 120

کروم 119

کروم 118

کروم 117

کروم 116

کروم 115

کروم 114

کروم 113