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

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

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

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

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

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

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

GPU گسسته را به طور پیش‌فرض با برق AC دریافت کنید

در دستگاه‌های macOS دو GPU، اگر requestAdapter() بدون گزینه powerPreference فراخوانی شود، زمانی که دستگاه کاربر برق متناوب باشد، GPU گسسته برگردانده می‌شود. در غیر این صورت، GPU یکپارچه برگردانده می شود. تغییر 4499307 را ببینید.

بهبود تجربه توسعه دهندگان

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

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

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

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

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

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

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

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

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

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

اگر کامپایل نشد، HLSL را وارد کنید

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

به روز رسانی سحر

بافر راس را تنظیم نکنید

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

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

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

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

می‌توانید پیوست‌هایی ایجاد کنید که به عملیات‌های رندر پاس اجازه می‌دهد در حافظه کاشی باقی بمانند، از ترافیک VRAM اجتناب می‌کنند و به طور بالقوه از تخصیص VRAM برای بافت‌ها با تنظیم wgpu::TextureUsage::TransientAttachment استفاده می‌کنند. این ویژگی فقط برای متال و ولکان پشتیبانی می شود. رجوع کنید به شماره سپیده دم: 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 توسط همه پروژه هایی که به آن وابسته هستند، واکشی کنید. تغییر 131750 را ببینید.

چه چیزی در 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