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

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

افزونه‌های زبان WGSL پشتیبانی‌شده

عضو wgslLanguageFeatures از شیء GPU ، نام افزونه‌های زبان WGSL پشتیبانی‌شده را فهرست می‌کند. افزونه‌های زبان WGSL پشتیبانی‌شده به‌طور خودکار فعال می‌شوند، بنابراین نیازی نیست که به‌طور صریح درخواست یکی از آن‌ها را بدهید. این لیست در حال حاضر خالی است، اما می‌توانید انتظار داشته باشید که در آینده تعداد زیادی از آن‌ها (مثلاً do-while loops ) اضافه شوند. به شماره dawn:1777 مراجعه کنید.

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

پشتیبانی آزمایشی از Direct3D 11

تیم کرومیوم در حال کار بر روی اضافه کردن پشتیبانی از WebGPU برای Direct3D 11 است. اکنون می‌توانید با اجرای کروم روی ویندوز با استفاده از پرچم‌های خط فرمان --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 آن را به صورت محلی آزمایش کنید. به شماره dawn:1705 مراجعه کنید.

به طور پیش فرض از پردازنده گرافیکی مجزا با برق AC استفاده کنید

در دستگاه‌های macOS با دو پردازنده گرافیکی، اگر requestAdapter() بدون گزینه powerPreference فراخوانی شود، پردازنده گرافیکی مجزا زمانی که دستگاه کاربر به برق AC متصل است، بازگردانده می‌شود. در غیر این صورت، پردازنده گرافیکی مجتمع بازگردانده می‌شود. به تغییر ۴۴۹۹۳۰۷ مراجعه کنید.

بهبود تجربه توسعه‌دهنده

هشدارهای جدید DevTools

اگر از کلید depth در یک GPUExtend3DDict استفاده شود، یک هشدار در کنسول DevTools نشان داده می‌شود زیرا کلید صحیح depthOrArrayLayers است. به مشکل Chrome:1440900 مراجعه کنید.

همچنین اگر یک GPUBlendComponent ترکیبی از اعضای صریح و پیش‌فرض داشته باشد، هشداری ایجاد می‌شود. به شماره dawn:1785 مراجعه کنید.

اگرچه ارسال‌ها و دریافت‌های با اندازه صفر معتبر هستند، یک هشدار به توسعه‌دهندگان توصیه می‌کند تا حد امکان از آنها اجتناب کنند. به شماره dawn:1786 مراجعه کنید.

پیام‌های خطای بهتر

اکنون در صورت استفاده از GPUCommandEncoder در صورتی که finish() قبلاً فراخوانی شده باشد، یک پیام خطای بهبود یافته ارائه می‌شود. به شماره dawn:1736 مراجعه کنید.

هنگام ارسال بافرهای فرمان با اشیاء تخریب‌شده، برچسب‌های بافرهای فرمانی که در submit() استفاده شده‌اند، اکنون در پیام خطا قابل مشاهده هستند. به شماره dawn:1747 مراجعه کنید.

بخش نامعتبر حالت استنسیل عمق، اکنون هنگام اعتبارسنجی depthStencil در پیام خطا مشخص می‌شود. به شماره dawn:1735 مراجعه کنید.

پیام خطای اعتبارسنجی minBindingSize اکنون گروه و شماره اتصالی که اعتبارسنجی آن با شکست مواجه شده است، و همچنین بافر را گزارش می‌دهد. به شماره dawn:1604 مراجعه کنید.

پیام‌های خطایی که توسط متد mapAsync() در یک شیء GPUBuffer برگردانده می‌شوند، برای کمک به توسعه‌دهندگان در هنگام اشکال‌زدایی بهبود یافته‌اند. به مثال زیر و خطای chromium:1431622 مراجعه کنید.

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

برچسب‌ها در ابزارهای اشکال‌زدایی macOS

گزینه اشکال‌زدایی use_user_defined_labels_in_backend به شما امکان می‌دهد برچسب‌های اشیاء را به backend منتقل کنید تا بتوان آنها را در ابزارهای اشکال‌زدایی مخصوص پلتفرم مانند RenderDoc، PIX یا Instruments مشاهده کرد. از این پس، با فعال کردن این گزینه برای اشکال‌زدایی ، تجربه اشکال‌زدایی بهتری در macOS ارائه می‌شود. به شماره dawn:1784 مراجعه کنید.

تصویر برنامه Instruments در macOS با برچسب‌های سفارشی از WebGPU.
برچسب‌های تعریف‌شده توسط کاربر در برنامه Instruments در macOS.

در صورت عدم موفقیت در کامپایل، HLSL را ثبت کنید

گزینه اشکال‌زدایی dump_shaders به ​​شما امکان می‌دهد تا ورودی‌های سایه‌زن WGSL و سایه‌زن‌های backend ترجمه‌شده را ثبت کنید. از این پس، وقتی آن را برای اشکال‌زدایی فعال می‌کنید، در صورت عدم موفقیت در کامپایل، HLSL حذف می‌شود. به شماره dawn:1681 مراجعه کنید.

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

بافر رأس را غیرفعال کنید

ارسال nullptr به جای wgpu::Buffer به SetVertexBuffer() در wgpu::RenderPassEncoder یا wgpu::RenderBundleEncoder به شما امکان می‌دهد یک بافر رأس که قبلاً در یک اسلات مشخص تنظیم شده است را از حالت تنظیم خارج کنید. به شماره dawn:1675 مراجعه کنید.

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

پیوست‌های گذرا

شما می‌توانید ضمیمه‌هایی ایجاد کنید که به عملیات رندرینگ اجازه می‌دهند در حافظه کاشی باقی بمانند و با تنظیم مقدار wgpu::TextureUsage::TransientAttachment usage از ترافیک VRAM و تخصیص VRAM برای بافت‌ها جلوگیری کنند. این ویژگی فقط برای Metal و Vulkan پشتیبانی می‌شود. به شماره dawn: 1695 مراجعه کنید.

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

ساخت و ساز بدون depot_tools

گزینه جدید DAWN_FETCH_DEPENDENCIES در CMake به شما امکان می‌دهد وابستگی‌های Dawn را با استفاده از یک اسکریپت پایتون که فایل‌های DEPS را می‌خواند، دریافت کنید، به جای اینکه نیاز به نصب depot_tools توسط تمام پروژه‌هایی که به آن وابسته هستند، داشته باشید. به تغییر ۱۳۱۷۵۰ مراجعه کنید.

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

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

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