الميزات الجديدة في WebGPU (Chrome 119)

François Beaufort
François Beaufort

مواد زخرفية عائمة قابلة للفلترة بسعة 32 بت

تُستخدَم مواد العرض ذات النقطة العائمة بسعة 32 بت لتخزين البيانات العالية الدقة، مثل الصور ذات النطاق العالي الديناميكية وخرائط العمق. وهي مهمة بشكل خاص لوحدات معالجة الرسومات المستخدَمة في الألعاب المتطوّرة والتطبيقات الاحترافية.

يصف خيار "إتاحة استخدام مواد النسيج التي تتضمّن أعدادًا كسرية بدقة 32 بت وقابلة للفلترة" قدرة وحدة معالجة الرسومات على فلترة مواد النسيج التي تتضمّن أعدادًا كسرية بدقة 32 بت. وهذا يعني أنّ وحدة معالجة الرسومات يمكنها تمهيد حواف مواد النسيج ذات النقطة العائمة، ما يجعلها تبدو أقل تعرُّجًا. وهو مشابه للإضافات "OES_texture_float_linear" في WebGL.

لا تتوافق بعض وحدات معالجة الرسومات مع استخدام مواد النسيج التي تتضمّن أعدادًا عائمة بسعة 32 بت وقابلة للفلترة. عندما تكون ميزة "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. وتتكوّن من قيمة واحدة مُجمَّعة بسعة 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 بت للّون الشفاف. راجِع المثال التالي و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....

آخر الأخبار من Dawn

تسمح طلبات البحث عن الطوابع الزمنية لتطبيقات WebGPU بقياس الوقت الذي تستغرقه أوامر وحدة معالجة الرسومات بدقة (حتى النانو ثانية) لتنفيذها. تم تعديل شكل واجهة برمجة التطبيقات لتسجيل طلبات البحث عن الطوابع الزمنية في بداية التصاريح ونهايتها بما يتوافق مع مواصفات 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 131

Chrome 130

الإصدار 129 من Chrome

Chrome 128

Chrome 127

الإصدار 126 من Chrome

الإصدار 125 من Chrome

Chrome 124

Chrome 123

Chrome 122

الإصدار 121 من Chrome

الإصدار 120 من Chrome

الإصدار 119 من Chrome

Chrome 118

Chrome 117

Chrome 116

Chrome 115

الإصدار 114 من Chrome

Chrome 113