پشتیبانی از WebGPU در اندروید
تیم کروم با هیجان اعلام میکند که WebGPU اکنون به طور پیشفرض در کروم ۱۲۱ در دستگاههایی که اندروید ۱۲ و بالاتر دارند و از پردازندههای گرافیکی کوالکام و ARM استفاده میکنند، فعال شده است.
پشتیبانی به تدریج گسترش خواهد یافت تا طیف وسیعتری از دستگاههای اندرویدی، از جمله دستگاههایی که در آینده نزدیک با اندروید ۱۱ کار میکنند را در بر بگیرد. این گسترش به آزمایش و بهینهسازی بیشتر برای اطمینان از یک تجربه یکپارچه در طیف وسیعتری از پیکربندیهای سختافزاری بستگی دارد. به شماره Chrome:1497815 مراجعه کنید.

برای کامپایل سایهزن در ویندوز، به جای FXC از DXC استفاده کنید
کروم اکنون از قدرت DXC (کامپایلر دایرکتایکس) برای کامپایل سایهزنها در دستگاههای ویندوز D3D12 مجهز به سختافزار گرافیکی SM6+ استفاده میکند. پیش از این، WebGPU برای کامپایل سایهزنها در ویندوز به FXC (کامپایلر FX) متکی بود. FXC در حالی که کاربردی بود، فاقد مجموعه ویژگیها و بهینهسازیهای عملکرد موجود در DXC بود.
آزمایشهای اولیه نشان میدهد که هنگام استفاده از DXC در مقایسه با FXC، به طور متوسط 20 درصد افزایش در سرعت کامپایل سایهزن محاسباتی وجود دارد.
کوئریهای برچسب زمانی در پاسهای محاسبه و رندر
پرسوجوهای برچسب زمانی به برنامههای WebGPU اجازه میدهند تا دقیقاً (تا حد نانوثانیه) مدت زمان لازم برای اجرای دستورات GPU و رندر را اندازهگیری کنند. آنها به شدت برای کسب بینش در مورد عملکرد و رفتار بارهای کاری GPU مورد استفاده قرار میگیرند.
وقتی ویژگی "timestamp-query" در GPUAdapter در دسترس باشد، اکنون میتوانید کارهای زیر را انجام دهید:
- درخواست یک
GPUDeviceبا ویژگی"timestamp-query". - یک
GPUQuerySetاز نوع"timestamp"ایجاد کنید. -
GPUComputePassDescriptor.timestampWritesوGPURenderPassDescriptor.timestampWritesبرای تعریف محل نوشتن مقادیر timestamp درGPUQuerySetاستفاده کنید. - مقادیر timestamp را با استفاده از
resolveQuerySet()در یکGPUBufferحل کنید. - با کپی کردن نتایج از
GPUBufferبه CPU، مقادیر timestamp را دوباره بخوانید. - مقادیر timestamp را به صورت یک
BigInt64Arrayرمزگشایی کنید.
به مثال زیر و شماره dawn:1800 مراجعه کنید.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("timestamp-query")) {
throw new Error("Timestamp query feature is not available");
}
// Explicitly request timestamp query feature.
const device = await adapter.requestDevice({
requiredFeatures: ["timestamp-query"],
});
const commandEncoder = device.createCommandEncoder();
// Create a GPUQuerySet which holds 2 timestamp query results: one for the
// beginning and one for the end of compute pass execution.
const querySet = device.createQuerySet({ type: "timestamp", count: 2 });
const timestampWrites = {
querySet,
beginningOfPassWriteIndex: 0, // Write timestamp in index 0 when pass begins.
endOfPassWriteIndex: 1, // Write timestamp in index 1 when pass ends.
};
const passEncoder = commandEncoder.beginComputePass({ timestampWrites });
// TODO: Set pipeline, bind group, and dispatch work to be performed.
passEncoder.end();
// Resolve timestamps in nanoseconds as a 64-bit unsigned integer into a GPUBuffer.
const size = 2 * BigInt64Array.BYTES_PER_ELEMENT;
const resolveBuffer = device.createBuffer({
size,
usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,
});
commandEncoder.resolveQuerySet(querySet, 0, 2, resolveBuffer, 0);
// Read GPUBuffer memory.
const resultBuffer = device.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
commandEncoder.copyBufferToBuffer(resolveBuffer, 0, resultBuffer, 0, size);
// Submit commands to the GPU.
device.queue.submit([commandEncoder.finish()]);
// Log compute pass duration in nanoseconds.
await resultBuffer.mapAsync(GPUMapMode.READ);
const times = new BigInt64Array(resultBuffer.getMappedRange());
console.log(`Compute pass duration: ${Number(times[1] - times[0])}ns`);
resultBuffer.unmap();
با توجه به نگرانیهای مربوط به حمله زمانبندی ، کوئریهای برچسب زمانی با وضوح ۱۰۰ میکروثانیه کوانتیزه میشوند که سازش خوبی بین دقت و امنیت ایجاد میکند. در مرورگر کروم، میتوانید کوانتیزه کردن برچسب زمانی را با فعال کردن پرچم "ویژگیهای توسعهدهنده WebGPU" در chrome://flags/#enable-webgpu-developer-features در طول توسعه برنامه خود غیرفعال کنید. برای کسب اطلاعات بیشتر به کوانتیزه کردن کوئریهای برچسب زمانی مراجعه کنید.
از آنجایی که پردازندههای گرافیکی (GPU) ممکن است گاهی اوقات شمارندهی مهر زمانی (timestamp) را ریست کنند، که میتواند منجر به مقادیر غیرمنتظرهای مانند اختلاف منفی بین مهرهای زمانی شود، توصیه میکنم تغییرات git diff را که پشتیبانی از پرسوجوی مهر زمانی را به نمونهی Compute Boids زیر اضافه میکند، بررسی کنید.

