CINXE.COM

What's New in WebGPU (Chrome 131)  |  Blog  |  Chrome for Developers

<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="157101835696-ooapojlodmuabs2do2vuhhnf90bccmoi.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Chrome for Developers"> <meta property="og:type" content="website"><meta name="theme-color" content="#1a73e8"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/chrome/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/css/app.css"> <link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/css/dark-theme.css" disabled> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/images/favicon.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/images/touchicon-180.png"><link rel="canonical" href="https://developer.chrome.com/blog/new-in-webgpu-131"><link rel="search" type="application/opensearchdescription+xml" title="Chrome for Developers" href="https://developer.chrome.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://developer.chrome.com/blog/new-in-webgpu-131" /><link rel="alternate" hreflang="x-default" href="https://developer.chrome.com/blog/new-in-webgpu-131" /><link rel="alternate" hreflang="ar" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=ar" /><link rel="alternate" hreflang="bn" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=zh-tw" /><link rel="alternate" hreflang="nl" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=nl" /><link rel="alternate" hreflang="fa" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=fa" /><link rel="alternate" hreflang="fr" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=fr" /><link rel="alternate" hreflang="de" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=de" /><link rel="alternate" hreflang="he" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=he" /><link rel="alternate" hreflang="hi" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=hi" /><link rel="alternate" hreflang="id" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=id" /><link rel="alternate" hreflang="it" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=it" /><link rel="alternate" hreflang="ja" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=ja" /><link rel="alternate" hreflang="ko" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=ko" /><link rel="alternate" hreflang="pl" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=es-419" /><link rel="alternate" hreflang="th" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=th" /><link rel="alternate" hreflang="tr" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=tr" /><link rel="alternate" hreflang="vi" href="https://developer.chrome.com/blog/new-in-webgpu-131?hl=vi" /><link rel="alternate" hreflang="en-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131" /><link rel="alternate" hreflang="x-default" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131" /><link rel="alternate" hreflang="ar-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=ar" /><link rel="alternate" hreflang="bn-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=bn" /><link rel="alternate" hreflang="zh-Hans-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=zh-tw" /><link rel="alternate" hreflang="nl-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=nl" /><link rel="alternate" hreflang="fa-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=fa" /><link rel="alternate" hreflang="fr-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=fr" /><link rel="alternate" hreflang="de-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=de" /><link rel="alternate" hreflang="he-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=he" /><link rel="alternate" hreflang="hi-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=hi" /><link rel="alternate" hreflang="id-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=id" /><link rel="alternate" hreflang="it-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=it" /><link rel="alternate" hreflang="ja-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=ja" /><link rel="alternate" hreflang="ko-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=ko" /><link rel="alternate" hreflang="pl-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=pl" /><link rel="alternate" hreflang="pt-BR-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=pt-br" /><link rel="alternate" hreflang="ru-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=ru" /><link rel="alternate" hreflang="es-419-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=es-419" /><link rel="alternate" hreflang="th-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=th" /><link rel="alternate" hreflang="tr-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=tr" /><link rel="alternate" hreflang="vi-cn" href="https://developer.chrome.google.cn/blog/new-in-webgpu-131?hl=vi" /><title>What&#39;s New in WebGPU (Chrome&nbsp;131) &nbsp;|&nbsp; Blog &nbsp;|&nbsp; Chrome for Developers</title> <meta property="og:title" content="What&#39;s New in WebGPU (Chrome&nbsp;131) &nbsp;|&nbsp; Blog &nbsp;|&nbsp; Chrome for Developers"><meta name="description" content="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(), and more."> <meta property="og:description" content="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(), and more."><meta property="og:url" content="https://developer.chrome.com/blog/new-in-webgpu-131"><meta property="og:image" content="https://developer.chrome.com/static/blog/new-in-webgpu-131/image/new-in-webgpu-131.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Blog", "item": "https://developer.chrome.com/blog" },{ "@type": "ListItem", "position": 2, "name": "What&amp;#39;s New in WebGPU (Chrome&amp;nbsp;131)", "item": "https://developer.chrome.com/blog/new-in-webgpu-131" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="chrome-theme" type="blog" appearance layout="docs" display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <a href="#main-content" class="skip-link button"> Skip to main content </a> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="chromeForDevelopers" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/images/lockup-dark-theme.svg" media="(prefers-color-scheme: dark)" class="devsite-dark-theme" alt="Chrome for Developers"> <img src="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/images/lockup.svg" class="devsite-site-logo" alt="Chrome for Developers"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab > <a href="https://developer.chrome.com/case-studies" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developer.chrome.com/case-studies" track-type="nav" track-metadata-position="nav - get inspired" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Get inspired" track-name="get inspired" > Get inspired </a> </tab> <tab > <a href="https://developer.chrome.com/blog" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developer.chrome.com/blog" track-type="nav" track-metadata-position="nav - blog" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Blog" track-name="blog" > Blog </a> </tab> <tab class="devsite-dropdown devsite-dropdown-full "> <a href="https://developer.chrome.com/docs" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developer.chrome.com/docs" track-type="nav" track-metadata-position="nav - docs" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" > Docs </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Docs" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs" track-metadata-position="nav - docs" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section build-icon dcc-subnav"> <li class="devsite-nav-title" role="heading" tooltip>Build with Chrome</li> <li class="devsite-nav-description">Learn how Chrome works, participate in origin trials, and build with Chrome everywhere. </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/web-platform" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/web-platform" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="build with chrome" tooltip > <div class="devsite-nav-item-title"> Web Platform </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/capabilities" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/capabilities" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="build with chrome" tooltip > <div class="devsite-nav-item-title"> Capabilities </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/chromedriver" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/chromedriver" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="build with chrome" tooltip > <div class="devsite-nav-item-title"> ChromeDriver </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/extensions" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/extensions" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="build with chrome" tooltip > <div class="devsite-nav-item-title"> Extensions </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/webstore" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/webstore" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="build with chrome" tooltip > <div class="devsite-nav-item-title"> Chrome Web Store </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/chromium" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/chromium" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="build with chrome" tooltip > <div class="devsite-nav-item-title"> Chromium </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/aurora" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/aurora" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="build with chrome" tooltip > <div class="devsite-nav-item-title"> Aurora </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/android" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/android" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="build with chrome" tooltip > <div class="devsite-nav-item-title"> Web on Android </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/origintrials/" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/origintrials/" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="build with chrome" tooltip > <div class="devsite-nav-item-title"> Origin trials </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/release-notes" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/release-notes" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="build with chrome" tooltip > <div class="devsite-nav-item-title"> Release notes </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section productivity-icon dcc-subnav"> <li class="devsite-nav-title" role="heading" tooltip>Productivity</li> <li class="devsite-nav-description">Create the best experience for your users with the web&#39;s best tools.</li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/devtools" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/devtools" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="productivity" tooltip > <div class="devsite-nav-item-title"> DevTools </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/lighthouse" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/lighthouse" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="productivity" tooltip > <div class="devsite-nav-item-title"> Lighthouse </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/crux" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/crux" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="productivity" tooltip > <div class="devsite-nav-item-title"> Chrome UX Report </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/accessibility" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/accessibility" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="productivity" tooltip > <div class="devsite-nav-item-title"> Accessibility </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section dcc-subnav second-column-list"> <li class="devsite-nav-description">Get things done quicker and neater, with our ready-made libraries. </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/workbox" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/workbox" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="productivity" tooltip > <div class="devsite-nav-item-title"> Workbox </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/puppeteer" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/puppeteer" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="productivity" tooltip > <div class="devsite-nav-item-title"> Puppeteer </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section experience-icon dcc-subnav"> <li class="devsite-nav-title" role="heading" tooltip>Experience</li> <li class="devsite-nav-description">Design a beautiful and performant web with Chrome. </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/ai" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/ai" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="experience" tooltip > <div class="devsite-nav-item-title"> AI </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/performance" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/performance" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="experience" tooltip > <div class="devsite-nav-item-title"> Performance </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/css-ui" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/css-ui" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="experience" tooltip > <div class="devsite-nav-item-title"> CSS and UI </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/identity" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/identity" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="experience" tooltip > <div class="devsite-nav-item-title"> Identity </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/payments" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/payments" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="experience" tooltip > <div class="devsite-nav-item-title"> Payments </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs/privacy-security" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs/privacy-security" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="experience" tooltip > <div class="devsite-nav-item-title"> Privacy and security </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section resources-icon dcc-subnav"> <li class="devsite-nav-title" role="heading" tooltip>Resources</li> <li class="devsite-nav-description">More from the Chrome team. </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/docs" track-type="nav" track-metadata-eventdetail="https://developer.chrome.com/docs" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="resources" tooltip > <div class="devsite-nav-item-title"> All documentation </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/baseline" track-type="nav" track-metadata-eventdetail="https://web.dev/baseline" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="resources" tooltip > <div class="devsite-nav-item-title"> Baseline </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev" track-type="nav" track-metadata-eventdetail="https://web.dev" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="resources" tooltip > <div class="devsite-nav-item-title"> web.dev </div> </a> </li> <li class="devsite-nav-item"> <a href="https://pagespeed.web.dev" track-type="nav" track-metadata-eventdetail="https://pagespeed.web.dev" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" track-metadata-module_headline="resources" tooltip > <div class="devsite-nav-item-title"> PageSpeed Insights audit </div> </a> </li> </ul> </div> </div> </div> </tab> <tab > <a href="https://developer.chrome.com/new" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developer.chrome.com/new" track-type="nav" track-metadata-position="nav - new in chrome" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: New in Chrome" track-name="new in chrome" > New in Chrome </a> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Blog" tenant-name="Chrome for Developers" > <form class="devsite-search-form" action="https://developer.chrome.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-appearance-selector></devsite-appearance-selector> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="nl" >Nederlands</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <devsite-user enable-profiles id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section devsite-header-no-lower-tabs "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://developer.chrome.com/blog" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Blog" > Blog </a> </li> </ul> </div> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars hidden> <div class="devsite-book-nav-filter" hidden> <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="chromeForDevelopers" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/images/lockup-dark-theme.svg" media="(prefers-color-scheme: dark)" class="devsite-dark-theme" alt="Chrome for Developers"> <img src="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/images/lockup.svg" class="devsite-site-logo" alt="Chrome for Developers"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/case-studies" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Get inspired" track-name="get inspired" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Get inspired" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Get inspired </span> </a> </li> <li class="devsite-nav-item"> <a href="/blog" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Blog" track-name="blog" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Blog" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Blog </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Docs" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Docs </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" > <span class="devsite-nav-text" tooltip menu="Docs"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Docs"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/new" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: New in Chrome" track-name="new in chrome" data-category="Site-Wide Custom Events" data-label="Responsive Tab: New in Chrome" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > New in Chrome </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="Docs" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Build with Chrome </span> </span> </li> <li class="devsite-nav-item"> <a href="/docs/web-platform" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Web Platform" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Web Platform </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/capabilities" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Capabilities" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Capabilities </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/chromedriver" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: ChromeDriver" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > ChromeDriver </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/extensions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Extensions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Extensions </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/webstore" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Chrome Web Store" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Chrome Web Store </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/chromium" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Chromium" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Chromium </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/aurora" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Aurora" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Aurora </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/android" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Web on Android" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Web on Android </span> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.chrome.com/origintrials/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Origin trials" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Origin trials </span> </a> </li> <li class="devsite-nav-item"> <a href="/release-notes" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Release notes" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Release notes </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Productivity </span> </span> </li> <li class="devsite-nav-item"> <a href="/docs/devtools" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: DevTools" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > DevTools </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/lighthouse" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Lighthouse" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Lighthouse </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/crux" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Chrome UX Report" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Chrome UX Report </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/accessibility" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Accessibility" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Accessibility </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/workbox" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Workbox" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Workbox </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/puppeteer" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Puppeteer" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Puppeteer </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Experience </span> </span> </li> <li class="devsite-nav-item"> <a href="/docs/ai" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: AI" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > AI </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/performance" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Performance" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Performance </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/css-ui" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: CSS and UI" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > CSS and UI </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/identity" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Identity" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Identity </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/payments" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Payments" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Payments </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/privacy-security" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Privacy and security" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Privacy and security </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Resources </span> </span> </li> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: All documentation" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > All documentation </span> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/baseline" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Baseline" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Baseline </span> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: web.dev" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > web.dev </span> </a> </li> <li class="devsite-nav-item"> <a href="https://pagespeed.web.dev" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: PageSpeed Insights audit" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > PageSpeed Insights audit </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" has-sidebar > <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars ></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://developer.chrome.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Chrome for Developers" > Chrome for Developers </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developer.chrome.com/blog" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Blog" > Blog </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <h1 class="devsite-page-title" tabindex="-1"> What&#39;s New in WebGPU (Chrome&nbsp;131) </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <p><style> .wd-authors { --avatar-size: 65px; display: flex; gap: 2em; } .wd-author { display: flex; flex-wrap: wrap; gap: 1em; line-height: calc(var(--avatar-size) / 2); } .wd-author img { border-radius: 50%; height: var(--avatar-size, 65px); width: var(--avatar-size, 65px); } .dcc-authors { --avatar-size: 65px; display: flex; gap: 2em; } .dcc-author { display: flex; flex-wrap: wrap; gap: 1em; line-height: calc(var(--avatar-size) / 2); } .dcc-author img { border-radius: 50%; height: var(--avatar-size, 65px); width: var(--avatar-size, 65px); } .dcc-author__links a { margin-inline-end: 6px; } .dcc-author__links a:last-of-type { margin-inline-end: 0; } </style> <div class="dcc-authors" translate="no"> <div class="dcc-author"> <img class="devsite-landing-row-item-icon" alt="François Beaufort" src="https://web.dev/images/authors/beaufortfrancois.jpg" decoding="async" height="64" loading="lazy" width="64"> <div> <span> François Beaufort </span> <div class="dcc-author__links"> <a href="https://github.com/beaufortfrancois" aria-label="François Beaufort on GitHub" rel="me"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 32.6 31.8"> <title>GitHub</title> <path d="M16.3 0C7.3 0 0 7.3 0 16.3c0 7.2 4.7 13.3 11.1 15.5.8.1 1.1-.4 1.1-.8v-2.8c-4.5 1-5.5-2.2-5.5-2.2-.7-1.9-1.8-2.4-1.8-2.4-1.5-1 .1-1 .1-1 1.6.1 2.5 1.7 2.5 1.7 1.5 2.5 3.8 1.8 4.7 1.4.1-1.1.6-1.8 1-2.2-3.6-.4-7.4-1.8-7.4-8.1 0-1.8.6-3.2 1.7-4.4-.1-.3-.7-2 .2-4.2 0 0 1.4-.4 4.5 1.7 1.3-.4 2.7-.5 4.1-.5 1.4 0 2.8.2 4.1.5 3.1-2.1 4.5-1.7 4.5-1.7.9 2.2.3 3.9.2 4.3 1 1.1 1.7 2.6 1.7 4.4 0 6.3-3.8 7.6-7.4 8 .6.5 1.1 1.5 1.1 3V31c0 .4.3.9 1.1.8 6.5-2.2 11.1-8.3 11.1-15.5C32.6 7.3 25.3 0 16.3 0z" fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" /> </svg></a> </div> </div> </div> </div></p> <h2 id="clip_distances_in_wgsl" data-text="Clip distances in WGSL" tabindex="-1">Clip distances in WGSL</h2> <p>Clip distances allow you to restrict <a href="https://gpuweb.github.io/gpuweb/#clip-volume">primitives&#39; clip volume</a> with user-defined half-spaces in the output of vertex stage. Defining your own clipping planes gives greater control over what&#39;s visible in your WebGPU scenes. This technique is particularly useful for applications like CAD software, where precise control over visualization is crucial.</p> <p>When the <code translate="no" dir="ltr">&quot;clip-distances&quot;</code> feature is available in a GPUAdapter, request a GPUDevice with this feature to get clip distances support in WGSL, and explicitly enable this extension in your WGSL code with <code translate="no" dir="ltr">enable clip_distances;</code>. Once enabled, you can use the <code translate="no" dir="ltr">clip_distances</code> built-in array in your vertex shader. This array holds distances to a user-defined clip plane:</p> <ul> <li>A clip distance of 0 means the vertex lies on the plane.</li> <li>A positive distance means the vertex is inside the clip half-space (the side you want to keep).</li> <li>A negative distance means the vertex is outside the clip half-space (the side you want to discard).</li> </ul> <p>See the following snippet, the <a href="https://chromestatus.com/feature/5141929256550400">chromestatus entry</a>, and <a href="https://issues.chromium.org/issues/358408571">issue 358408571</a>.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">adapter</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">navigator</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">gpu</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">requestAdapter</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">!</span><span class="devsite-syntax-nx">adapter</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">features</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">has</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"clip-distances"</span><span class="devsite-syntax-p">))</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">throw</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-ow">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-ne">Error</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Clip distances support is not available"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-c1">// Explicitly request clip distances support.</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">device</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">adapter</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">requestDevice</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">requiredFeatures</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s2">"clip-distances"</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-p">});</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">vertexShaderModule</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">device</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">createShaderModule</span><span class="devsite-syntax-p">({</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">code</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-sb">`</span> <span class="devsite-syntax-sb"> enable clip_distances;</span> <span class="devsite-syntax-sb"> struct VertexOut {</span> <span class="devsite-syntax-sb"> @builtin(clip_distances) my_clip_distances : array&lt;f32, 1&gt;,</span> <span class="devsite-syntax-sb"> @builtin(position) my_position : vec4f,</span> <span class="devsite-syntax-sb"> }</span> <span class="devsite-syntax-sb"> @vertex fn main() -&gt; VertexOut {</span> <span class="devsite-syntax-sb"> var output : VertexOut;</span> <span class="devsite-syntax-sb"> output.my_clip_distances[0] = 1;</span> <span class="devsite-syntax-sb"> output.my_position = vec4f(0, 0, 0, 1);</span> <span class="devsite-syntax-sb"> return output;</span> <span class="devsite-syntax-sb"> }</span> <span class="devsite-syntax-sb">`</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">});</span> <span class="devsite-syntax-c1">// Send the appropriate commands to the GPU...</span> </code></pre></devsite-code> <h2 id="gpucanvascontext_getconfiguration" data-text="GPUCanvasContext getConfiguration()" tabindex="-1">GPUCanvasContext getConfiguration()</h2> <p>Once GPUCanvasContext <code translate="no" dir="ltr">configure()</code> has been called with a configuration dictionary, the GPUCanvasContext <a href="https://gpuweb.github.io/gpuweb/#dom-gpucanvascontext-getconfiguration"><code translate="no" dir="ltr">getConfiguration()</code></a> method lets you check the canvas context configuration. It includes <code translate="no" dir="ltr">device</code>, <code translate="no" dir="ltr">format</code>, <code translate="no" dir="ltr">usage</code>, <code translate="no" dir="ltr">viewFormats</code>, <code translate="no" dir="ltr">colorSpace</code>, <code translate="no" dir="ltr">toneMapping</code>, and <code translate="no" dir="ltr">alphaMode</code> members. This is useful for tasks like checking if the browser supports HDR canvas, as shown in the <a href="https://webgpu.github.io/webgpu-samples/?sample=particles">Particles (HDR) sample</a>. See the following snippet, the <a href="https://chromestatus.com/feature/6195110870777856">chromestatus entry</a>, and <a href="https://issues.chromium.org/issues/370109829">issue 370109829</a>.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">adapter</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">navigator</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">gpu</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">requestAdapter</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">device</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">adapter</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">requestDevice</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">canvas</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">querySelector</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"canvas"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">context</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">canvas</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">getContext</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"webgpu"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-c1">// Configure the canvas for HDR.</span> <span class="devsite-syntax-nx">context</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">configure</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">device</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">format</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"rgba16float"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">toneMapping</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">mode</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"extended"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-p">});</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">configuration</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">context</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">getConfiguration</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">configuration</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">toneMapping</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">mode</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">===</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"extended"</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// The browser supports HDR canvas.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Warning! The user still needs a HDR display to enjoy HDR content.</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <h2 id="point_and_line_primitives_must_not_have_depth_bias" data-text="Point and line primitives must not have depth bias" tabindex="-1">Point and line primitives must not have depth bias</h2> <p>As announced <a href="/blog/new-in-webgpu-128#deprecate_setting_depth_bias_for_lines_and_points">previously</a>, the WebGPU spec now makes it a validation error to set <code translate="no" dir="ltr">depthBias</code>, <code translate="no" dir="ltr">depthBiasSlopeScale</code>, and <code translate="no" dir="ltr">depthBiasClamp</code> to a non-zero value when the topology for a render pipeline is a line or point type. See <a href="https://issues.chromium.org/issues/352567424">issue 352567424</a>.</p> <h2 id="inclusive_scan_built-in_functions_for_subgroups" data-text="Inclusive scan built-in functions for subgroups" tabindex="-1">Inclusive scan built-in functions for subgroups</h2> <p>As part of the <a href="/blog/new-in-webgpu-128#experimenting_with_subgroups">subgroups experimentation</a>, the following subgroup built-in functions have been added in <a href="https://g-issues.chromium.org/issues/361330160">issue 361330160</a>:</p> <ul> <li><code translate="no" dir="ltr">subgroupInclusiveAdd(value)</code>: Returns the inclusive scan summation of all active invocations <code translate="no" dir="ltr">value</code>s across the subgroup.</li> <li><code translate="no" dir="ltr">subgroupInclusiveMul(value)</code>: Returns the inclusive scan multiplication of all active invocations <code translate="no" dir="ltr">value</code>s across the subgroup.</li> </ul> <h2 id="experimental_support_for_multi-draw_indirect" data-text="Experimental support for multi-draw indirect" tabindex="-1">Experimental support for multi-draw indirect</h2> <p>The multi-draw indirect GPU feature lets you issue multiple draw calls with a single GPU command. This is particularly useful in situations where a large number of objects need to be rendered, such as particle systems, instancing, and large scenes. The <code translate="no" dir="ltr">drawIndirect()</code> and <code translate="no" dir="ltr">drawIndexedIndirect()</code> GPURenderPassEncoder methods can only issue a single draw call at a time from a certain region of a GPU buffer.</p> <p>Until this experimental feature is <a href="https://github.com/gpuweb/gpuweb/pull/2315">standardized</a>, enable the &quot;Unsafe WebGPU Support&quot; flag at <code translate="no" dir="ltr">chrome://flags/#enable-unsafe-webgpu</code> to make it available in Chrome.</p> <p>With the <code translate="no" dir="ltr">&quot;chromium-experimental-multi-draw-indirect&quot;</code> non-standard GPU feature available in a GPUAdapter, request a GPUDevice with this feature. Then create a GPUBuffer with the <code translate="no" dir="ltr">GPUBufferUsage.INDIRECT</code> usage to store the draw calls. You can use it later in the new <code translate="no" dir="ltr">multiDrawIndirect()</code> and <code translate="no" dir="ltr">multiDrawIndexedIndirect()</code> GPURenderPassEncoder methods to issue draw calls inside a render pass. See the following snippet and <a href="https://issues.chromium.org/issues/356461286">issue 356461286</a>.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">adapter</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">navigator</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">gpu</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">requestAdapter</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">!</span><span class="devsite-syntax-nx">adapter</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">features</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">has</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"chromium-experimental-multi-draw-indirect"</span><span class="devsite-syntax-p">))</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">throw</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-ow">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-ne">Error</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Experimental multi-draw indirect support is not available"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-c1">// Explicitly request experimental multi-draw indirect support.</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">device</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">adapter</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">requestDevice</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">requiredFeatures</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s2">"chromium-experimental-multi-draw-indirect"</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-p">});</span> <span class="devsite-syntax-c1">// Draw call have vertexCount, instanceCount, firstVertex, and firstInstance parameters.</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">drawData</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-ow">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">Uint32Array</span><span class="devsite-syntax-p">([</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">3</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">1</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">0</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">0</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// First draw call</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">3</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">1</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">3</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">0</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Second draw call</span> <span class="devsite-syntax-p">]);</span> <span class="devsite-syntax-c1">// Create a buffer to store the draw calls.</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">drawBuffer</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">device</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">createBuffer</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">size</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">drawData</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">byteLength</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">usage</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">GPUBufferUsage</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">INDIRECT</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">|</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">GPUBufferUsage</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">COPY_DST</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">});</span> <span class="devsite-syntax-nx">device</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">queue</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">writeBuffer</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">drawBuffer</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">0</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">drawData</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-c1">// Create a render pipeline, a vertex buffer, and a render pass encoder...</span> <span class="devsite-syntax-c1">// Inside a render pass, issue the draw calls.</span> <span class="devsite-syntax-nx">myPassEncoder</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">setPipeline</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">myPipeline</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-nx">myPassEncoder</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">setVertexBuffer</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-mf">0</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">myVertexBuffer</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-nx">myPassEncoder</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">multiDrawIndirect</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">drawBuffer</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-cm">/*offset=*/</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">0</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-cm">/*maxDrawCount=*/</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">2</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-nx">myPassEncoder</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">end</span><span class="devsite-syntax-p">();</span> </code></pre></devsite-code> <h2 id="shader_module_compilation_option_strict_math" data-text="Shader module compilation option strict math" tabindex="-1">Shader module compilation option strict math</h2> <p>A boolean <code translate="no" dir="ltr">strictMath</code> developer option has been added to GPUShaderModuleDescriptor to let you enable or disable strict math during shader module compilation. It is available behind the &quot;WebGPU Developer Features&quot; flag at <code translate="no" dir="ltr">chrome://flags/#enable-webgpu-developer-features</code>, which means it is a feature intended only for use during development. See <a href="https://issues.chromium.org/issues/42241455">issue 42241455</a>.</p> <p>This option is currently supported on Metal and Direct3D. When strict math is disabled, the compiler may optimize your shaders by:</p> <ul> <li>Ignoring the possibility of NaN and Infinity values.</li> <li>Treating -0 as +0.</li> <li>Replacing division with faster multiplication by the reciprocal.</li> <li>Rearranging operations based on associative and distributive properties.</li> </ul> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">adapter</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">navigator</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">gpu</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">requestAdapter</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">device</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">adapter</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">requestDevice</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">code</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-sb">`</span> <span class="devsite-syntax-sb"> // Examines the bit pattern of the floating-point number to</span> <span class="devsite-syntax-sb"> // determine if it represents a NaN according to the IEEE 754 standard.</span> <span class="devsite-syntax-sb"> fn isNan(x : f32) -&gt; bool {</span> <span class="devsite-syntax-sb"> bool ones_exp = (bitcast&lt;u32&gt;(x) &amp; 0x7f8) == 0x7f8;</span> <span class="devsite-syntax-sb"> bool non_zero_sig = (bitcast&lt;u32&gt;(x) &amp; 0x7ffff) != 0;</span> <span class="devsite-syntax-sb"> return ones_exp &amp;&amp; non_zero_sig;</span> <span class="devsite-syntax-sb"> }</span> <span class="devsite-syntax-sb"> // ...</span> <span class="devsite-syntax-sb">`</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-c1">// Enable strict math during shader compilation.</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">shaderModule</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">device</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">createShaderModule</span><span class="devsite-syntax-p">({</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">code</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">strictMath</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">true</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> </code></pre></devsite-code> <h2 id="remove_gpuadapter_requestadapterinfo" data-text="Remove GPUAdapter requestAdapterInfo()" tabindex="-1">Remove GPUAdapter requestAdapterInfo()</h2> <p>The GPUAdapter <code translate="no" dir="ltr">requestAdapterInfo()</code> asynchronous method is redundant as you can already get GPUAdapterInfo synchronously using the GPUAdapter <code translate="no" dir="ltr">info</code> attribute. Hence, the non-standard GPUAdapter <code translate="no" dir="ltr">requestAdapterInfo()</code> method is now removed. See the <a href="https://groups.google.com/a/chromium.org/g/blink-dev/c/HxOgGf4NzQ4">intent to remove</a>.</p> <h2 id="dawn_updates" data-text="Dawn updates" tabindex="-1">Dawn updates</h2> <p>The <code translate="no" dir="ltr">tint_benchmark</code> executable measures the cost of translating shaders from WGSL to each backend language. Check out the new <a href="https://dawn.googlesource.com/dawn/+/main/docs/tint/benchmark.md">documentation</a> to learn more about it.</p> <p>This covers only some of the key highlights. Check out the exhaustive <a href="https://dawn.googlesource.com/dawn/+log/chromium/6723..chromium/6778?n=1000">list of commits</a>.</p> <h2 id="whats-new" data-text="What's New in WebGPU" tabindex="-1">What's New in WebGPU</h2> <p>A list of everything that has been covered in the <a href="/docs/web-platform/webgpu/news">What&#39;s New in WebGPU</a> series.</p> <h3 id="chrome133" data-text="Chrome 133" tabindex="-1">Chrome 133</h3> <ul> <li><a href="/blog/new-in-webgpu-133#additional_unorm8x4-bgra_and_1-component_vertex_formats">Additional unorm8x4-bgra and 1-component vertex formats</a></li> <li><a href="/blog/new-in-webgpu-133#allow_unknown_limits_to_be_requested_with_undefined_value">Allow unknown limits to be requested with undefined value</a></li> <li><a href="/blog/new-in-webgpu-133#wgsl_alignment_rules_changes">WGSL alignment rules changes</a></li> <li><a href="/blog/new-in-webgpu-133#wgsl_performance_gains_with_discard">WGSL performance gains with discard</a></li> <li><a href="/blog/new-in-webgpu-133#use_videoframe_displaysize_for_external_textures">Use VideoFrame displaySize for external textures</a></li> <li><a href="/blog/new-in-webgpu-133#handle_images_with_non-default_orientations_using_copyexternalimagetotexture">Handle images with non-default orientations using copyExternalImageToTexture</a></li> <li><a href="/blog/new-in-webgpu-133#improving_developer_experience">Improving developer experience</a></li> <li><a href="/blog/new-in-webgpu-133#enable_compatibility_mode_with_featurelevel">Enable compatibility mode with featureLevel</a></li> <li><a href="/blog/new-in-webgpu-133#experimental_subgroup_features_cleanup">Experimental subgroup features cleanup</a></li> <li><a href="/blog/new-in-webgpu-133#deprecate_maxinterstageshadercomponents_limit">Deprecate maxInterStageShaderComponents limit</a></li> <li><a href="/blog/new-in-webgpu-133#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome132" data-text="Chrome 132" tabindex="-1">Chrome 132</h3> <ul> <li><a href="/blog/new-in-webgpu-132#texture_view_usage">Texture view usage</a></li> <li><a href="/blog/new-in-webgpu-132#32-bit_float_textures_blending">32-bit float textures blending</a></li> <li><a href="/blog/new-in-webgpu-132#gpudevice_adapterinfo_attribute">GPUDevice adapterInfo attribute</a></li> <li><a href="/blog/new-in-webgpu-132#configuring_canvas_context_with_invalid_format_throw_javascript_error">Configuring canvas context with invalid format throw JavaScript error</a></li> <li><a href="/blog/new-in-webgpu-132#filtering_sampler_restrictions_on_textures">Filtering sampler restrictions on textures</a></li> <li><a href="/blog/new-in-webgpu-132#extended_subgroups_experimentation">Extended subgroups experimentation</a></li> <li><a href="/blog/new-in-webgpu-132#improving_developer_experience">Improving developer experience</a></li> <li><a href="/blog/new-in-webgpu-132#experimental_support_for_16-bit_normalized_texture_formats">Experimental support for 16-bit normalized texture formats</a></li> <li><a href="/blog/new-in-webgpu-132#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome131" data-text="Chrome 131" tabindex="-1">Chrome 131</h3> <ul> <li><a href="/blog/new-in-webgpu-131#clip_distances_in_wgsl">Clip distances in WGSL</a></li> <li><a href="/blog/new-in-webgpu-131#gpucanvascontext_getconfiguration">GPUCanvasContext getConfiguration()</a></li> <li><a href="/blog/new-in-webgpu-131#point_and_line_primitives_must_not_have_depth_bias">Point and line primitives must not have depth bias</a></li> <li><a href="/blog/new-in-webgpu-131#inclusive_scan_built-in_functions_for_subgroups">Inclusive scan built-in functions for subgroups</a></li> <li><a href="/blog/new-in-webgpu-131#experimental_support_for_multi-draw_indirect">Experimental support for multi-draw indirect</a></li> <li><a href="/blog/new-in-webgpu-131#shader_module_compilation_option_strict_math">Shader module compilation option strict math</a></li> <li><a href="/blog/new-in-webgpu-131#remove_gpuadapter_requestadapterinfo">Remove GPUAdapter requestAdapterInfo()</a></li> <li><a href="/blog/new-in-webgpu-131#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome130" data-text="Chrome 130" tabindex="-1">Chrome 130</h3> <ul> <li><a href="/blog/new-in-webgpu-130#dual_source_blending">Dual source blending</a></li> <li><a href="/blog/new-in-webgpu-130#shader_compilation_time_improvements_on_metal">Shader compilation time improvements on Metal</a></li> <li><a href="/blog/new-in-webgpu-130#deprecation_of_gpuadapter_requestadapterinfo">Deprecation of GPUAdapter requestAdapterInfo()</a></li> <li><a href="/blog/new-in-webgpu-130#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome129" data-text="Chrome 129" tabindex="-1">Chrome 129</h3> <ul> <li><a href="/blog/new-in-webgpu-129#hdr_support_with_canvas_tone_mapping_mode">HDR support with canvas tone mapping mode</a></li> <li><a href="/blog/new-in-webgpu-129#expanded_subgroups_support">Expanded subgroups support</a></li> <li><a href="/blog/new-in-webgpu-129#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome128" data-text="Chrome 128" tabindex="-1">Chrome 128</h3> <ul> <li><a href="/blog/new-in-webgpu-128#experimenting_with_subgroups">Experimenting with subgroups</a></li> <li><a href="/blog/new-in-webgpu-128#deprecate_setting_depth_bias_for_lines_and_points">Deprecate setting depth bias for lines and points</a></li> <li><a href="/blog/new-in-webgpu-128#hide_uncaptured_error_devtools_warning_if_preventdefault">Hide uncaptured error DevTools warning if preventDefault</a></li> <li><a href="/blog/new-in-webgpu-128#wgsl_interpolate_sampling_first_and_either">WGSL interpolate sampling first and either</a></li> <li><a href="/blog/new-in-webgpu-128#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome127" data-text="Chrome 127" tabindex="-1">Chrome 127</h3> <ul> <li><a href="/blog/new-in-webgpu-127#experimental_support_for_opengl_es_on_android">Experimental support for OpenGL ES on Android</a></li> <li><a href="/blog/new-in-webgpu-127#gpuadapter_info_attribute">GPUAdapter info attribute</a></li> <li><a href="/blog/new-in-webgpu-127#webassembly_interop_improvements">WebAssembly interop improvements</a></li> <li><a href="/blog/new-in-webgpu-127#improved_command_encoder_errors">Improved command encoder errors</a></li> <li><a href="/blog/new-in-webgpu-127#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome126" data-text="Chrome 126" tabindex="-1">Chrome 126</h3> <ul> <li><a href="/blog/new-in-webgpu-126#increase_maxtexturearraylayers_limit">Increase maxTextureArrayLayers limit</a></li> <li><a href="/blog/new-in-webgpu-126#buffer_upload_optimization_for_vulkan_backend">Buffer upload optimization for Vulkan backend</a></li> <li><a href="/blog/new-in-webgpu-126#shader_compilation_time_improvements">Shader compilation time improvements</a></li> <li><a href="/blog/new-in-webgpu-126#submitted_command_buffers_must_be_unique">Submitted command buffers must be unique</a></li> <li><a href="/blog/new-in-webgpu-126#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome125" data-text="Chrome 125" tabindex="-1">Chrome 125</h3> <ul> <li><a href="/blog/new-in-webgpu-125#subgroups_feature_in_development">Subgroups (feature in development)</a></li> <li><a href="/blog/new-in-webgpu-125#render_to_slice_of_3d_texture">Render to slice of 3D texture</a></li> <li><a href="/blog/new-in-webgpu-125#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome124" data-text="Chrome 124" tabindex="-1">Chrome 124</h3> <ul> <li><a href="/blog/new-in-webgpu-124#read-only_and_read-write_storage_textures">Read-only and read-write storage textures</a></li> <li><a href="/blog/new-in-webgpu-124#service_workers_and_shared_workers_support">Service workers and shared workers support</a></li> <li><a href="/blog/new-in-webgpu-124#new_adapter_information_attributes">New adapter information attributes</a></li> <li><a href="/blog/new-in-webgpu-124#bug_fixes">Bug fixes</a></li> <li><a href="/blog/new-in-webgpu-124#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome123" data-text="Chrome 123" tabindex="-1">Chrome 123</h3> <ul> <li><a href="/blog/new-in-webgpu-123#dp4a_built-in_functions_support_in_wgsl">DP4a built-in functions support in WGSL</a></li> <li><a href="/blog/new-in-webgpu-123#unrestricted_pointer_parameters_in_wgsl">Unrestricted pointer parameters in WGSL</a></li> <li><a href="/blog/new-in-webgpu-123#syntax_sugar_for_dereferencing_composites_in_wgsl">Syntax sugar for dereferencing composites in WGSL</a></li> <li><a href="/blog/new-in-webgpu-123#separate_read-only_state_for_stencil_and_depth_aspects">Separate read-only state for stencil and depth aspects</a></li> <li><a href="/blog/new-in-webgpu-123#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome122" data-text="Chrome 122" tabindex="-1">Chrome 122</h3> <ul> <li><a href="/blog/new-in-webgpu-122#expand_reach_with_compatibility_mode_feature_in_development">Expand reach with compatibility mode (feature in development)</a></li> <li><a href="/blog/new-in-webgpu-122#increase_maxvertexattributes_limit">Increase maxVertexAttributes limit</a></li> <li><a href="/blog/new-in-webgpu-122#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome121" data-text="Chrome 121" tabindex="-1">Chrome 121</h3> <ul> <li><a href="/blog/new-in-webgpu-121#support-webgpu-on-android">Support WebGPU on Android</a></li> <li><a href="/blog/new-in-webgpu-121#use_dxc_instead_of_fxc_for_shader_compilation_on_windows">Use DXC instead of FXC for shader compilation on Windows</a></li> <li><a href="/blog/new-in-webgpu-121#timestamp_queries_in_compute_and_render_passes">Timestamp queries in compute and render passes</a></li> <li><a href="/blog/new-in-webgpu-121#default_entry_points_to_shader_modules">Default entry points to shader modules</a></li> <li><a href="/blog/new-in-webgpu-121#support_display-p3_as_gpuexternaltexture_color_space">Support display-p3 as GPUExternalTexture color space</a></li> <li><a href="/blog/new-in-webgpu-121#memory_heaps_info">Memory heaps info</a></li> <li><a href="/blog/new-in-webgpu-121#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome120" data-text="Chrome 120" tabindex="-1">Chrome 120</h3> <ul> <li><a href="/blog/new-in-webgpu-120#support_for_16-bit_floating-point_values_in_wgsl">Support for 16-bit floating-point values in WGSL</a></li> <li><a href="/blog/new-in-webgpu-120#push_the_limits">Push the limits</a></li> <li><a href="/blog/new-in-webgpu-120#changes_to_depth-stencil_state">Changes to depth-stencil state</a></li> <li><a href="/blog/new-in-webgpu-120#adapter_information_updates">Adapter information updates</a></li> <li><a href="/blog/new-in-webgpu-120#timestamp_queries_quantization">Timestamp queries quantization</a></li> <li><a href="/blog/new-in-webgpu-120#spring-cleaning_features">Spring-cleaning features</a></li> </ul> <h3 id="chrome119" data-text="Chrome 119" tabindex="-1">Chrome 119</h3> <ul> <li><a href="/blog/new-in-webgpu-119#filterable_32-bit_float_textures">Filterable 32-bit float textures</a></li> <li><a href="/blog/new-in-webgpu-119#unorm10-10-10-2_vertex_format">unorm10-10-10-2 vertex format</a></li> <li><a href="/blog/new-in-webgpu-119#rgb10a2uint_texture_format">rgb10a2uint texture format</a></li> <li><a href="/blog/new-in-webgpu-119#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome118" data-text="Chrome 118" tabindex="-1">Chrome 118</h3> <ul> <li><a href="/blog/new-in-webgpu-118#htmlimageelement_and_imagedata_support_in_copyexternalimagetotexture">HTMLImageElement and ImageData support in <code translate="no" dir="ltr">copyExternalImageToTexture()</code></a></li> <li><a href="/blog/new-in-webgpu-118#experimental_support_for_read-write_and_read-only_storage_texture">Experimental support for read-write and read-only storage texture</a></li> <li><a href="/blog/new-in-webgpu-118#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome117" data-text="Chrome 117" tabindex="-1">Chrome 117</h3> <ul> <li><a href="/blog/new-in-webgpu-117#unset_vertex_buffer">Unset vertex buffer</a></li> <li><a href="/blog/new-in-webgpu-117#unset_bind_group">Unset bind group</a></li> <li><a href="/blog/new-in-webgpu-117#silence_errors_from_async_pipeline_creation_when_device_is_lost">Silence errors from async pipeline creation when device is lost</a></li> <li><a href="/blog/new-in-webgpu-117#spir-v_shader_module_creation_updates">SPIR-V shader module creation updates</a></li> <li><a href="/blog/new-in-webgpu-117#improving_developer_experience">Improving developer experience</a></li> <li><a href="/blog/new-in-webgpu-117#caching_pipelines_with_automatically_generated_layout">Caching pipelines with automatically generated layout</a></li> <li><a href="/blog/new-in-webgpu-117#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome116" data-text="Chrome 116" tabindex="-1">Chrome 116</h3> <ul> <li><a href="/blog/new-in-webgpu-116#webcodecs_integration">WebCodecs integration</a></li> <li><a href="/blog/new-in-webgpu-116#lost_device_returned_by_gpuadapter_requestdevice">Lost device returned by GPUAdapter <code translate="no" dir="ltr">requestDevice()</code></a></li> <li><a href="/blog/new-in-webgpu-116#keep_video_playback_smooth_if_importexternaltexture_is_called">Keep video playback smooth if <code translate="no" dir="ltr">importExternalTexture()</code> is called</a></li> <li><a href="/blog/new-in-webgpu-116#spec_conformance">Spec conformance</a></li> <li><a href="/blog/new-in-webgpu-116#improving_developer_experience">Improving developer experience</a></li> <li><a href="/blog/new-in-webgpu-116#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome115" data-text="Chrome 115" tabindex="-1">Chrome 115</h3> <ul> <li><a href="/blog/new-in-webgpu-115#supported_wgsl_language_extensions">Supported WGSL language extensions</a></li> <li><a href="/blog/new-in-webgpu-115#experimental_support_for_direct3d_11">Experimental support for Direct3D 11</a></li> <li><a href="/blog/new-in-webgpu-115#get_discrete_gpu_by_default_on_ac_power">Get discrete GPU by default on AC power</a></li> <li><a href="/blog/new-in-webgpu-115#improving_developer_experience">Improving developer experience</a></li> <li><a href="/blog/new-in-webgpu-115#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome114" data-text="Chrome 114" tabindex="-1">Chrome 114</h3> <ul> <li><a href="/blog/new-in-webgpu-114#optimize_javascript">Optimize JavaScript</a></li> <li><a href="/blog/new-in-webgpu-114#getcurrenttexture_on_unconfigured_canvas_throws_invalidstateerror">getCurrentTexture() on unconfigured canvas throws InvalidStateError</a></li> <li><a href="/blog/new-in-webgpu-114#wgsl_updates">WGSL updates</a></li> <li><a href="/blog/new-in-webgpu-114#dawn_updates">Dawn updates</a></li> </ul> <h3 id="chrome113" data-text="Chrome 113" tabindex="-1">Chrome 113</h3> <ul> <li><a href="/blog/new-in-webgpu-113#use_webcodecs_videoframe_source_in_importexternaltexture">Use WebCodecs VideoFrame source in <code translate="no" dir="ltr">importExternalTexture()</code></a></li> </ul> </div> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2024-11-06 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-11-06 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Contribute</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://issuetracker.google.com/issues/new?component=1400036&amp;template=1897236" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > File a bug </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://issuetracker.google.com/issues?q=status:open%20componentid:1400036&amp;s=created_time:desc" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > See open issues </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Related content</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://blog.chromium.org/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Chromium updates </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/case-studies" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Case studies </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/deprecated" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Archive </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://web.dev/shows" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Podcasts &amp; shows </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Follow</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://twitter.com/ChromiumDev" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > @ChromiumDev on X </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://www.youtube.com/user/ChromeDevelopers" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > YouTube </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://www.linkedin.com/showcase/chrome-for-developers" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Chrome for Developers on LinkedIn </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/static/blog/feed.xml" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > RSS </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="nl" >Nederlands</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[]</script> <script type="application/json" tag-management>{&#34;at&#34;: &#34;True&#34;, &#34;ga4&#34;: [], &#34;ga4p&#34;: [], &#34;gtm&#34;: [{&#34;id&#34;: &#34;GTM-5QF3RT2&#34;, &#34;purpose&#34;: 0}], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;False&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;blog&#34;, &#34;projectName&#34;: &#34;Blog&#34;, &#34;signedIn&#34;: &#34;False&#34;, &#34;tenant&#34;: &#34;chrome&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="gjAQVuWPJNon2xvbqD5/I37w3sfUPc"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/js/app_loader.js', '[53,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome","https://chrome-dot-devsite-v2-prod-3p.appspot.com",1,null,["/_pwa/chrome/manifest.json","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/images/favicon.png","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/chrome/images/lockup.svg","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyCNm9YxQumEXwGJgTDjxoxXK6m1F-9720Q","AIzaSyCc76DZePGtoyUjqKrLdsMGk_ry7sljLbY","developer.chrome.com","AIzaSyB9bqgQ2t11WJsOX8qNsCQ6U-w91mmqF-I","AIzaSyAdYnStPdzjcJJtQ0mvIaeaMKj7_t6J_Fg",null,null,null,["Cloud__enable_cloudx_experiment_ids","DevPro__enable_cloud_innovators_plus","TpcFeatures__enable_mirror_tenant_redirects","MiscFeatureFlags__developers_footer_image","MiscFeatureFlags__enable_variable_operator","DevPro__enable_developer_subscriptions","Concierge__enable_pushui","Cloud__enable_llm_concierge_chat","Profiles__enable_developer_profiles_callout","Profiles__enable_release_notes_notifications","Cloud__enable_cloud_shell","Profiles__enable_page_saving","Cloud__enable_cloud_shell_fte_user_flow","EngEduTelemetry__enable_engedu_telemetry","Profiles__enable_dashboard_curated_recommendations","Profiles__enable_awarding_url","Cloud__enable_cloud_dlp_service","Profiles__enable_stripe_subscription_management","Profiles__require_profile_eligibility_for_signin","Search__enable_ai_eligibility_checks","Cloud__enable_legacy_calculator_redirect","Profiles__enable_completecodelab_endpoint","Profiles__enable_recognition_badges","Profiles__enable_join_program_group_endpoint","CloudShell__cloud_code_overflow_menu","Profiles__enable_public_developer_profiles","Cloud__enable_cloud_facet_chat","Profiles__enable_completequiz_endpoint","Search__enable_dynamic_content_confidential_banner","Cloud__enable_free_trial_server_call","Cloud__enable_cloudx_ping","MiscFeatureFlags__enable_view_transitions","MiscFeatureFlags__enable_firebase_utm","Search__enable_page_map","TpcFeatures__enable_unmirrored_page_left_nav","Experiments__reqs_query_experiments","Profiles__enable_complete_playlist_endpoint","MiscFeatureFlags__emergency_css","Analytics__enable_clearcut_logging","Profiles__enable_profile_collections","CloudShell__cloud_shell_button","BookNav__enable_tenant_cache_key","MiscFeatureFlags__enable_project_variables","MiscFeatureFlags__developers_footer_dark_image","Search__enable_suggestions_from_borg","OnSwitch__enable","MiscFeatureFlags__enable_explain_this_code"],null,null,"AIzaSyA58TaKli1DculwmAmbpzLVGuWc8eCQgQc","https://developerscontentserving-pa.googleapis.com","AIzaSyDWBU60w0P9hEkr29kkksYs8Z7gvZ8u_wc","https://developerscontentsearch-pa.googleapis.com",2,4,null,"https://developerprofiles-pa.googleapis.com",[53,"chrome","Chrome for Developers","developer.chrome.com",null,"chrome-dot-devsite-v2-prod-3p.appspot.com",null,null,[null,null,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],null,null,null,null,[1,null,1],[1,1,null,1,1]],null,[69,null,null,null,null,null,"/images/lockup.svg","/images/touchicon-180.png",null,null,null,1,1,null,null,null,null,null,null,null,null,2,null,null,null,"/images/lockup-dark-theme.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],[1,1]],[[null,null,null,null,null,["GTM-5QF3RT2"],null,null,null,null,null,[["GTM-5QF3RT2",1]],1]],null,4],null,null,1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10