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

François Beaufort
François Beaufort

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

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

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

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

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

دریافت GPU مجزا به‌طور پیش‌فرض درصورت اتصال به برق متناوب

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

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

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

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

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

اگرچه ارسال و کشیدن با اندازه صفر معتبر است، اما هشداری توسعه‌دهندگان را تشویق می‌کند که درصورت امکان از آن‌ها اجتناب کنند. طلوع مشکل:۱۷۸۶ را ببینید.

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

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

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

اکنون بخش نامعتبر وضعیت شابلون عمق هنگام اعتبارسنجی depthStencil در پیام خطا مشخص می‌شود. طلوع خورشید:۱۷۳۵ را ببینید.

پیام خطای اعتبارسنجی minBindingSize اکنون گروه و شماره پیوندی را که اعتبارسنجی آن ناموفق بوده است، و همچنین بافر را گزارش می‌کند. طلوع مشکل:۱۶۰۴ را ببینید.

پیام‌های خطای برگشتی توسط روش 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 اشکال‌زدایی به شما امکان می‌دهد برچسب‌های شیء را به زیرینه ارسال کنید تا بتوانید آن‌ها را در ابزارهای اشکال‌زدایی مختص پلاتفرم مثل RenderDoc،‏ PIX، یا Instruments ببینید. ازاین‌پس، وقتی اشکال‌زدایی را برای اشکال‌زدایی فعال می‌کنید، تجربه اشکال‌زدایی بهتری در macOS ارائه می‌شود. دیدن طلوع مسئله:۱۷۸۴

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

اگر گردآوری ناموفق بود، HLSL را ثبت کنید

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

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

لغو تنظیم میان‌گیر رأس

گذراندن nullptr به‌جای wgpu::Buffer به SetVertexBuffer() در wgpu::RenderPassEncoder یا wgpu::RenderBundleEncoder به شما امکان می‌دهد بافر رأس ازپیش تنظیم‌شده را در جایگاه معینی لغو تنظیم کنید. issue dawn:1675 را ببینید.

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

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

پیوست‌های موقت

می‌توانید پیوست‌هایی ایجاد کنید که به عملیات عبور رندر اجازه می‌دهد در حافظه کاشی باقی بماند و از ترافیک VRAM جلوگیری می‌کند و احتمالاً با تنظیم wgpu::TextureUsage::TransientAttachment استفاده، از تخصیص VRAM برای بافت‌ها جلوگیری می‌کند. این ویژگی فقط برای Metal و Vulkan پشتیبانی می‌شود. طلوع مشکل: ۱۶۹۵ را ببینید.

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 را بااستفاده از یک دستورگان Python که فایل‌های DEPS را می‌خواند واکشی کنید، به‌جای اینکه همه پروژه‌هایی که به آن وابسته هستند ملزم به نصب depot_tools باشند. تغییر ۱۳۱۷۵۰ را ببینید.

ویژگی‌های جدید 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