نقاط ورودی پیشفرض به ماژولهای سایهزن
برای بهبود تجربه توسعهدهنده، اکنون میتوانید هنگام ایجاد یک خط لوله محاسبه یا رندر، entryPoint ماژول shader خود را حذف کنید. اگر هیچ نقطه ورودی منحصر به فردی برای مرحله shader در کد shader یافت نشود، یک GPUValidationError فعال میشود. به مثال زیر و خطای dawn:2254 مراجعه کنید.
const code = `
@vertex fn vertexMain(@builtin(vertex_index) i : u32) ->
@builtin(position) vec4f {
const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
return vec4f(pos[i], 0, 1);
}
@fragment fn fragmentMain() -> @location(0) vec4f {
return vec4f(1, 0, 0, 1);
}`;
const module = myDevice.createShaderModule({ code });
const format = navigator.gpu.getPreferredCanvasFormat();
const pipeline = await myDevice.createRenderPipelineAsync({
layout: "auto",
vertex: { module, entryPoint: "vertexMain" },
fragment: { module, entryPoint: "fragmentMain", targets: [{ format }] },
vertex: { module },
fragment: { module, targets: [{ format }] },
});
پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
اکنون میتوانید هنگام وارد کردن یک GPUExternalTexture از ویدیوهای HDR با استفاده از importExternalTexture() ، فضای رنگی مقصد را "display-p3" تنظیم کنید. بررسی کنید که WebGPU چگونه فضاهای رنگی را مدیریت میکند. به مثال زیر مراجعه کنید و chroma:1330250 را اجرا کنید.
// Create texture from HDR video.
const video = document.querySelector("video");
const texture = myDevice.importExternalTexture({
source: video,
colorSpace: "display-p3",
});
اطلاعات مربوط به تودههای حافظه
برای کمک به شما در پیشبینی محدودیتهای حافظه هنگام تخصیص مقادیر زیاد در طول توسعه برنامه، requestAdapterInfo() اکنون اطلاعات memoryHeaps مانند اندازه و نوع هیپهای حافظه موجود در آداپتور را نمایش میدهد. این ویژگی آزمایشی فقط زمانی قابل دسترسی است که پرچم "WebGPU Developer Features" در chrome://flags/#enable-webgpu-developer-features فعال باشد. به مثال زیر و issue dawn:2249 مراجعه کنید.
const adapter = await navigator.gpu.requestAdapter();
const adapterInfo = await adapter.requestAdapterInfo();
for (const { size, properties } of adapterInfo.memoryHeaps) {
console.log(size); // memory heap size in bytes
if (properties & GPUHeapProperty.DEVICE_LOCAL) { /* ... */ }
if (properties & GPUHeapProperty.HOST_VISIBLE) { /* ... */ }
if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
if (properties & GPUHeapProperty.HOST_CACHED) { /* ... */ }
}

بهروزرسانیهای سپیدهدم
متدهای HasWGSLLanguageFeature و EnumerateWGSLLanguageFeatures در wgpu::Instance برای مدیریت ویژگیهای زبان WGSL اضافه شدهاند. به شماره dawn:2260 مراجعه کنید.
ویژگی غیر استاندارد wgpu::Feature::BufferMapExtendedUsages به شما امکان میدهد با wgpu::BufferUsage::MapRead یا wgpu::BufferUsage::MapWrite و هر wgpu::BufferUsage دیگری، یک بافر GPU ایجاد کنید. به مثال زیر و مشکل dawn:2204 توجه کنید.
wgpu::BufferDescriptor descriptor = {
.size = 128,
.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::Uniform
};
wgpu::Buffer uniformBuffer = device.CreateBuffer(&descriptor);
uniformBuffer.MapAsync(wgpu::MapMode::Write, 0, 128,
[](WGPUBufferMapAsyncStatus status, void* userdata)
{
wgpu::Buffer* buffer = static_cast<wgpu::Buffer*>(userdata);
memcpy(buffer->GetMappedRange(), data, sizeof(data));
},
&uniformBuffer);
ویژگیهای زیر مستند شدهاند: اشتراکگذاری بافت ANGLE ، محافظت چندنخی D3D11 ، همگامسازی ضمنی دستگاه ، قالبهای بافت Norm16 ، پرسوجوی مهر زمانی درون گذرها ، ذخیرهسازی محلی پیکسل ، ویژگیهای سایهزن و قالبهای چندصفحهای .
تیم کروم یک مخزن رسمی گیتهاب برای داون ایجاد کرده است.
این فقط برخی از نکات برجسته کلیدی را پوشش میدهد. لیست جامع کامیتها را بررسی کنید.
ویژگیهای جدید WebGPU
فهرستی از تمام مواردی که در مجموعه «ویژگیهای جدید WebGPU» پوشش داده شده است.
کروم ۱۵۱-۱۵۲
- کنترل اندازه زیرگروه
- خطای OperationError برای خطاهای اعتبارسنجی setImmediates
- بهروزرسانیهای سپیدهدم
کروم ۱۴۹-۱۵۰
کروم ۱۴۷-۱۴۸
کروم ۱۴۶
- پشتیبانی از حالت سازگاری WebGPU در OpenGL ES 3.1
- پیوستهای گذرا
- افزونهی texture_and_sampler_let مربوط به WGSL
- بهروزرسانیهای سپیدهدم
کروم ۱۴۵
کروم ۱۴۴
- افزونهی زیرگروه_id در WGSL
- افزونهی uniform_buffer_standard_layout در WGSL
- وبجیپییو در لینوکس
- نوشتن بافر و نوشتن بافت سریعتر
- بهروزرسانیهای سپیدهدم
کروم ۱۴۳
کروم ۱۴۲
کروم ۱۴۱
- رنگ 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
- بهروزرسانیهای سپیدهدم
کروم ۱۱۳
،پشتیبانی از WebGPU در اندروید
تیم کروم با هیجان اعلام میکند که WebGPU اکنون به طور پیشفرض در کروم ۱۲۱ در دستگاههایی که اندروید ۱۲ و بالاتر دارند و از پردازندههای گرافیکی کوالکام و ARM استفاده میکنند، فعال شده است.
پشتیبانی به تدریج گسترش خواهد یافت تا طیف وسیعتری از دستگاههای اندرویدی، از جمله دستگاههایی که در آینده نزدیک با اندروید ۱۱ کار میکنند را در بر بگیرد. این گسترش به آزمایش و بهینهسازی بیشتر برای اطمینان از یک تجربه یکپارچه در طیف وسیعتری از پیکربندیهای سختافزاری بستگی دارد. به شماره Chrome:1497815 مراجعه کنید.

