فاصلههای کلیپ در WGSL
فاصلههای کلیپ به شما امکان میدهد حجم کلیپ عناصر اولیه را با فضاهای نیمه تعریفشده توسط کاربر در برونداد مرحله رأس محدود کنید. تعریف کردن سطوح برش خودتان کنترل بیشتری بر آنچه در صحنههای WebGPU شما نمایان است میدهد. این تکنیک بهویژه برای برنامههایی مانند نرمافزار CAD مفید است، جایی که کنترل دقیق بر تجسم بسیار مهم است.
وقتی ویژگی "clip-distances" در GPUAdapter دردسترس باشد، GPUDevice را با این ویژگی درخواست کنید تا از فاصلههای کلیپ در WGSL پشتیبانی کنید و این افزونه را بهطور صریح در کد WGSL خود با enable clip_distances; فعال کنید. پساز فعال شدن، میتوانید از آرایه داخلی clip_distances در سایهزن راس خود استفاده کنید. این آرایه فاصلهها را تا صفحه برش تعریفشده توسط کاربر نگه میدارد:
- فاصله برش ۰ به این معنی است که رأس روی صفحه قرار دارد.
- فاصله مثبت یعنی رأس در فضای نیمه کلیپ (سمتی که میخواهید نگه دارید) قرار دارد.
- فاصله منفی یعنی رأس خارج از فضای نیمه کلیپ (سمتی که میخواهید دور بریزید) است.
تکهکد زیر، ورودی chromestatus، و مسئله ۳۵۸۴۰۸۵۷۱ را ببینید.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("clip-distances")) {
throw new Error("Clip distances support is not available");
}
// Explicitly request clip distances support.
const device = await adapter.requestDevice({
requiredFeatures: ["clip-distances"],
});
const vertexShaderModule = device.createShaderModule({ code: `
enable clip_distances;
struct VertexOut {
@builtin(clip_distances) my_clip_distances : array<f32, 1>,
@builtin(position) my_position : vec4f,
}
@vertex fn main() -> VertexOut {
var output : VertexOut;
output.my_clip_distances[0] = 1;
output.my_position = vec4f(0, 0, 0, 1);
return output;
}
`,
});
// Send the appropriate commands to the GPU...
GPUCanvasContext getConfiguration()
پساز اینکه GPUCanvasContext configure() با فرهنگ پیکربندی فراخوانی شد، روش GPUCanvasContext getConfiguration() به شما امکان میدهد پیکربندی بافت بوم را بررسی کنید. device، format، usage، viewFormats، colorSpace، toneMapping، و alphaMode عضو دارد. این ویژگی برای کارهایی مثل بررسی اینکه آیا مرورگر از بوم HDR پشتیبانی میکند یا نه مفید است، همانطور که در نمونه ذرات (HDR) نشان داده شده است. تکهکد زیر، ورودی chromestatus، و مشکل ۳۷۰۱۰۹۸۲۹ را ببینید.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
// Configure the canvas for HDR.
context.configure({
device,
format: "rgba16float",
toneMapping: { mode: "extended" },
});
const configuration = context.getConfiguration();
if (configuration.toneMapping.mode === "extended") {
// The browser supports HDR canvas.
// Warning! The user still needs a HDR display to enjoy HDR content.
}
عناصر اولیه نقطه و خط نباید انحراف عمق داشته باشند
همانطور که قبلاً اعلام شده است، مشخصات WebGPU اکنون تنظیم depthBias، depthBiasSlopeScale، و depthBiasClamp را روی مقدار غیرصفر در شرایطی که توپولوژی خط لوله رندر از نوع خط یا نقطه باشد، بهعنوان خطای اعتبارسنجی درنظر میگیرد. مسئله ۳۵۲۵۶۷۴۲۴ را ببینید.
عملکردهای داخلی اسکن فراگیر برای زیرگروهها
بهعنوان بخشی از آزمایش زیرگروهها، توابع داخلی زیرگروه زیر در مسئله ۳۶۱۳۳۰۱۶۰ اضافه شده است:
subgroupInclusiveAdd(value): مجموع اسکن فراگیر همه فراخوانیهای فعالvalueدر سراسر زیرگروه را برمیگرداند.-
subgroupInclusiveMul(value): حاصلضرب اسکن فراخوانهای فعالvalues را در سراسر زیرگروه برمیگرداند.
پشتیبانی آزمایشی از چند طراحی غیرمستقیم
ویژگی چند طراحی غیرمستقیم GPU به شما امکان میدهد با یک فرمان GPU، چندین فراخوان طراحی صادر کنید. این بهویژه در شرایطی مفید است که تعداد زیادی از اشیا باید رندر شوند، مانند سیستمهای ذرهای، نمونهسازی، و صحنههای بزرگ. روشهای drawIndirect() و drawIndexedIndirect() GPURenderPassEncoder فقط میتوانند در هر زمان یک فراخوانی رسم از منطقه خاصی از بافر GPU صادر کنند.
تا زمانی که این ویژگی آزمایشی استانداردسازی شود، پرچم «پشتیبانی ناامن از WebGPU» را در chrome://flags/#enable-unsafe-webgpu فعال کنید تا در Chrome دردسترس قرار گیرد.
با ویژگی غیر استاندارد "chromium-experimental-multi-draw-indirect" GPU که در GPUAdapter دردسترس است، GPUDevice را با این ویژگی درخواست کنید. سپس یک GPUBuffer با کاربرد GPUBufferUsage.INDIRECT برای ذخیره کردن فراخوانهای طراحی ایجاد کنید. میتوانید از آن در روشهای جدید multiDrawIndirect() و multiDrawIndexedIndirect() GPURenderPassEncoder برای صدور فراخوانهای طراحی در گذر رندر استفاده کنید. تکهکد زیر و مشکل ۳۵۶۴۶۱۲۸۶ را ببینید.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-multi-draw-indirect")) {
throw new Error("Experimental multi-draw indirect support is not available");
}
// Explicitly request experimental multi-draw indirect support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-multi-draw-indirect"],
});
// Draw call have vertexCount, instanceCount, firstVertex, and firstInstance parameters.
const drawData = new Uint32Array([
3, 1, 0, 0, // First draw call
3, 1, 3, 0, // Second draw call
]);
// Create a buffer to store the draw calls.
const drawBuffer = device.createBuffer({
size: drawData.byteLength,
usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST,
});
device.queue.writeBuffer(drawBuffer, 0, drawData);
// Create a render pipeline, a vertex buffer, and a render pass encoder...
// Inside a render pass, issue the draw calls.
myPassEncoder.setPipeline(myPipeline);
myPassEncoder.setVertexBuffer(0, myVertexBuffer);
myPassEncoder.multiDrawIndirect(drawBuffer, /*offset=*/ 0, /*maxDrawCount=*/ 2);
myPassEncoder.end();
گزینه کامپایل واحد سایهزن ریاضیات دقیق
گزینه توسعهدهنده بولی strictMath به GPUShaderModuleDescriptor اضافه شده است تا به شما امکان دهد ریاضیات دقیق را درطول ترجمه واحد سایهزن فعال یا غیرفعال کنید. این ویژگی در پشت پرچم «ویژگیهای توسعهدهنده WebGPU» در chrome://flags/#enable-webgpu-developer-features دردسترس است، که یعنی این ویژگی فقط برای استفاده درطول توسعه درنظر گرفته شده است. مشکل ۴۲۲۴۱۴۵۵ را ببینید.
درحالحاضر این گزینه در Metal و Direct3D پشتیبانی میشود. وقتی ریاضیات دقیق غیرفعال باشد، کامپایلر ممکن است سایهزنهای شما را با این روشها بهینهسازی کند:
- امکان مقادیر NaN و Infinity نادیده گرفته میشود.
- -۰ بهعنوان +۰ درنظر گرفته میشود.
- جایگزین کردن تقسیم با ضرب سریعتر در معکوس.
- ترتیب مجدد عملیات براساس خواص انجمنی و توزیعی.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const code = `
// Examines the bit pattern of the floating-point number to
// determine if it represents a NaN according to the IEEE 754 standard.
fn isNan(x : f32) -> bool {
bool ones_exp = (bitcast<u32>(x) & 0x7f8) == 0x7f8;
bool non_zero_sig = (bitcast<u32>(x) & 0x7ffff) != 0;
return ones_exp && non_zero_sig;
}
// ...
`;
// Enable strict math during shader compilation.
const shaderModule = device.createShaderModule({ code, strictMath: true });
برداشتن GPUAdapter requestAdapterInfo()
روش ناهمزمان requestAdapterInfo() GPUAdapter اضافی است زیرا ازقبل میتوانید بااستفاده از مشخصه info GPUAdapter، GPUAdapterInfo را بهصورت همزمان دریافت کنید. بنابراین، روش غیر استاندارد GPUAdapter requestAdapterInfo() اکنون برداشته شده است. قصد برداشتن را ببینید.
بهروزرسانیهای سپیدهدم
برنامه اجرایی tint_benchmark هزینه ترجمه سایهزنها از WGSL به زبان هر زیرینه را اندازهگیری میکند. برای کسب اطلاعات بیشتر، مستندات جدید را بررسی کنید.
این فقط برخیاز نکات برجسته کلیدی را پوشش میدهد. فهرست کامل تعهدات را بررسی کنید.
ویژگیهای جدید 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
- بهروزرسانیهای سپیدهدم