تاریخ انتشار: 8 ژانویه 2025
استفاده از نمای بافت
نماهای بافت GPU در حال حاضر همه پرچم های استفاده را از بافت GPU منبع خود به ارث می برند. این می تواند مشکل ساز باشد زیرا برخی از قالب های نمایش با کاربردهای خاص ناسازگار هستند. برای رفع این مشکل، فراخوانی createView()
با عضو اختیاری usage
به شما امکان میدهد به صراحت زیرمجموعهای از پرچمهای استفاده بافت منبع را مشخص کنید که با فرمت view انتخابی سازگار است.
این تغییر به اعتبارسنجی اولیه و کنترل دقیق تری بر نحوه استفاده از نما اجازه می دهد. همچنین با دیگر APIهای گرافیکی که در آن پرچمهای استفاده پارامترهای رایج در ایجاد نما هستند، همسو میشوند و فرصتهای بهینهسازی را ارائه میدهند.
قطعه زیر، ورودی chromestatus و شماره 363903526 را ببینید.
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.
});
ترکیب بافت های شناور 32 بیتی
بافتهای ممیز شناور ۳۲ بیتی برای رندر HDR ضروری هستند تا طیف وسیعی از مقادیر رنگ را حفظ کنند و از ایجاد باندهای رنگی جلوگیری کنند. برای مثال در تجسم علمی.
ویژگی جدید GPU "float32-blendable"
بافتهای GPU را با فرمتهای "r32float"
، "rg32float"
و "rgba32float"
قابل ترکیب میکند. ایجاد یک خط لوله رندر که از ترکیب با هر پیوست با فرمت float32 استفاده می کند، اکنون هنگام درخواست یک دستگاه GPU با این ویژگی امکان پذیر است.
قطعه زیر، ورودی chromestatus و شماره 369649348 را ببینید.
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
در معرض دید قرار می گیرد. آنها مشابه ویژگی info
GPUAdapter
موجود هستند.
قطعه زیر، ورودی chromestatus و شماره 376600838 را ببینید.
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 معتبر برمیگرداند، با وجود پیکربندی نادرست بافت بوم GPU، جلوگیری میکند. اطلاعات بیشتر در شماره 372837859 موجود است.
فیلتر کردن محدودیت های نمونه بر روی بافت ها
استفاده از بافتهای قالب "sint"
، "uint"
و « depth"
با فیلتر کردن نمونهها قبلا مجاز بود. اکنون به درستی استفاده از بافت فرمت "sint"
یا "uint"
با یک نمونهگر فیلتر را غیرممکن میکند. توجه داشته باشید که در حال حاضر در صورت استفاده از بافت " depth"
با یک نمونهگر فیلتر، هشداری صادر میکند، زیرا در آینده غیرمجاز خواهد بود. به شماره 376497143 مراجعه کنید.
این محدودیتها به این معنی است که استفاده از بافت عمقی با یک نمونهگر غیرفیلترکننده نیازمند ایجاد دستی طرحبندیهای گروه پیوند است. این به این دلیل است که طرحبندیهای گروه bind ایجاد شده به صورت خودکار از این ترکیب پشتیبانی نمیکنند. شماره Spec 4952 شامل یک پیشنهاد در دست بررسی برای رفع این محدودیت در آینده است.
آزمایش زیرگروه های گسترده
آزمایش زیرگروهها ، که ابتدا قرار بود در Chrome 131 به پایان برسد، به Chrome 133 تمدید شد و در 16 آوریل 2025 به پایان رسید. در حالی که اولین آزمایش اولیه روی عملکرد متمرکز بود، فاقد پادمانهای مهم قابل حمل بودن بود. این پادمانها اکنون اضافه میشوند و احتمالاً باعث ایجاد خطا در کد موجود میشوند.
بهبود تجربه توسعه دهندگان
هنگامی که گزینه powerPreference
با requestAdapter()
در ویندوز استفاده می شود، اکنون یک هشدار در DevTools قابل مشاهده است. زمانی که Chrome بداند چگونه از دو GPU مختلف استفاده کند و نتایج را بین آنها ترکیب کند، این هشدار حذف خواهد شد. شماره 369219127 را ببینید.
اندازه بافر GPU اکنون در پیام خطا هنگام ایجاد بافر GPU بسیار بزرگ وجود دارد. شماره 374167798 را ببینید.
پشتیبانی آزمایشی از فرمتهای بافت عادی ۱۶ بیتی
فرمتهای بافت نرمالشده با امضای 16 بیتی و عادیسازیشده بدون علامت اکنون بهترتیب در پشت ویژگیهای GPU "chromium-experimental-snorm16-texture-formats"
و "chromium-experimental-unorm16-texture-formats"
به صورت آزمایشی در دسترس هستند، در حالی که آنها برای استانداردسازی مورد بحث قرار میگیرند. .
این ویژگیها پشتیبانی از قالبهای بافت عادی ۱۶ بیتی با قابلیتهای COPY_SRC
، COPY_DST
، TEXTURE_BINDING
، RENDER_ATTACHMENT
، نمونهبرداری چندگانه و قابلیتهای حل را اضافه میکنند. قالبهای اضافی عبارتند از: "r16unorm"
، "rg16unorm"
"rgba16unorm"
، "r16snorm"
، "rg16snorm"
، "rg16snorm" و "rgba16snorm"
.
تا زمانی که این ویژگیهای آزمایشی استاندارد شوند، پرچم «پشتیبانی ناامن WebGPU» را در chrome://flags/#enable-unsafe-webgpu
فعال کنید تا در Chrome در دسترس قرار گیرند.
قطعه و شماره 374790898 زیر را ببینید.
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)
منسوخ شده اند. به شماره 368672123 مراجعه کنید.
webgpu.h C API تمام char const *
به یک ساختار WGPUStringView
تغییر داده است که یک view را به یک رشته رمزگذاری شده UTF-8 تعریف می کند. مانند یک اشاره گر به داده های رشته، همراه با طول عمل می کند. این به شما امکان می دهد بدون نیاز به کپی کردن با بخش هایی از یک رشته کار کنید. به شماره 42241188 مراجعه کنید.
این تنها برخی از نکات کلیدی را پوشش می دهد. فهرست جامع تعهدات را بررسی کنید.
چه چیزی در WebGPU جدید است
فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.
کروم 132
- استفاده از نمای بافت
- ترکیب بافت های شناور 32 بیتی
- ویژگی GPUDevice adapterInfo
- پیکربندی بافت بوم با فرمت نامعتبر خطای جاوا اسکریپت را ایجاد می کند
- فیلتر کردن محدودیت های نمونه بر روی بافت ها
- آزمایش زیرگروه های گسترده
- بهبود تجربه توسعه دهندگان
- پشتیبانی آزمایشی از فرمتهای بافت عادی ۱۶ بیتی
- به روز رسانی سحر
کروم 131
- فاصله های کلیپ در WGSL
- GPUCanvasContext getConfiguration()
- نقطه و خط اولیه نباید بایاس عمق داشته باشند
- توابع داخلی اسکن جامع برای زیرگروه ها
- پشتیبانی آزمایشی برای چند قرعه کشی غیر مستقیم
- گزینه کامپایل ماژول Shader ریاضی سخت
- حذف GPUAdapter requestAdapterInfo()
- به روز رسانی سحر
کروم 130
- ترکیب منبع دوگانه
- بهبود زمان کامپایل شیدر در فلز
- منسوخ شدن GPUAdapter requestAdapterInfo()
- به روز رسانی سحر
کروم 129
کروم 128
- آزمایش با زیر گروه ها
- بایاس عمق تنظیم را برای خطوط و نقاط منسوخ کنید
- در صورت جلوگیری از Default، هشدار DevTools خطای ضبط نشده را مخفی کنید
- WGSL ابتدا نمونهگیری را درونیابی میکند و هر کدام را
- به روز رسانی سحر
کروم 127
- پشتیبانی آزمایشی از OpenGL ES در اندروید
- ویژگی اطلاعات GPUAdapter
- بهبودهای WebAssembly interop
- خطاهای رمزگذار فرمان بهبود یافته است
- به روز رسانی سحر
کروم 126
- حد maxTextureArrayLayers را افزایش دهید
- بهینه سازی بارگذاری بافر برای باطن Vulkan
- بهبود زمان کامپایل شیدر
- بافرهای فرمان ارسالی باید منحصر به فرد باشند
- به روز رسانی سحر
کروم 125
کروم 124
- بافت های ذخیره سازی فقط خواندنی و خواندنی و نوشتنی
- پشتیبانی کارگران خدماتی و کارگران مشترک
- ویژگی های اطلاعات آداپتور جدید
- رفع اشکال
- به روز رسانی سحر
کروم 123
- توابع داخلی DP4a در WGSL پشتیبانی می کند
- پارامترهای اشاره گر نامحدود در WGSL
- قند نحوی برای عدم ارجاع کامپوزیت ها در WGSL
- حالت فقط خواندنی را برای جنبه های استنسیل و عمق جدا کنید
- به روز رسانی سحر
کروم 122
- گسترش دسترسی با حالت سازگاری (ویژگی در حال توسعه)
- حد maxVertexAttributes را افزایش دهید
- به روز رسانی سحر
کروم 121
- پشتیبانی از WebGPU در اندروید
- برای کامپایل شیدر در ویندوز به جای FXC از DXC استفاده کنید
- پرس و جوهای مهر زمانی در گذرنامه های محاسبه و ارائه
- نقاط ورودی پیش فرض به ماژول های سایه زن
- پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
- اطلاعات انبوه حافظه
- به روز رسانی سحر
کروم 120
- پشتیبانی از مقادیر ممیز شناور 16 بیتی در WGSL
- محدودیت ها را فشار دهید
- تغییرات در حالت عمقی-استنسیل
- به روز رسانی اطلاعات آداپتور
- کوانتیزاسیون پرس و جوهای مهر زمانی
- ویژگی های تمیز کردن فنری
کروم 119
کروم 118
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture()
- پشتیبانی آزمایشی از بافت ذخیرهسازی خواندنی-نوشتنی و فقط خواندنی
- به روز رسانی سحر
کروم 117
- بافر راس را تنظیم نکنید
- گروه bind را تنظیم نکنید
- هنگام گم شدن دستگاه، خطاهای ایجاد خط لوله ناهمگام را خاموش کنید
- به روز رسانی های ایجاد ماژول سایه زن SPIR-V
- بهبود تجربه توسعه دهندگان
- ذخیره سازی خطوط لوله با طرح تولید خودکار
- به روز رسانی سحر
کروم 116
- یکپارچه سازی WebCodecs
- دستگاه گمشده توسط GPUAdapter
requestDevice()
برگردانده شد - در صورت فراخوانی
importExternalTexture()
پخش ویدیو را روان نگه دارید - مطابقت با مشخصات
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 115
- پشتیبانی از پسوندهای زبان WGSL
- پشتیبانی آزمایشی از Direct3D 11
- GPU گسسته را به طور پیشفرض با برق AC دریافت کنید
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 114
- بهینه سازی جاوا اسکریپت
- getCurrentTexture() روی بوم پیکربندی نشده خطای InvalidState را ایجاد می کند
- به روز رسانی WGSL
- به روز رسانی سحر