برای کامپایل سایهزن در ویندوز، به جای FXC از DXC استفاده کنید
کروم اکنون از قدرت DXC (کامپایلر دایرکتایکس) برای کامپایل سایهزنها در دستگاههای ویندوز D3D12 مجهز به سختافزار گرافیکی SM6+ استفاده میکند. پیش از این، WebGPU برای کامپایل سایهزنها در ویندوز به FXC (کامپایلر FX) متکی بود. FXC در حالی که کاربردی بود، فاقد مجموعه ویژگیها و بهینهسازیهای عملکرد موجود در DXC بود.
آزمایشهای اولیه نشان میدهد که هنگام استفاده از DXC در مقایسه با FXC، به طور متوسط 20 درصد افزایش در سرعت کامپایل سایهزن محاسباتی وجود دارد.
کوئریهای برچسب زمانی در پاسهای محاسبه و رندر
پرسوجوهای برچسب زمانی به برنامههای WebGPU اجازه میدهند تا دقیقاً (تا حد نانوثانیه) مدت زمان لازم برای اجرای دستورات GPU و رندر را اندازهگیری کنند. آنها به شدت برای کسب بینش در مورد عملکرد و رفتار بارهای کاری GPU مورد استفاده قرار میگیرند.
وقتی ویژگی "timestamp-query" در GPUAdapter در دسترس باشد، اکنون میتوانید کارهای زیر را انجام دهید:
- درخواست یک
GPUDeviceبا ویژگی"timestamp-query". - یک
GPUQuerySetاز نوع"timestamp"ایجاد کنید. -
GPUComputePassDescriptor.timestampWritesوGPURenderPassDescriptor.timestampWritesبرای تعریف محل نوشتن مقادیر timestamp درGPUQuerySetاستفاده کنید. - مقادیر timestamp را با استفاده از
resolveQuerySet()در یکGPUBufferحل کنید. - با کپی کردن نتایج از
GPUBufferبه CPU، مقادیر timestamp را دوباره بخوانید. - مقادیر timestamp را به صورت یک
BigInt64Arrayرمزگشایی کنید.
به مثال زیر و شماره dawn:1800 مراجعه کنید.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("timestamp-query")) {
throw new Error("Timestamp query feature is not available");
}
// Explicitly request timestamp query feature.
const device = await adapter.requestDevice({
requiredFeatures: ["timestamp-query"],
});
const commandEncoder = device.createCommandEncoder();
// Create a GPUQuerySet which holds 2 timestamp query results: one for the
// beginning and one for the end of compute pass execution.
const querySet = device.createQuerySet({ type: "timestamp", count: 2 });
const timestampWrites = {
querySet,
beginningOfPassWriteIndex: 0, // Write timestamp in index 0 when pass begins.
endOfPassWriteIndex: 1, // Write timestamp in index 1 when pass ends.
};
const passEncoder = commandEncoder.beginComputePass({ timestampWrites });
// TODO: Set pipeline, bind group, and dispatch work to be performed.
passEncoder.end();
// Resolve timestamps in nanoseconds as a 64-bit unsigned integer into a GPUBuffer.
const size = 2 * BigInt64Array.BYTES_PER_ELEMENT;
const resolveBuffer = device.createBuffer({
size,
usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,
});
commandEncoder.resolveQuerySet(querySet, 0, 2, resolveBuffer, 0);
// Read GPUBuffer memory.
const resultBuffer = device.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
commandEncoder.copyBufferToBuffer(resolveBuffer, 0, resultBuffer, 0, size);
// Submit commands to the GPU.
device.queue.submit([commandEncoder.finish()]);
// Log compute pass duration in nanoseconds.
await resultBuffer.mapAsync(GPUMapMode.READ);
const times = new BigInt64Array(resultBuffer.getMappedRange());
console.log(`Compute pass duration: ${Number(times[1] - times[0])}ns`);
resultBuffer.unmap();
با توجه به نگرانیهای مربوط به حمله زمانبندی ، کوئریهای برچسب زمانی با وضوح ۱۰۰ میکروثانیه کوانتیزه میشوند که سازش خوبی بین دقت و امنیت ایجاد میکند. در مرورگر کروم، میتوانید کوانتیزه کردن برچسب زمانی را با فعال کردن پرچم "ویژگیهای توسعهدهنده WebGPU" در chrome://flags/#enable-webgpu-developer-features در طول توسعه برنامه خود غیرفعال کنید. برای کسب اطلاعات بیشتر به کوانتیزه کردن کوئریهای برچسب زمانی مراجعه کنید.
از آنجایی که پردازندههای گرافیکی (GPU) ممکن است گاهی اوقات شمارندهی مهر زمانی (timestamp) را ریست کنند، که میتواند منجر به مقادیر غیرمنتظرهای مانند اختلاف منفی بین مهرهای زمانی شود، توصیه میکنم تغییرات git diff را که پشتیبانی از پرسوجوی مهر زمانی را به نمونهی Compute Boids زیر اضافه میکند، بررسی کنید.

نقاط ورودی پیشفرض به ماژولهای سایهزن
برای بهبود تجربه توسعهدهنده، اکنون میتوانید هنگام ایجاد یک خط لوله محاسبه یا رندر، entryPoint ماژول shader خود را حذف کنید. اگر هیچ نقطه ورودی منحصر به فردی برای مرحله shader در کد shader یافت نشود، یک GPUValidationError فعال میشود. به مثال زیر و خطای dawn:2254 مراجعه کنید.
const code = `
@vertex fn vertexMain(@builtin(vertex_index) i : u32) ->
@builtin(position) vec4f {
const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
return vec4f(pos[i], 0, 1);
}
@fragment fn fragmentMain() -> @location(0) vec4f {
return vec4f(1, 0, 0, 1);
}`;
const module = myDevice.createShaderModule({ code });
const format = navigator.gpu.getPreferredCanvasFormat();
const pipeline = await myDevice.createRenderPipelineAsync({
layout: "auto",
vertex: { module, entryPoint: "vertexMain" },
fragment: { module, entryPoint: "fragmentMain", targets: [{ format }] },
vertex: { module },
fragment: { module, targets: [{ format }] },
});
پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
اکنون میتوانید هنگام وارد کردن یک GPUExternalTexture از ویدیوهای HDR با استفاده از importExternalTexture() ، فضای رنگی مقصد را "display-p3" تنظیم کنید. بررسی کنید که WebGPU چگونه فضاهای رنگی را مدیریت میکند. به مثال زیر مراجعه کنید و chroma:1330250 را اجرا کنید.
// Create texture from HDR video.
const video = document.querySelector("video");
const texture = myDevice.importExternalTexture({
source: video,
colorSpace: "display-p3",
});
اطلاعات مربوط به تودههای حافظه
برای کمک به شما در پیشبینی محدودیتهای حافظه هنگام تخصیص مقادیر زیاد در طول توسعه برنامه، requestAdapterInfo() اکنون اطلاعات memoryHeaps مانند اندازه و نوع هیپهای حافظه موجود در آداپتور را نمایش میدهد. این ویژگی آزمایشی فقط زمانی قابل دسترسی است که پرچم "WebGPU Developer Features" در chrome://flags/#enable-webgpu-developer-features فعال باشد. به مثال زیر و issue dawn:2249 مراجعه کنید.
const adapter = await navigator.gpu.requestAdapter();
const adapterInfo = await adapter.requestAdapterInfo();
for (const { size, properties } of adapterInfo.memoryHeaps) {
console.log(size); // memory heap size in bytes
if (properties & GPUHeapProperty.DEVICE_LOCAL) { /* ... */ }
if (properties & GPUHeapProperty.HOST_VISIBLE) { /* ... */ }
if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
if (properties & GPUHeapProperty.HOST_CACHED) { /* ... */ }
}

