فاصله های کلیپ در WGSL
فاصله های کلیپ به شما امکان می دهد حجم کلیپ های اولیه را با نیم فاصله های تعریف شده توسط کاربر در خروجی مرحله راس محدود کنید. تعریف صفحات برش خود کنترل بیشتری بر آنچه در صحنه های WebGPU شما قابل مشاهده است می دهد. این تکنیک به ویژه برای برنامه هایی مانند نرم افزار CAD مفید است، جایی که کنترل دقیق روی تجسم بسیار مهم است.
هنگامی که ویژگی "clip-distances"
در یک GPUAdapter در دسترس است، از یک GPUDevice با این ویژگی درخواست کنید تا از فاصله های کلیپ در WGSL پشتیبانی کند و به صراحت این برنامه افزودنی را در کد WGSL خود با enable clip_distances;
. پس از فعال شدن، میتوانید از آرایه داخلی clip_distances
در سایهزن راس خود استفاده کنید. این آرایه فاصله ها را با یک صفحه کلیپ تعریف شده توسط کاربر حفظ می کند:
- فاصله گیره 0 به این معنی است که راس روی صفحه قرار دارد.
- فاصله مثبت به این معنی است که راس در داخل گیره نیمه فاصله است (سمتی که می خواهید نگه دارید).
- فاصله منفی به این معنی است که راس خارج از نیم فاصله کلیپ است (سمت مورد نظر برای دور انداختن).
قطعه زیر، ورودی 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()
هنگامی که GPUCanvasContext configure()
با یک فرهنگ لغت پیکربندی فراخوانی شد، متد GPUCanvasContext getConfiguration()
به شما امکان می دهد پیکربندی بافت بوم را بررسی کنید. این شامل device
، format
، usage
، viewFormats
، colorSpace
، toneMapping
و اعضای alphaMode
است. این برای کارهایی مانند بررسی اینکه آیا مرورگر از بوم HDR پشتیبانی می کند مفید است، همانطور که در نمونه ذرات (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 را ببینید.
توابع داخلی اسکن جامع برای زیرگروه ها
به عنوان بخشی از آزمایش زیرگروه ها ، توابع داخلی زیرگروه زیر در شماره 361330160 اضافه شده است:
-
subgroupInclusiveAdd(value)
: جمع اسکن فراگیر تمامvalue
فراخوانی فعال s را در سراسر زیرگروه برمیگرداند. -
subgroupInclusiveMul(value)
: ضرب اسکن فراگیر تمامvalue
فراخوانی فعال s را در سراسر زیرگروه برمی گرداند.
پشتیبانی آزمایشی برای چند قرعه کشی غیر مستقیم
ویژگی GPU غیرمستقیم multi-draw به شما این امکان را می دهد که با یک دستور GPU تماس های متعددی را صادر کنید. این به ویژه در شرایطی مفید است که تعداد زیادی از اشیاء باید رندر شوند، مانند سیستمهای ذرات، نمونهسازی و صحنههای بزرگ. متدهای drawIndirect()
و drawIndexedIndirect()
GPURenderPassEncoder فقط میتوانند یک فراخوانی واحد را در یک زمان از ناحیه خاصی از بافر GPU صادر کنند.
تا زمانی که این ویژگی آزمایشی استاندارد نشده باشد، پرچم «پشتیبانی ناامن WebGPU» را در chrome://flags/#enable-unsafe-webgpu
فعال کنید تا در Chrome در دسترس قرار گیرد.
با ویژگی 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();
گزینه کامپایل ماژول Shader ریاضی سخت
یک گزینه توسعهدهنده boolean strictMath
به GPUShaderModuleDescriptor اضافه شده است تا به شما امکان میدهد ریاضیات دقیق را در طول کامپایل ماژول سایهزن فعال یا غیرفعال کنید. این ویژگی پشت پرچم «ویژگیهای توسعهدهنده WebGPU» در 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 });
حذف GPUAdapter requestAdapterInfo()
روش ناهمزمان requestAdapterInfo()
اضافی است زیرا میتوانید GPUAdapterInfo را به صورت همزمان با استفاده از ویژگی GPUAdapter info
دریافت کنید. از این رو، روش غیر استاندارد GPUAdapter requestAdapterInfo()
اکنون حذف شده است. قصد حذف را ببینید.
به روز رسانی سحر
فایل اجرایی tint_benchmark
هزینه ترجمه شیدرها از WGSL به هر زبان باطنی را اندازه گیری می کند. برای کسب اطلاعات بیشتر در مورد آن، اسناد جدید را بررسی کنید.
این تنها برخی از نکات کلیدی را پوشش می دهد. فهرست جامع تعهدات را بررسی کنید.
چه چیزی در WebGPU جدید است
فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.
کروم 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
- به روز رسانی سحر