منتشرشده: ۸ ژانویه ۲۰۲۵
استفاده از نمای بافت
نمای بافت GPU درحالحاضر همه پرچمهای استفاده را از بافت GPU منبع خود بهارث میبرد. این میتواند مشکلساز باشد زیرا برخیاز قالبهای نمایشی با برخیاز کاربردها ناسازگار هستند. برای رفع این مشکل، فراخوانی createView() با عضو اختیاری usage به شما امکان میدهد زیرمجموعهای از پرچمهای استفاده بافت منبع را که با قالب نمای انتخابی سازگار است بهطور صریح مشخص کنید.
این تغییر امکان اعتبارسنجی پیشاپیش و کنترل دقیقتر بر نحوه استفاده از نما را فراهم میکند. این ویژگی همچنین با دیگر APIهای گرافیکی که در آنها پرچمهای استفاده پارامترهای رایج در ایجاد نما هستند همراستا است و فرصتهای بهینهسازی را ارائه میدهد.
تکهکد زیر، ورودی chromestatus، و مسئله ۳۶۳۹۰۳۵۲۶ را ببینید.
const texture = myDevice.createTexture({
size: [4, 4],
format: "rgba8unorm",
usage:
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.STORAGE_BINDING,
viewFormats: ["rgba8unorm-srgb"],
});
const view = texture.createView({
format: 'rgba8unorm-srgb',
usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});
ترکیب بافتهای شناور ۳۲ بیتی
بافتهای شناور ۳۲ بیتی برای رندرینگ HDR ضروری هستند تا طیف گستردهای از مقادیر رنگ را حفظ کنند و از آرتیفکتهای باندینگ رنگ جلوگیری کنند. برای مثال در تجسم علمی.
ویژگی جدید "float32-blendable" GPU باعث میشود بافتهای GPU با قالبهای "r32float"، "rg32float"، و "rgba32float" ترکیبپذیر شوند. اکنون هنگام درخواست دستگاه GPU با این ویژگی، ایجاد خط لوله پردازشی که از ترکیب با هر پیوست قالب float32 استفاده میکند امکانپذیر است.
به گزیده زیر، ورودی chromestatus، و مشکل ۳۶۹۶۴۹۳۴۸ مراجعه کنید.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-blendable"],
});
// ... Creation of shader modules is omitted for readability.
// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
vertex: { module: myVertexShaderModule },
fragment: {
module: myFragmentShaderModule,
targets: [
{
format: "rgba32float",
blend: { color: {}, alpha: {} },
},
],
},
layout: "auto",
});
// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...
مشخصه GPUDevice adapterInfo
برای کتابخانههایی که از اشیای ارائهشده توسط کاربر GPUDevice استفاده میکنند، دسترسی به اطلاعات مربوط به GPU فیزیکی مهم است، زیرا ممکن است لازم باشد براساس معماری GPU بهینهسازی کنند یا راهکارهای جانبی پیادهسازی کنند. اگرچه ازطریق شیء GPUAdapter میتوان به این اطلاعات دسترسی داشت، اما راه مستقیمی برای دریافت آن از GPUDevice بهتنهایی وجود ندارد. این کار میتواند دردسرساز باشد، زیرا ممکن است کاربران را ملزم کند که همراه با GPUDevice اطلاعات بیشتری ارائه دهند.
برای رسیدگی به این مشکل، GPUAdapterInfo اکنون ازطریق مشخصه GPUDevice adapterInfo نمایان شده است. اینها مشابه مشخصه GPUAdapter info موجود است.
تکهکد زیر، ورودی chromestatus، و مشکل ۳۷۶۶۰۰۸۳۸ را ببینید.
function optimizeForGpuDevice(device) {
if (device.adapterInfo.vendor === "amd") {
// Use AMD-specific optimizations.
} else if (device.adapterInfo.architecture.includes("turing")) {
// Optimize for NVIDIA Turing architecture.
}
}
پیکربندی زمینه بوم نقاشی با قالب نامعتبر باعث خطای جاوا اسکریپت میشود
قبلاً، استفاده از قالب بافت نامعتبر با روش configure() زمینه بوم GPU منجر به خطای اعتبارسنجی GPU میشد. این به پرتاب کردن TypeError جاوا اسکریپت تغییر کرده است. این کار از سناریوهایی که در آنها getCurrentTexture() با وجود پیکربندی نادرست بافت GPU برمیگرداند جلوگیری میکند. اطلاعات بیشتر را میتوانید در مسئله ۳۷۲۸۳۷۸۵۹ پیدا کنید.
محدودیتهای نمونهبرداری فیلتر کردن بافتها
قبلاً استفاده از "sint"، "uint"، و «بافتهای قالب depth" با نمونههای فیلترشده» مجاز بود. اکنون بهدرستی استفاده از بافت قالب "sint" یا "uint" را با نمونهبرداری فیلتر کردن غیرمجاز میکند. توجه داشته باشید که درحالحاضر اگر از «depth" بافت با نمونهبردار فیلتردار» استفاده کنید، هشداری صادر میکند زیرا در آینده مجاز نخواهد بود. مشکل ۳۷۶۴۹۷۱۴۳ را ببینید.
این محدودیتها به این معنی است که استفاده از بافت عمق با نمونهبر غیرفیلتر نیازمند ایجاد دستی چیدمانهای گروه پیوند است. دلیل این است که چیدمانهای گروه پیوند تولیدشده «خودکار» هنوز از این ترکیب پشتیبانی نمیکنند. مشکل مشخصات ۴۹۵۲ حاوی پیشنهادی است که در دست بررسی است تا این محدودیت در آینده برطرف شود.
آزمایش زیرگروههای گسترده
آزمایش زیرگروهها که در ابتدا قرار بود در Chrome 131 پایان یابد، تا Chrome 133 تمدید شده است و در ۱۶ آوریل ۲۰۲۵ به پایان میرسد. درحالیکه اولین آزمایش معرفی ویژگی جدید بر عملکرد تمرکز داشت، فاقد پادمانهای حیاتی قابلیت حمل بود. این پادمانها اکنون اضافه خواهد شد و احتمالاً باعث بروز خطا در کد موجود خواهد شد.
بهبود تجربه توسعهدهنده
اکنون وقتی از گزینه powerPreference با requestAdapter() در Windows استفاده میشود، هشداری در DevTools نمایان میشود. وقتی Chrome بداند چگونه از دو GPU مختلف استفاده کند و نتایج را بین آنها ترکیب کند، این هشدار برداشته خواهد شد. مشکل ۳۶۹۲۱۹۱۲۷ را ببینید.
اکنون اندازه بافر GPU هنگام ایجاد بافر GPU بسیار بزرگ در پیام خطا نشان داده میشود. مشکل ۳۷۴۱۶۷۷۹۸ را ببینید.
پشتیبانی آزمایشی از قالبهای بافت نرمالسازیشده ۱۶ بیتی
قالبهای بافت نرمالسازیشده امضادار ۱۶ بیتی و نرمالسازیشده بدون امضا اکنون بهصورت آزمایشی بهترتیب در پشت ویژگیهای GPU "chromium-experimental-snorm16-texture-formats" و "chromium-experimental-unorm16-texture-formats" دردسترس هستند و درحال بحث و بررسی برای استانداردسازی هستند.
این ویژگیها از قالبهای بافت نرمالسازیشده ۱۶ بیتی با COPY_SRC، COPY_DST، TEXTURE_BINDING، RENDER_ATTACHMENT کاربرد، قابلیتهای نمونهبرداری چندگانه، و قابلیتهای حلوفصل پشتیبانی میکنند. قالبهای اضافی عبارتاند از "r16unorm"، "rg16unorm"، "rgba16unorm"، "r16snorm"، "rg16snorm"، و "rgba16snorm".
تا زمانی که این ویژگیهای آزمایشی استانداردسازی شوند، پرچم «پشتیبانی ناامن از WebGPU» را در chrome://flags/#enable-unsafe-webgpu فعال کنید تا در Chrome دردسترس قرار گیرند.
تکه زیر و مشکل ۳۷۴۷۹۰۸۹۸ را ببینید.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});
// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
size: [4, 4],
format: "rgba16snorm",
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
// Send the appropriate commands to the GPU...
بهروزرسانیهای سپیدهدم
روشهای EnumerateFeatures(FeatureName * features) از wgpu::Adapter و wgpu::Device منسوخ شدهاند و بهجای آنها از GetFeatures(SupportedFeatures * features) استفاده میشود. به مسئله ۳۶۸۶۷۲۱۲۳ مراجعه کنید.
میانای برنامهسازی کاربردی C در webgpu.h همه char const * را به ساختار WGPUStringView تغییر داده است که نمایی از رشته کدبندیشده UTF-8 را تعریف میکند. این متغیر مثل اشارهگری به دادههای رشته عمل میکند و با طول آن جفت میشود. این کار به شما امکان میدهد بدون نیاز به کپی کردن رشته، با بخشهایی از آن کار کنید. مشکل ۴۲۲۴۱۱۸۸ را ببینید.
این فقط برخیاز نکات برجسته کلیدی را پوشش میدهد. فهرست کامل تعهدات را بررسی کنید.
ویژگیهای جدید WebGPU
فهرستی از همه مواردی که در مجموعه ویژگیهای جدید WebGPU پوشش داده شده است.
۱۵۵-۱۵۶ Chrome
- افزونه WGSL fragment_depth
- فشردهسازی بافت ناهمتراز
- فضاهای رنگی srgb-linear و display-p3-linear
- قالب رأس snorm10-10-10-2 اضافی
- پشتیبانی f16 در NVIDIA با Vulkan
- بهروزرسانیهای سپیدهدم
۱۵۳-۱۵۴ Chrome
- افزونه WGSL buffer_view
- افزونه WGSL swizzle_assignment
- بهروزرسانیهای افزونه WGSL
- بهروزرسانیهای سپیدهدم
Chrome 151-152
۱۴۹-۱۵۰ Chrome
۱۴۷-۱۴۸ Chrome
۱۴۶ Chrome
- پشتیبانی از حالت سازگاری WebGPU در OpenGL ES 3.1
- پیوستهای گذرا
- افزونه WGSL texture_and_sampler_let
- بهروزرسانیهای سپیدهدم
Chrome 145
۱۴۴ Chrome
- افزونه WGSL subgroup_id
- افزونه WGSL uniform_buffer_standard_layout
- WebGPU در Linux
- writeBuffer و writeTexture سریعتر
- بهروزرسانیهای سپیدهدم
۱۴۳ Chrome
- ترکیب کردن عنصر بافت
- برداشتن استفاده از بافت ذخیرهسازی فقطخواندنی bgra8unorm
- بهروزرسانیهای سپیدهدم
۱۴۲ Chrome
Chrome 141
- «رنگآمیزی فروسرخ» تکمیل شد
- تجزیهوتحلیل محدوده عدد صحیح در کامپایلر WGSL
- بهروزرسانی SPIR-V 1.4 برای زیرینه Vulkan
- بهروزرسانیهای سپیدهدم
۱۴۰ Chrome
- درخواستهای دستگاه آداپتور را مصرف میکند
- کوتهنویسی برای استفاده از بافت در جایی که نمای بافت استفاده میشود
- WGSL textureSampleLevel از بافتهای یکبعدی پشتیبانی میکند
- منسوخ کردن استفاده از بافت فضای ذخیرهسازی فقط خواندنی bgra8unorm
- برداشتن مشخصه GPUAdapter isFallbackAdapter
- بهروزرسانیهای سپیدهدم
Chrome 139
- پشتیبانی از بافت سهبعدی برای قالبهای فشرده BC و ASTC
- ویژگی جدید «ویژگیهای اصلی و محدودیتها»
- آزمایش اصلی برای حالت سازگاری WebGPU
- بهروزرسانیهای سپیدهدم
Chrome 138
- کوتهنویسی برای استفاده از بافر بهعنوان منبع اتصال
- تغییرات الزامات اندازه برای میانههای نگاشتشده در زمان ایجاد
- گزارش معماری برای واحدهای پردازش گرافیکی اخیر
- منسوخ کردن مشخصه GPUAdapter isFallbackAdapter
- بهروزرسانیهای سپیدهدم
Chrome 137
- استفاده از نمای بافت برای پیوند externalTexture
- کپی کردن میانگیرها بدون مشخص کردن اندازه و جبران
- WGSL workgroupUniformLoad بااستفاده از اشارهگر به اتمی
- مشخصه GPUAdapterInfo powerPreference
- برداشتن مشخصه compatibilityMode در GPURequestAdapterOptions
- بهروزرسانیهای سپیدهدم
Chrome 136
- مشخصه GPUAdapterInfo isFallbackAdapter
- بهبود زمان گردآوری سایهزن در D3D12
- ذخیره و کپی کردن تصاویر بوم
- محدودیتهای حالت سازگاری بهینهگر
- بهروزرسانیهای سپیدهدم
۱۳۵ Chrome
- اجازه دادن به ایجاد چیدمان خط لوله با چیدمان گروه پیوند تهی
- اجازه دادن به درگاههای نمایش برای گسترش فراتر از محدودههای هدفهای پردازشی
- دسترسی آسانتر به حالت سازگاری آزمایشی در Android
- برداشتن محدودیت maxInterStageShaderComponents
- بهروزرسانیهای سپیدهدم
۱۳۴ Chrome
- بهبود دادن حجم کار یادگیری ماشین با زیرگروهها
- برداشتن پشتیبانی از انواع بافت فیلترپذیر شناور بهعنوان ترکیبشدنی
- بهروزرسانیهای سپیدهدم
Chrome 133
- قالبهای رأس تکمؤلفه و unorm8x4-bgra اضافی
- اجازه دادن به درخواست محدودیتهای ناشناخته با مقدار تعریفنشده
- تغییرات قوانین تراز WGSL
- بهبود عملکرد WGSL با کنار گذاشتن
- استفاده از displaySize در VideoFrame برای بافتهای خارجی
- مدیریت تصاویر با جهتگیریهای غیرپیشفرض بااستفاده از copyExternalImageToTexture
- بهبود تجربه توسعهدهنده
- فعال کردن حالت سازگاری با featureLevel
- پاکسازی ویژگیهای زیرگروه آزمایشی
- منسوخ کردن محدودیت maxInterStageShaderComponents
- بهروزرسانیهای سپیدهدم
۱۳۲ Chrome
- استفاده از نمای بافت
- ترکیب بافتهای شناور ۳۲ بیتی
- مشخصه GPUDevice adapterInfo
- پیکربندی بافت بوم با قالب نامعتبر باعث خطای جاوا اسکریپت میشود
- محدودیتهای فیلتر کردن نمونهبرداری روی بافتها
- آزمایش زیرگروههای گسترده
- بهبود تجربه توسعهدهنده
- پشتیبانی آزمایشی از قالبهای بافت نرمالسازیشده ۱۶ بیتی
- بهروزرسانیهای سپیدهدم
۱۳۱ Chrome
- فاصلههای کلیپ در WGSL
- GPUCanvasContext getConfiguration()
- نقطه و خطهای اولیه نباید انحراف عمق داشته باشند
- عملکردهای داخلی اسکن فراگیر برای زیرگروهها
- پشتیبانی آزمایشی برای چندقرعه غیرمستقیم
- گزینه کامپایل واحد سایهزن ریاضیات دقیق
- برداشتن GPUAdapter requestAdapterInfo()
- بهروزرسانیهای سپیدهدم
Chrome 130
- ترکیب منبع دوگانه
- بهبود زمان گردآوری سایهزن در Metal
- منسوخ شدن GPUAdapter requestAdapterInfo()
- بهروزرسانیهای سپیدهدم
Chrome 129
Chrome 128
- آزمایش با زیرگروهها
- منسوخ کردن تنظیم انحراف عمق برای خطوط و نقاط
- پنهان کردن هشدار DevTools خطای ثبتنشده درصورت preventDefault
- ابتدا نمونهبرداری درونیابی WGSL و سپس
- بهروزرسانیهای سپیدهدم
Chrome 127
- پشتیبانی آزمایشی از OpenGL ES در Android
- مشخصه اطلاعات GPUAdapter
- بهبودهای قابلیت تعامل WebAssembly
- خطاهای بهبودیافته کدبند فرمان
- بهروزرسانیهای سپیدهدم
Chrome 126
- افزایش حد maxTextureArrayLayers
- بهینهسازی بارگذاری بافر برای زیرینه Vulkan
- بهبود زمان گردآوری سایهزن
- بافرهای فرمان ارسالی باید منحصربهفرد باشند
- بهروزرسانیهای سپیدهدم
Chrome 125
Chrome 124
- بافتهای فضای ذخیرهسازی فقط خواندنی و خواندنی-نوشتنی
- پشتیبانی از عاملان خدماتی و عاملان همرسانیشده
- مشخصههای اطلاعات آداپتور جدید
- رفع اشکالها
- بهروزرسانیهای سپیدهدم
Chrome 123
- پشتیبانی از توابع داخلی DP4a در WGSL
- پارامترهای اشارهگر نامحدود در WGSL
- شکر نحوی برای ارجاعزدایی ترکیبات در WGSL
- وضعیت فقط خواندنی جداگانه برای جنبههای ژرفانمایی و عمق
- بهروزرسانیهای سپیدهدم
Chrome 122
- گسترش دسترسی با حالت سازگاری (ویژگی درحال توسعه)
- افزایش حد maxVertexAttributes
- بهروزرسانیهای سپیدهدم
Chrome 121
- پشتیبانی از WebGPU در Android
- استفاده از DXC بهجای FXC برای ترجمه سایهزن در Windows
- پرسشهای مُهر زمان در گذرگاههای محاسباتی و رندر
- نقاط ورودی پیشفرض به واحدهای سایهزن
- پشتیبانی از display-p3 بهعنوان فضای رنگ GPUExternalTexture
- اطلاعات پشتههای حافظه
- بهروزرسانیهای سپیدهدم
Chrome 120
- پشتیبانی از مقادیر ممیز شناور ۱۶ بیتی در WGSL
- محدودیتها را کنار بزنید
- تغییرات در وضعیت عمق-استنسیل
- بهروزرسانیهای اطلاعات آداپتور
- کمّیسازی پُرسمانهای مُهر زمان
- ویژگیهای نظافت بهاره
Chrome 119
- بافتهای شناور ۳۲ بیتی فیلترپذیر
- قالب رأس unorm10-10-10-2
- قالب بافت rgb10a2uint
- بهروزرسانیهای سپیدهدم
Chrome 118
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture() - پشتیبانی آزمایشی از بافت فضای ذخیرهسازی خواندن-نوشتن و فقط خواندنی
- بهروزرسانیهای سپیدهدم
Chrome 117
- لغو تنظیم بافر رأس
- لغو تنظیم گروه پیوند
- بیصدا کردن خطاهای ایجاد خط لوله ناهمزمان هنگام گم شدن دستگاه
- بهروزرسانیهای ایجاد واحد سایهزن SPIR-V
- بهبود تجربه توسعهدهنده
- ذخیره کردن خطوط لوله با چیدمان تولیدشده خودکار
- بهروزرسانیهای سپیدهدم
Chrome 116
- یکپارچهسازی WebCodecs
- دستگاه ازدسترفته توسط GPUAdapter
requestDevice()برگردانده شد - اگر با
importExternalTexture()تماس گرفته شد، بازپخش ویدیو روان باشد - مطابقت با مشخصات
- بهبود تجربه توسعهدهنده
- بهروزرسانیهای سپیدهدم
Chrome 115
- افزونههای زبان WGSL پشتیبانیشده
- پشتیبانی آزمایشی از Direct3D 11
- در حالت اتصال به برق متناوب، بهطور پیشفرض از واحد پردازش گرافیکی مجزا استفاده کنید
- بهبود تجربه توسعهدهنده
- بهروزرسانیهای سپیدهدم
Chrome 114
- بهینهسازی جاوا اسکریپت
- getCurrentTexture() در بوم پیکربندینشده InvalidStateError را پرتاب میکند
- بهروزرسانیهای WGSL
- بهروزرسانیهای سپیدهدم