بهروزرسانیهای سپیدهدم
متدهای HasWGSLLanguageFeature و EnumerateWGSLLanguageFeatures در wgpu::Instance برای مدیریت ویژگیهای زبان WGSL اضافه شدهاند. به شماره dawn:2260 مراجعه کنید.
ویژگی غیر استاندارد wgpu::Feature::BufferMapExtendedUsages به شما امکان میدهد با wgpu::BufferUsage::MapRead یا wgpu::BufferUsage::MapWrite و هر wgpu::BufferUsage دیگری، یک بافر GPU ایجاد کنید. به مثال زیر و مشکل dawn:2204 توجه کنید.
wgpu::BufferDescriptor descriptor = {
.size = 128,
.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::Uniform
};
wgpu::Buffer uniformBuffer = device.CreateBuffer(&descriptor);
uniformBuffer.MapAsync(wgpu::MapMode::Write, 0, 128,
[](WGPUBufferMapAsyncStatus status, void* userdata)
{
wgpu::Buffer* buffer = static_cast<wgpu::Buffer*>(userdata);
memcpy(buffer->GetMappedRange(), data, sizeof(data));
},
&uniformBuffer);
ویژگیهای زیر مستند شدهاند: اشتراکگذاری بافت ANGLE ، محافظت چندنخی D3D11 ، همگامسازی ضمنی دستگاه ، قالبهای بافت Norm16 ، پرسوجوی مهر زمانی درون گذرها ، ذخیرهسازی محلی پیکسل ، ویژگیهای سایهزن و قالبهای چندصفحهای .
تیم کروم یک مخزن رسمی گیتهاب برای داون ایجاد کرده است.
این فقط برخی از نکات برجسته کلیدی را پوشش میدهد. لیست جامع کامیتها را بررسی کنید.
ویژگیهای جدید WebGPU
فهرستی از تمام مواردی که در مجموعه «ویژگیهای جدید WebGPU» پوشش داده شده است.
کروم ۱۵۱-۱۵۲
- کنترل اندازه زیرگروه
- خطای OperationError برای خطاهای اعتبارسنجی setImmediates
- بهروزرسانیهای سپیدهدم
کروم ۱۴۹-۱۵۰
کروم ۱۴۷-۱۴۸
کروم ۱۴۶
- پشتیبانی از حالت سازگاری WebGPU در OpenGL ES 3.1
- پیوستهای گذرا
- افزونهی texture_and_sampler_let مربوط به WGSL
- بهروزرسانیهای سپیدهدم
کروم ۱۴۵
کروم ۱۴۴
- افزونهی زیرگروه_id در WGSL
- افزونهی uniform_buffer_standard_layout در WGSL
- وبجیپییو در لینوکس
- نوشتن بافر و نوشتن بافت سریعتر
- بهروزرسانیهای سپیدهدم
کروم ۱۴۳
کروم ۱۴۲
کروم ۱۴۱
- رنگ 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
- بهروزرسانیهای سپیدهدم
کروم ۱۱۳
،پشتیبانی از WebGPU در اندروید
تیم کروم با هیجان اعلام میکند که WebGPU اکنون به طور پیشفرض در کروم ۱۲۱ در دستگاههایی که اندروید ۱۲ و بالاتر دارند و از پردازندههای گرافیکی کوالکام و ARM استفاده میکنند، فعال شده است.
پشتیبانی به تدریج گسترش خواهد یافت تا طیف وسیعتری از دستگاههای اندرویدی، از جمله دستگاههایی که در آینده نزدیک با اندروید ۱۱ کار میکنند را در بر بگیرد. این گسترش به آزمایش و بهینهسازی بیشتر برای اطمینان از یک تجربه یکپارچه در طیف وسیعتری از پیکربندیهای سختافزاری بستگی دارد. به شماره Chrome:1497815 مراجعه کنید.

