فواصل برش در WGSL
فواصل برش به شما این امکان را میدهد که حجم برش اولیه را با نیمفاصلههای تعریفشده توسط کاربر در خروجی مرحله رأس محدود کنید. تعریف صفحات برش خودتان، کنترل بیشتری بر آنچه در صحنههای WebGPU شما قابل مشاهده است، میدهد. این تکنیک بهویژه برای برنامههایی مانند نرمافزار CAD مفید است، جایی که کنترل دقیق بر تجسم بسیار مهم است.
وقتی ویژگی "clip-distances" در یک GPUAdapter موجود است، از یک GPUDevice با این ویژگی درخواست کنید تا پشتیبانی از فواصل کلیپ در WGSL را دریافت کند، و این افزونه را به طور صریح در کد WGSL خود با enable clip_distances; فعال کنید. پس از فعال شدن، میتوانید از آرایه داخلی clip_distances در سایهزن رأس خود استفاده کنید. این آرایه فواصل را تا یک صفحه کلیپ تعریف شده توسط کاربر نگه میدارد:
- فاصله برش ۰ به این معنی است که رأس روی صفحه قرار دارد.
- فاصله مثبت به این معنی است که رأس درون نیمفضای کلیپ (همان طرفی که میخواهید نگه دارید) قرار دارد.
- فاصله منفی به این معنی است که رأس خارج از نیمفضای کلیپ (ضلعی که میخواهید حذف کنید) قرار دارد.
به قطعه کد زیر، ورودی chromestatus و شماره 358408571 مراجعه کنید.
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
پس از فراخوانی configure() به همراه یک دیکشنری پیکربندی، متد getConfiguration() به شما امکان میدهد پیکربندی زمینه بوم (canvas context) را بررسی کنید. این شامل اعضای device ، format ، usage ، viewFormats ، colorSpace ، toneMapping و alphaMode است. این تابع برای کارهایی مانند بررسی پشتیبانی مرورگر از بوم HDR، همانطور که در نمونه Particles (HDR) نشان داده شده است، مفید است. به قطعه کد زیر، ورودی chromestatus و شماره 370109829 مراجعه کنید.
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 روی مقداری غیر صفر را در صورتی که توپولوژی یک خط لوله رندر از نوع خط یا نقطه باشد، یک خطای اعتبارسنجی تلقی میکند. به شماره 352567424 مراجعه کنید.
توابع داخلی اسکن فراگیر برای زیرگروهها
به عنوان بخشی از آزمایش زیرگروهها ، توابع داخلی زیرگروه زیر در شماره ۳۶۱۳۳۰۱۶۰ اضافه شدهاند:
-
subgroupInclusiveAdd(value): جمع اسکن فراگیر همهvalueفراخوانیهای فعال s در سراسر زیرگروه را برمیگرداند. -
subgroupInclusiveMul(value): ضرب اسکن فراگیر همهvalueفراخوانیهای فعال s در زیرگروه را برمیگرداند.
پشتیبانی آزمایشی از چند ترسیم غیرمستقیم
ویژگی multi-draw indirect GPU به شما امکان میدهد چندین فراخوانی draw را با یک دستور GPU واحد صادر کنید. این امر به ویژه در موقعیتهایی که تعداد زیادی از اشیاء نیاز به رندر شدن دارند، مانند سیستمهای ذرات، نمونهسازی و صحنههای بزرگ، مفید است. متدهای drawIndirect() و drawIndexedIndirect() GPURenderPassEncoder فقط میتوانند یک فراخوانی draw را در یک زمان از یک ناحیه خاص از بافر GPU صادر کنند.
تا زمانی که این ویژگی آزمایشی استاندارد شود، پرچم «پشتیبانی از Unsafe WebGPU» را در chrome://flags/#enable-unsafe-webgpu فعال کنید تا در کروم در دسترس قرار گیرد.
با استفاده از ویژگی GPU غیر استاندارد "chromium-experimental-multi-draw-indirect" در یک GPUAdapter موجود است، یک GPUDevice با این ویژگی درخواست کنید. سپس یک GPUBuffer با استفاده از GPUBufferUsage.INDIRECT برای ذخیره فراخوانیهای ترسیم ایجاد کنید. میتوانید بعداً از آن در متدهای جدید multiDrawIndirect() و multiDrawIndexedIndirect() GPURenderPassEncoder برای صدور فراخوانیهای ترسیم درون یک رندر پس استفاده کنید. به قطعه کد زیر و شماره 356461286 مراجعه کنید.
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 Developer Features" در chrome://flags/#enable-webgpu-developer-features موجود است، به این معنی که این ویژگی فقط برای استفاده در حین توسعه در نظر گرفته شده است. به شماره 42241455 مراجعه کنید.
این گزینه در حال حاضر در Metal و Direct3D پشتیبانی میشود. وقتی محاسبات دقیق غیرفعال باشد، کامپایلر ممکن است سایهزنهای شما را به روشهای زیر بهینه کند:
- نادیده گرفتن احتمال مقادیر NaN و Infinity.
- رفتار با -0 به عنوان +0.
- جایگزینی تقسیم با ضرب سریعتر در معکوس.
- مرتبسازی مجدد عملیات بر اساس ویژگیهای انجمنی و توزیعی.
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 });
حذف تابع requestAdapterInfo() در کارت گرافیک GPUAdapter
متد ناهمزمان (asynchronous requestAdapterInfo() در GPUAdapter زائد است، زیرا شما میتوانید GPUAdapterInfo را به صورت همزمان با استفاده از ویژگی info GPUAdapter دریافت کنید. از این رو، متد غیر استاندارد requestAdapterInfo() در GPUAdapter اکنون حذف شده است. به intent مربوط به remove مراجعه کنید.
بهروزرسانیهای سپیدهدم
فایل اجرایی tint_benchmark هزینه ترجمه شیدرها از WGSL به هر زبان backend را اندازهگیری میکند. برای کسب اطلاعات بیشتر در مورد آن، مستندات جدید را بررسی کنید.
این فقط برخی از نکات برجسته کلیدی را پوشش میدهد. لیست جامع کامیتها را بررسی کنید.
ویژگیهای جدید WebGPU
فهرستی از تمام مواردی که در مجموعه «ویژگیهای جدید WebGPU» پوشش داده شده است.
کروم ۱۴۲
کروم ۱۴۱
- رنگ IR تکمیل شد
- تحلیل محدوده اعداد صحیح در کامپایلر WGSL
- بهروزرسانی SPIR-V 1.4 برای رابط کاربری Vulkan
- بهروزرسانیهای سپیدهدم
کروم ۱۴۰
- درخواستهای دستگاه، آداپتور را مصرف میکنند
- اختصار برای استفاده از بافت در جایی که از نمای بافت استفاده میشود
- WGSL textureSampleLevel از بافتهای تکبعدی پشتیبانی میکند.
- استفاده از بافت ذخیرهسازی فقط خواندنی bgra8unorm را منسوخ کنید
- ویژگی isFallbackAdapter مربوط به GPUAdapter را حذف کنید
- بهروزرسانیهای سپیدهدم
کروم ۱۳۹
- پشتیبانی از بافت سهبعدی برای فرمتهای فشرده BC و ASTC
- ویژگی جدید «ویژگیهای اصلی و محدودیتها»
- نسخه آزمایشی Origin برای حالت سازگاری با WebGPU
- بهروزرسانیهای سپیدهدم
کروم ۱۳۸
- مختصر نویسی برای استفاده از بافر به عنوان منبع اتصال
- تغییرات اندازه مورد نیاز برای بافرهای نگاشت شده در زمان ایجاد
- گزارش معماری برای پردازندههای گرافیکی اخیر
- منسوخ کردن ویژگی isFallbackAdapter در GPUAdapter
- بهروزرسانیهای سپیدهدم
کروم ۱۳۷
- استفاده از نمای بافت برای اتصال خارجی بافت
- بافرها بدون مشخص کردن آفستها و اندازه، کپی میکنند
- بارگذاری یکنواخت گروه کاری WGSL با استفاده از اشارهگر به اتمی
- ویژگی powerPreference آداپتور GPU
- ویژگی سازگاری GPURequestAdapterOptions را حذف کنید.
- بهروزرسانیهای سپیدهدم
کروم ۱۳۶
- GPUAdapterInfo ویژگی آداپتور برگشتی است
- بهبود زمان کامپایل شیدر در D3D12
- تصاویر بوم را ذخیره و کپی کنید
- محدودیتهای حالت سازگاری را بردارید
- بهروزرسانیهای سپیدهدم
کروم ۱۳۵
- اجازه ایجاد طرح خط لوله با طرح گروه اتصال تهی
- اجازه دهید نماها از مرزهای اهداف رندر فراتر روند
- دسترسی آسانتر به حالت سازگاری آزمایشی در اندروید
- حذف محدودیت maxInterStageShaderComponents
- بهروزرسانیهای سپیدهدم
کروم ۱۳۴
- بهبود حجم کار یادگیری ماشین با زیرگروهها
- حذف پشتیبانی از انواع بافتهای قابل فیلتر شدن با شناور به عنوان بافتهای قابل ترکیب
- بهروزرسانیهای سپیدهدم
کروم ۱۳۳
- فرمتهای رأس اضافی unorm8x4-bgra و 1-component
- اجازه دهید محدودیتهای ناشناخته با مقدار نامشخص درخواست شوند
- تغییرات قوانین ترازبندی WGSL
- افزایش عملکرد WGSL با حذف
- استفاده از VideoFrame displaySize برای بافتهای خارجی
- مدیریت تصاویر با جهتهای غیر پیشفرض با استفاده از copyExternalImageToTexture
- بهبود تجربه توسعهدهنده
- فعال کردن حالت سازگاری با featureLevel
- پاکسازی ویژگیهای زیرگروه آزمایشی
- محدودیت maxInterStageShaderComponents را منسوخ کنید
- بهروزرسانیهای سپیدهدم
کروم ۱۳۲
- استفاده از نمای بافت
- ترکیب بافتهای شناور ۳۲ بیتی
- ویژگی اطلاعات آداپتور GPUDevice
- پیکربندی زمینه بوم با قالب نامعتبر، خطای جاوا اسکریپت ایجاد میکند
- فیلتر کردن محدودیتهای نمونهبرداری روی بافتها
- آزمایش زیرگروههای توسعهیافته
- بهبود تجربه توسعهدهنده
- پشتیبانی آزمایشی از فرمتهای بافت نرمالشدهی ۱۶ بیتی
- بهروزرسانیهای سپیدهدم
کروم ۱۳۱
- فواصل برش در WGSL
- تابع ()GPUCanvasContext getConfiguration
- اشکال هندسی اولیه نقطه و خط نباید دارای بایاس عمق باشند.
- توابع داخلی اسکن فراگیر برای زیرگروهها
- پشتیبانی آزمایشی از چند ترسیم غیرمستقیم
- گزینه کامپایل ماژول شیدر با محاسبات دقیق
- حذف تابع requestAdapterInfo() در کارت گرافیک GPUAdapter
- بهروزرسانیهای سپیدهدم
کروم ۱۳۰
- ترکیب دو منبعی
- بهبود زمان کامپایل شیدر در Metal
- منسوخ شدن تابع GPUAdapter requestAdapterInfo()
- بهروزرسانیهای سپیدهدم
کروم ۱۲۹
کروم ۱۲۸
- آزمایش با زیرگروهها
- منسوخ کردن تنظیم بایاس عمق برای خطوط و نقاط
- اگر preventDefault خطای ضبط نشده را پنهان کنید، هشدار DevTools
- ابتدا نمونهبرداری درونیابی WGSL و یا
- بهروزرسانیهای سپیدهدم
کروم ۱۲۷
- پشتیبانی آزمایشی از OpenGL ES در اندروید
- ویژگی اطلاعات GPUAdapter
- بهبودهای تعامل وباسمبلی
- بهبود خطاهای انکودر فرمان
- بهروزرسانیهای سپیدهدم
کروم ۱۲۶
- افزایش محدودیت maxTextureArrayLayers
- بهینهسازی آپلود بافر برای بکاند ولکان
- بهبود زمان کامپایل سایهزن
- بافرهای دستور ارسالی باید منحصر به فرد باشند
- بهروزرسانیهای سپیدهدم
کروم ۱۲۵
کروم ۱۲۴
- بافتهای ذخیرهسازی فقط خواندنی و خواندنی-نوشتنی
- پشتیبانی از کارگران خدماتی و کارگران اشتراکی
- ویژگیهای اطلاعات آداپتور جدید
- رفع اشکالات
- بهروزرسانیهای سپیدهدم
کروم ۱۲۳
- پشتیبانی از توابع داخلی DP4a در WGSL
- پارامترهای اشارهگر بدون محدودیت در WGSL
- شکر نحوی برای ارجاعزدایی از ترکیبات در WGSL
- حالت فقط خواندنی جداگانه برای استنسیل و جنبههای عمق
- بهروزرسانیهای سپیدهدم
کروم ۱۲۲
- گسترش دسترسی با حالت سازگاری (ویژگی در حال توسعه)
- افزایش محدودیت maxVertexAttributes
- بهروزرسانیهای سپیدهدم
کروم ۱۲۱
- پشتیبانی از WebGPU در اندروید
- برای کامپایل سایهزن در ویندوز، به جای FXC از DXC استفاده کنید
- کوئریهای برچسب زمانی در پاسهای محاسبه و رندر
- نقاط ورودی پیشفرض به ماژولهای سایهزن
- پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
- اطلاعات مربوط به تودههای حافظه
- بهروزرسانیهای سپیدهدم
کروم ۱۲۰
- پشتیبانی از مقادیر ممیز شناور ۱۶ بیتی در WGSL
- محدودیتها را کنار بزنید
- تغییرات در حالت عمق شابلون
- بهروزرسانیهای اطلاعات آداپتور
- کوئستیزاسیون کوئستسنجی کوئستسنجی کوئستسنجی با مهر زمانی
- ویژگیهای نظافت بهاری
کروم ۱۱۹
- بافتهای شناور ۳۲ بیتی قابل فیلتر
- قالب رأس unorm10-10-10-2
- فرمت بافت rgb10a2uint
- بهروزرسانیهای سپیدهدم
کروم ۱۱۸
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture() - پشتیبانی آزمایشی از بافت ذخیرهسازی خواندنی-نوشتنی و فقط خواندنی
- بهروزرسانیهای سپیدهدم
کروم ۱۱۷
- بافر رأس را غیرفعال کنید
- گروه اتصال را غیرفعال کنید
- خطاهای ناشی از ایجاد خط لوله ناهمگام را هنگام از دست رفتن دستگاه، بیصدا کنید
- بهروزرسانیهای ایجاد ماژول سایهزن SPIR-V
- بهبود تجربه توسعهدهنده
- ذخیره سازی خطوط لوله با طرح بندی خودکار تولید شده
- بهروزرسانیهای سپیدهدم
کروم ۱۱۶
- ادغام WebCodecs
- دستگاه گمشده توسط
requestDevice() از نوع GPUAdapter بازگردانده میشود. - اگر تابع
importExternalTexture()فراخوانی شود، پخش ویدیو روان خواهد بود. - انطباق با مشخصات
- بهبود تجربه توسعهدهنده
- بهروزرسانیهای سپیدهدم
کروم ۱۱۵
- افزونههای زبان WGSL پشتیبانیشده
- پشتیبانی آزمایشی از Direct3D 11
- به طور پیش فرض از پردازنده گرافیکی مجزا با برق AC استفاده کنید
- بهبود تجربه توسعهدهنده
- بهروزرسانیهای سپیدهدم
کروم ۱۱۴
- بهینهسازی جاوا اسکریپت
- تابع ()getCurrentTexture روی بوم پیکربندی نشده، خطای InvalidStateError را نمایش میدهد.
- بهروزرسانیهای WGSL
- بهروزرسانیهای سپیدهدم