برای کامپایل سایهزن در ویندوز، به جای FXC از DXC استفاده کنید
کروم اکنون از قدرت DXC (کامپایلر دایرکتایکس) برای کامپایل سایهزنها در دستگاههای ویندوز D3D12 مجهز به سختافزار گرافیکی SM6+ استفاده میکند. پیش از این، WebGPU برای کامپایل سایهزنها در ویندوز به FXC (کامپایلر FX) متکی بود. FXC در حالی که کاربردی بود، فاقد مجموعه ویژگیها و بهینهسازیهای عملکرد موجود در DXC بود.
آزمایشهای اولیه نشان میدهد که هنگام استفاده از DXC در مقایسه با FXC، به طور متوسط 20 درصد افزایش در سرعت کامپایل سایهزن محاسباتی وجود دارد.
کوئریهای برچسب زمانی در پاسهای محاسبه و رندر
پرسوجوهای برچسب زمانی به برنامههای WebGPU اجازه میدهند تا دقیقاً (تا حد نانوثانیه) مدت زمان لازم برای اجرای دستورات GPU و رندر را اندازهگیری کنند. آنها به شدت برای کسب بینش در مورد عملکرد و رفتار بارهای کاری GPU مورد استفاده قرار میگیرند.
وقتی ویژگی "timestamp-query" در GPUAdapter در دسترس باشد، اکنون میتوانید کارهای زیر را انجام دهید:
- درخواست یک
GPUDeviceبا ویژگی"timestamp-query". - یک
GPUQuerySetاز نوع"timestamp"ایجاد کنید. -
GPUComputePassDescriptor.timestampWritesوGPURenderPassDescriptor.timestampWritesبرای تعریف محل نوشتن مقادیر timestamp درGPUQuerySetاستفاده کنید. - مقادیر timestamp را با استفاده از
resolveQuerySet()در یکGPUBufferحل کنید. - با کپی کردن نتایج از
GPUBufferبه CPU، مقادیر timestamp را دوباره بخوانید. - مقادیر timestamp را به صورت یک
BigInt64Arrayرمزگشایی کنید.
به مثال زیر و شماره dawn:1800 مراجعه کنید.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("timestamp-query")) {
throw new Error("Timestamp query feature is not available");
}
// Explicitly request timestamp query feature.
const device = await adapter.requestDevice({
requiredFeatures: ["timestamp-query"],
});
const commandEncoder = device.createCommandEncoder();
// Create a GPUQuerySet which holds 2 timestamp query results: one for the
// beginning and one for the end of compute pass execution.
const querySet = device.createQuerySet({ type: "timestamp", count: 2 });
const timestampWrites = {
querySet,
beginningOfPassWriteIndex: 0, // Write timestamp in index 0 when pass begins.
endOfPassWriteIndex: 1, // Write timestamp in index 1 when pass ends.
};
const passEncoder = commandEncoder.beginComputePass({ timestampWrites });
// TODO: Set pipeline, bind group, and dispatch work to be performed.
passEncoder.end();
// Resolve timestamps in nanoseconds as a 64-bit unsigned integer into a GPUBuffer.
const size = 2 * BigInt64Array.BYTES_PER_ELEMENT;
const resolveBuffer = device.createBuffer({
size,
usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,
});
commandEncoder.resolveQuerySet(querySet, 0, 2, resolveBuffer, 0);
// Read GPUBuffer memory.
const resultBuffer = device.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
commandEncoder.copyBufferToBuffer(resolveBuffer, 0, resultBuffer, 0, size);
// Submit commands to the GPU.
device.queue.submit([commandEncoder.finish()]);
// Log compute pass duration in nanoseconds.
await resultBuffer.mapAsync(GPUMapMode.READ);
const times = new BigInt64Array(resultBuffer.getMappedRange());
console.log(`Compute pass duration: ${Number(times[1] - times[0])}ns`);
resultBuffer.unmap();
با توجه به نگرانیهای مربوط به حمله زمانبندی ، کوئریهای برچسب زمانی با وضوح ۱۰۰ میکروثانیه کوانتیزه میشوند که سازش خوبی بین دقت و امنیت ایجاد میکند. در مرورگر کروم، میتوانید کوانتیزه کردن برچسب زمانی را با فعال کردن پرچم "ویژگیهای توسعهدهنده WebGPU" در chrome://flags/#enable-webgpu-developer-features در طول توسعه برنامه خود غیرفعال کنید. برای کسب اطلاعات بیشتر به کوانتیزه کردن کوئریهای برچسب زمانی مراجعه کنید.
از آنجایی که پردازندههای گرافیکی (GPU) ممکن است گاهی اوقات شمارندهی مهر زمانی (timestamp) را ریست کنند، که میتواند منجر به مقادیر غیرمنتظرهای مانند اختلاف منفی بین مهرهای زمانی شود، توصیه میکنم تغییرات git diff را که پشتیبانی از پرسوجوی مهر زمانی را به نمونهی Compute Boids زیر اضافه میکند، بررسی کنید.

نقاط ورودی پیشفرض به ماژولهای سایهزن
برای بهبود تجربه توسعهدهنده، اکنون میتوانید هنگام ایجاد یک خط لوله محاسبه یا رندر، entryPoint ماژول shader خود را حذف کنید. اگر هیچ نقطه ورودی منحصر به فردی برای مرحله shader در کد shader یافت نشود، یک GPUValidationError فعال میشود. به مثال زیر و خطای dawn:2254 مراجعه کنید.
const code = `
@vertex fn vertexMain(@builtin(vertex_index) i : u32) ->
@builtin(position) vec4f {
const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
return vec4f(pos[i], 0, 1);
}
@fragment fn fragmentMain() -> @location(0) vec4f {
return vec4f(1, 0, 0, 1);
}`;
const module = myDevice.createShaderModule({ code });
const format = navigator.gpu.getPreferredCanvasFormat();
const pipeline = await myDevice.createRenderPipelineAsync({
layout: "auto",
vertex: { module, entryPoint: "vertexMain" },
fragment: { module, entryPoint: "fragmentMain", targets: [{ format }] },
vertex: { module },
fragment: { module, targets: [{ format }] },
});
پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
اکنون میتوانید هنگام وارد کردن یک GPUExternalTexture از ویدیوهای HDR با استفاده از importExternalTexture() ، فضای رنگی مقصد را "display-p3" تنظیم کنید. بررسی کنید که WebGPU چگونه فضاهای رنگی را مدیریت میکند. به مثال زیر مراجعه کنید و chroma:1330250 را اجرا کنید.
// Create texture from HDR video.
const video = document.querySelector("video");
const texture = myDevice.importExternalTexture({
source: video,
colorSpace: "display-p3",
});
اطلاعات مربوط به تودههای حافظه
برای کمک به شما در پیشبینی محدودیتهای حافظه هنگام تخصیص مقادیر زیاد در طول توسعه برنامه، requestAdapterInfo() اکنون اطلاعات memoryHeaps مانند اندازه و نوع هیپهای حافظه موجود در آداپتور را نمایش میدهد. این ویژگی آزمایشی فقط زمانی قابل دسترسی است که پرچم "WebGPU Developer Features" در chrome://flags/#enable-webgpu-developer-features فعال باشد. به مثال زیر و issue dawn:2249 مراجعه کنید.
const adapter = await navigator.gpu.requestAdapter();
const adapterInfo = await adapter.requestAdapterInfo();
for (const { size, properties } of adapterInfo.memoryHeaps) {
console.log(size); // memory heap size in bytes
if (properties & GPUHeapProperty.DEVICE_LOCAL) { /* ... */ }
if (properties & GPUHeapProperty.HOST_VISIBLE) { /* ... */ }
if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
if (properties & GPUHeapProperty.HOST_CACHED) { /* ... */ }
}

بهروزرسانیهای سپیدهدم
متدهای HasWGSLLanguageFeature و EnumerateWGSLLanguageFeatures در wgpu::Instance برای مدیریت ویژگیهای زبان WGSL اضافه شدهاند. به شماره dawn:2260 مراجعه کنید.
ویژگی غیر استاندارد wgpu::Feature::BufferMapExtendedUsages به شما امکان میدهد با wgpu::BufferUsage::MapRead یا wgpu::BufferUsage::MapWrite و هر wgpu::BufferUsage دیگری، یک بافر GPU ایجاد کنید. به مثال زیر و مشکل dawn:2204 توجه کنید.
wgpu::BufferDescriptor descriptor = {
.size = 128,
.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::Uniform
};
wgpu::Buffer uniformBuffer = device.CreateBuffer(&descriptor);
uniformBuffer.MapAsync(wgpu::MapMode::Write, 0, 128,
[](WGPUBufferMapAsyncStatus status, void* userdata)
{
wgpu::Buffer* buffer = static_cast<wgpu::Buffer*>(userdata);
memcpy(buffer->GetMappedRange(), data, sizeof(data));
},
&uniformBuffer);
ویژگیهای زیر مستند شدهاند: اشتراکگذاری بافت ANGLE ، محافظت چندنخی D3D11 ، همگامسازی ضمنی دستگاه ، قالبهای بافت Norm16 ، پرسوجوی مهر زمانی درون گذرها ، ذخیرهسازی محلی پیکسل ، ویژگیهای سایهزن و قالبهای چندصفحهای .
تیم کروم یک مخزن رسمی گیتهاب برای داون ایجاد کرده است.
این فقط برخی از نکات برجسته کلیدی را پوشش میدهد. لیست جامع کامیتها را بررسی کنید.
ویژگیهای جدید WebGPU
فهرستی از تمام مواردی که در مجموعه «ویژگیهای جدید WebGPU» پوشش داده شده است.
کروم ۱۵۱-۱۵۲
- کنترل اندازه زیرگروه
- خطای OperationError برای خطاهای اعتبارسنجی setImmediates
- بهروزرسانیهای سپیدهدم
کروم ۱۴۹-۱۵۰
کروم ۱۴۷-۱۴۸
کروم ۱۴۶
- پشتیبانی از حالت سازگاری WebGPU در OpenGL ES 3.1
- پیوستهای گذرا
- افزونهی texture_and_sampler_let مربوط به WGSL
- بهروزرسانیهای سپیدهدم
کروم ۱۴۵
کروم ۱۴۴
- افزونهی زیرگروه_id در WGSL
- افزونهی uniform_buffer_standard_layout در WGSL
- وبجیپییو در لینوکس
- نوشتن بافر و نوشتن بافت سریعتر
- بهروزرسانیهای سپیدهدم
کروم ۱۴۳
کروم ۱۴۲
کروم ۱۴۱
- رنگ 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
- Deprecation of GPUAdapter requestAdapterInfo()
- Dawn updates
Chrome 129
Chrome 128
- Experimenting with subgroups
- Deprecate setting depth bias for lines and points
- Hide uncaptured error DevTools warning if preventDefault
- WGSL interpolate sampling first and either
- Dawn updates
Chrome 127
- Experimental support for OpenGL ES on Android
- GPUAdapter info attribute
- WebAssembly interop improvements
- Improved command encoder errors
- Dawn updates
Chrome 126
- Increase maxTextureArrayLayers limit
- Buffer upload optimization for Vulkan backend
- Shader compilation time improvements
- Submitted command buffers must be unique
- Dawn updates
Chrome 125
Chrome 124
- Read-only and read-write storage textures
- Service workers and shared workers support
- New adapter information attributes
- رفع اشکالات
- Dawn updates
Chrome 123
- DP4a built-in functions support in WGSL
- Unrestricted pointer parameters in WGSL
- Syntax sugar for dereferencing composites in WGSL
- Separate read-only state for stencil and depth aspects
- Dawn updates
Chrome 122
- Expand reach with compatibility mode (feature in development)
- Increase maxVertexAttributes limit
- Dawn updates
Chrome 121
- Support WebGPU on Android
- Use DXC instead of FXC for shader compilation on Windows
- Timestamp queries in compute and render passes
- Default entry points to shader modules
- Support display-p3 as GPUExternalTexture color space
- Memory heaps info
- Dawn updates
Chrome 120
- Support for 16-bit floating-point values in WGSL
- Push the limits
- Changes to depth-stencil state
- Adapter information updates
- Timestamp queries quantization
- Spring-cleaning features
Chrome 119
- Filterable 32-bit float textures
- unorm10-10-10-2 vertex format
- rgb10a2uint texture format
- Dawn updates
Chrome 118
- HTMLImageElement and ImageData support in
copyExternalImageToTexture() - Experimental support for read-write and read-only storage texture
- Dawn updates
Chrome 117
- Unset vertex buffer
- Unset bind group
- Silence errors from async pipeline creation when device is lost
- SPIR-V shader module creation updates
- Improving developer experience
- Caching pipelines with automatically generated layout
- Dawn updates
Chrome 116
- WebCodecs integration
- Lost device returned by GPUAdapter
requestDevice() - Keep video playback smooth if
importExternalTexture()is called - Spec conformance
- Improving developer experience
- Dawn updates
Chrome 115
- Supported WGSL language extensions
- Experimental support for Direct3D 11
- Get discrete GPU by default on AC power
- Improving developer experience
- Dawn updates
Chrome 114
- Optimize JavaScript
- getCurrentTexture() on unconfigured canvas throws InvalidStateError
- WGSL updates
- Dawn updates
Chrome 113
،Support WebGPU on Android
The Chrome team is excited to announce that WebGPU is now enabled by default in Chrome 121 on devices running Android 12 and greater powered by Qualcomm and ARM GPUs.
Support will gradually expand to encompass a wider range of Android devices, including those running on Android 11 in a near future. This expansion will be dependent on further testing and optimization to ensure a seamless experience across a broader range of hardware configurations. See issue chromium:1497815 .

Use DXC instead of FXC for shader compilation on Windows
Chrome now uses the power of DXC (DirectX Compiler) to compile shaders on Windows D3D12 machines equipped with SM6+ graphics hardware. Previously, WebGPU relied on FXC (FX Compiler) for shader compilation on Windows. While functional, FXC lacked the feature set and performance optimizations present in DXC.
Initial testing shows a 20% average increase in compute shader compilation speed when using DXC compared to FXC.
Timestamp queries in compute and render passes
Timestamp queries allow WebGPU applications to measure precisely (down to the nanosecond) how much time their GPU commands take to execute compute and render passes. They are heavily used to gain insights into the performance and behavior of GPU workloads.
When the "timestamp-query" feature is available in a GPUAdapter , you can now do the following things:
- Request a
GPUDevicewith the"timestamp-query"feature. - Create a
GPUQuerySetof type"timestamp". - Use
GPUComputePassDescriptor.timestampWritesandGPURenderPassDescriptor.timestampWritesto define where to write timestamp values inGPUQuerySet. - Resolve timestamp values into a
GPUBufferwithresolveQuerySet(). - Read timestamp values back by copying the results from the
GPUBufferto the CPU. - Decode timestamp values as a
BigInt64Array.
See the following example and issue dawn:1800 .
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("timestamp-query")) {
throw new Error("Timestamp query feature is not available");
}
// Explicitly request timestamp query feature.
const device = await adapter.requestDevice({
requiredFeatures: ["timestamp-query"],
});
const commandEncoder = device.createCommandEncoder();
// Create a GPUQuerySet which holds 2 timestamp query results: one for the
// beginning and one for the end of compute pass execution.
const querySet = device.createQuerySet({ type: "timestamp", count: 2 });
const timestampWrites = {
querySet,
beginningOfPassWriteIndex: 0, // Write timestamp in index 0 when pass begins.
endOfPassWriteIndex: 1, // Write timestamp in index 1 when pass ends.
};
const passEncoder = commandEncoder.beginComputePass({ timestampWrites });
// TODO: Set pipeline, bind group, and dispatch work to be performed.
passEncoder.end();
// Resolve timestamps in nanoseconds as a 64-bit unsigned integer into a GPUBuffer.
const size = 2 * BigInt64Array.BYTES_PER_ELEMENT;
const resolveBuffer = device.createBuffer({
size,
usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,
});
commandEncoder.resolveQuerySet(querySet, 0, 2, resolveBuffer, 0);
// Read GPUBuffer memory.
const resultBuffer = device.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
commandEncoder.copyBufferToBuffer(resolveBuffer, 0, resultBuffer, 0, size);
// Submit commands to the GPU.
device.queue.submit([commandEncoder.finish()]);
// Log compute pass duration in nanoseconds.
await resultBuffer.mapAsync(GPUMapMode.READ);
const times = new BigInt64Array(resultBuffer.getMappedRange());
console.log(`Compute pass duration: ${Number(times[1] - times[0])}ns`);
resultBuffer.unmap();
Due to timing attack concerns, timestamp queries are quantized with a resolution of 100 microseconds, which provides a good compromise between precision and security. In Chrome browser, you can disable timestamp quantization by enabling the "WebGPU Developer Features" flag at chrome://flags/#enable-webgpu-developer-features during the development of your app. See Timestamp queries quantization to learn more.
As GPUs may reset the timestamp counter occasionally, which can result in unexpected values such as negative deltas between timestamps, I recommend you check out the git diff changes that adds timestamp query support to the following Compute Boids sample.

Default entry points to shader modules
To improve the developer experience, you can now omit the entryPoint of your shader module when creating a compute or render pipeline. If no unique entry point for the shader stage is found in the shader code, a GPUValidationError will be triggered. See the following example and issue dawn:2254 .
const code = `
@vertex fn vertexMain(@builtin(vertex_index) i : u32) ->
@builtin(position) vec4f {
const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
return vec4f(pos[i], 0, 1);
}
@fragment fn fragmentMain() -> @location(0) vec4f {
return vec4f(1, 0, 0, 1);
}`;
const module = myDevice.createShaderModule({ code });
const format = navigator.gpu.getPreferredCanvasFormat();
const pipeline = await myDevice.createRenderPipelineAsync({
layout: "auto",
vertex: { module, entryPoint: "vertexMain" },
fragment: { module, entryPoint: "fragmentMain", targets: [{ format }] },
vertex: { module },
fragment: { module, targets: [{ format }] },
});
Support display-p3 as GPUExternalTexture color space
You can now set "display-p3" destination color space when importing a GPUExternalTexture from HDR videos with importExternalTexture() . Check out how WebGPU handles color spaces . See the following example and issue chromium:1330250 .
// Create texture from HDR video.
const video = document.querySelector("video");
const texture = myDevice.importExternalTexture({
source: video,
colorSpace: "display-p3",
});
Memory heaps info
To help you anticipate memory limitations when allocating large amounts during the development of your app, requestAdapterInfo() now exposes memoryHeaps information such as the size and type of memory heaps available on the adapter. This experimental feature is accessible only when the "WebGPU Developer Features" flag at chrome://flags/#enable-webgpu-developer-features is enabled. See the following example and issue dawn:2249 .
const adapter = await navigator.gpu.requestAdapter();
const adapterInfo = await adapter.requestAdapterInfo();
for (const { size, properties } of adapterInfo.memoryHeaps) {
console.log(size); // memory heap size in bytes
if (properties & GPUHeapProperty.DEVICE_LOCAL) { /* ... */ }
if (properties & GPUHeapProperty.HOST_VISIBLE) { /* ... */ }
if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
if (properties & GPUHeapProperty.HOST_CACHED) { /* ... */ }
}

Dawn updates
The HasWGSLLanguageFeature and EnumerateWGSLLanguageFeatures methods on wgpu::Instance have been added to handle WGSL language features. See issue dawn:2260 .
The non-standard wgpu::Feature::BufferMapExtendedUsages feature lets you create a GPU buffer with wgpu::BufferUsage::MapRead or wgpu::BufferUsage::MapWrite and any other wgpu::BufferUsage . See the following example and issue dawn:2204 .
wgpu::BufferDescriptor descriptor = {
.size = 128,
.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::Uniform
};
wgpu::Buffer uniformBuffer = device.CreateBuffer(&descriptor);
uniformBuffer.MapAsync(wgpu::MapMode::Write, 0, 128,
[](WGPUBufferMapAsyncStatus status, void* userdata)
{
wgpu::Buffer* buffer = static_cast<wgpu::Buffer*>(userdata);
memcpy(buffer->GetMappedRange(), data, sizeof(data));
},
&uniformBuffer);
The following features have been documented: ANGLE Texture Sharing , D3D11 multithread protected , Implicit Device Synchronization , Norm16 texture formats , Timestamp Query Inside Passes , Pixel Local Storage , Shader Features , and Multi Planar Formats .
The Chrome team has created an official GitHub repository for Dawn .
This covers only some of the key highlights. Check out the exhaustive list of commits .
What's New in WebGPU
A list of everything that has been covered in the What's New in WebGPU series.
Chrome 151-152
Chrome 149-150
Chrome 147-148
Chrome 146
- Support WebGPU compatibility mode on OpenGL ES 3.1
- Transient attachments
- WGSL texture_and_sampler_let extension
- Dawn updates
Chrome 145
Chrome 144
- WGSL subgroup_id extension
- WGSL uniform_buffer_standard_layout extension
- WebGPU on Linux
- Faster writeBuffer and writeTexture
- Dawn updates
Chrome 143
Chrome 142
Chrome 141
- Tint IR completed
- Integer range analysis in WGSL compiler
- SPIR-V 1.4 update for Vulkan backend
- Dawn updates
Chrome 140
- Device requests consume adapter
- Shorthand for using texture where texture view is used
- WGSL textureSampleLevel supports 1D textures
- Deprecate bgra8unorm read-only storage texture usage
- Remove GPUAdapter isFallbackAdapter attribute
- Dawn updates
Chrome 139
- 3D texture support for BC and ASTC compressed formats
- New "core-features-and-limits" feature
- Origin trial for WebGPU compatibility mode
- Dawn updates
Chrome 138
- Shorthand for using buffer as a binding resource
- Size requirement changes for buffers mapped at creation
- Architecture report for recent GPUs
- Deprecate GPUAdapter isFallbackAdapter attribute
- Dawn updates
Chrome 137
- Use texture view for externalTexture binding
- Buffers copy without specifying offsets and size
- WGSL workgroupUniformLoad using pointer to atomic
- GPUAdapterInfo powerPreference attribute
- Remove GPURequestAdapterOptions compatibilityMode attribute
- Dawn updates
Chrome 136
- GPUAdapterInfo isFallbackAdapter attribute
- Shader compilation time improvements on D3D12
- Save and copy canvas images
- Lift compatibility mode restrictions
- Dawn updates
Chrome 135
- Allow creating pipeline layout with null bind group layout
- Allow viewports to extend past the render targets bounds
- Easier access to the experimental compatibility mode on Android
- Remove maxInterStageShaderComponents limit
- Dawn updates
Chrome 134
- Improve machine-learning workloads with subgroups
- Remove float filterable texture types support as blendable
- Dawn updates
Chrome 133
- Additional unorm8x4-bgra and 1-component vertex formats
- Allow unknown limits to be requested with undefined value
- WGSL alignment rules changes
- WGSL performance gains with discard
- Use VideoFrame displaySize for external textures
- Handle images with non-default orientations using copyExternalImageToTexture
- Improving developer experience
- Enable compatibility mode with featureLevel
- Experimental subgroup features cleanup
- Deprecate maxInterStageShaderComponents limit
- Dawn updates
Chrome 132
- Texture view usage
- 32-bit float textures blending
- GPUDevice adapterInfo attribute
- Configuring canvas context with invalid format throw JavaScript error
- Filtering sampler restrictions on textures
- Extended subgroups experimentation
- Improving developer experience
- Experimental support for 16-bit normalized texture formats
- Dawn updates
Chrome 131
- Clip distances in WGSL
- GPUCanvasContext getConfiguration()
- Point and line primitives must not have depth bias
- Inclusive scan built-in functions for subgroups
- Experimental support for multi-draw indirect
- Shader module compilation option strict math
- Remove GPUAdapter requestAdapterInfo()
- Dawn updates
Chrome 130
- Dual source blending
- Shader compilation time improvements on Metal
- Deprecation of GPUAdapter requestAdapterInfo()
- Dawn updates
Chrome 129
Chrome 128
- Experimenting with subgroups
- Deprecate setting depth bias for lines and points
- Hide uncaptured error DevTools warning if preventDefault
- WGSL interpolate sampling first and either
- Dawn updates
Chrome 127
- Experimental support for OpenGL ES on Android
- GPUAdapter info attribute
- WebAssembly interop improvements
- Improved command encoder errors
- Dawn updates
Chrome 126
- Increase maxTextureArrayLayers limit
- Buffer upload optimization for Vulkan backend
- Shader compilation time improvements
- Submitted command buffers must be unique
- Dawn updates
Chrome 125
Chrome 124
- Read-only and read-write storage textures
- Service workers and shared workers support
- New adapter information attributes
- رفع اشکالات
- Dawn updates
Chrome 123
- DP4a built-in functions support in WGSL
- Unrestricted pointer parameters in WGSL
- Syntax sugar for dereferencing composites in WGSL
- Separate read-only state for stencil and depth aspects
- Dawn updates
Chrome 122
- Expand reach with compatibility mode (feature in development)
- Increase maxVertexAttributes limit
- Dawn updates
Chrome 121
- Support WebGPU on Android
- Use DXC instead of FXC for shader compilation on Windows
- Timestamp queries in compute and render passes
- Default entry points to shader modules
- Support display-p3 as GPUExternalTexture color space
- Memory heaps info
- Dawn updates
Chrome 120
- Support for 16-bit floating-point values in WGSL
- Push the limits
- Changes to depth-stencil state
- Adapter information updates
- Timestamp queries quantization
- Spring-cleaning features
Chrome 119
- Filterable 32-bit float textures
- unorm10-10-10-2 vertex format
- rgb10a2uint texture format
- Dawn updates
Chrome 118
- HTMLImageElement and ImageData support in
copyExternalImageToTexture() - Experimental support for read-write and read-only storage texture
- Dawn updates
Chrome 117
- Unset vertex buffer
- Unset bind group
- Silence errors from async pipeline creation when device is lost
- SPIR-V shader module creation updates
- Improving developer experience
- Caching pipelines with automatically generated layout
- Dawn updates
Chrome 116
- WebCodecs integration
- Lost device returned by GPUAdapter
requestDevice() - Keep video playback smooth if
importExternalTexture()is called - Spec conformance
- Improving developer experience
- Dawn updates
Chrome 115
- Supported WGSL language extensions
- Experimental support for Direct3D 11
- Get discrete GPU by default on AC power
- Improving developer experience
- Dawn updates
Chrome 114
- Optimize JavaScript
- getCurrentTexture() on unconfigured canvas throws InvalidStateError
- WGSL updates
- Dawn updates