Nowości w WebGPU (Chrome 135)

François Beaufort
François Beaufort

Data publikacji: 26 marca 2025 r.

Zezwól na tworzenie układu potoku z układem grupy wiązań o wartości null

Wcześniej utworzenie pustego układu grupy powiązań wymagało dodania grupy powiązań bez powiązań, co było niewygodne. Nie jest to już konieczne, ponieważ puste układy grup wiązań są teraz dozwolone i ignorowane podczas tworzenia układu potoku. Powinno to ułatwić programowanie.

Możesz na przykład utworzyć potok, który używa tylko układów grup wiązań 0 i 2. Możesz przypisać układ grupy powiązań 1 do danych fragmentu, a układ grupy powiązań 2 do danych wierzchołka, a następnie renderować bez shadera fragmentu. Zobacz problem 377836524.

const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });

// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

Zezwalaj na wykraczanie obszarów widoku poza granice docelowych obszarów renderowania

Wymagania dotyczące weryfikacji widocznego obszaru zostały złagodzone, aby umożliwić wyjście poza granice miejsca docelowego renderowania. Jest to szczególnie przydatne do rysowania elementów 2D, takich jak interfejs, które mogą wykraczać poza bieżący widoczny obszar. Zobacz problem 390162929.

const passEncoder = myCommandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: myColorTexture.createView(),
      loadOp: "clear",
      storeOp: "store",
    },
  ],
});

// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
  /*x=*/ -8,
  /*y=*/ -8,
  /*width=*/ myColorTexture.width + 16,
  /*height=*/ myColorTexture.height + 16,
  /*minDepth=*/ 0,
  /*maxDepth=*/ 1,
);

// Draw geometry and complete the render pass as usual.

Łatwiejszy dostęp do eksperymentalnego trybu zgodności na Androidzie

Sama flaga chrome://flags/#enable-unsafe-webgpu włącza teraz wszystkie funkcje wymagane do eksperymentalnego trybu zgodności WebGPU na Androidzie. Dzięki temu możesz poprosić o GPUAdapter w trybie zgodności za pomocą opcji featureLevel: "compatibility", a nawet uzyskać dostęp do backendu OpenGL ES na urządzeniach, które nie obsługują platformy Vulkan. Zapoznaj się z tym przykładem i zgłoś problem dawn:389876644.

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
Strona raportu WebGPU pokazuje obiekt GPUAdapter w trybie zgodności na urządzeniu z Androidem.
Informacje o adapterze trybu zgodności na stronie webgpureport.org.

Usuwanie limitu maxInterStageShaderComponents

Jak wcześniej informowaliśmy, limit maxInterStageShaderComponents został usunięty z powodu kombinacji czynników:

  • Nadmiarowość z maxInterStageShaderVariables: ten limit służy już do podobnego celu, kontrolując ilość danych przekazywanych między etapami shadera.
  • Niewielkie rozbieżności: chociaż sposób obliczania tych 2 limitów nieco się różni, różnice te są niewielkie i można nimi skutecznie zarządzać w ramach limitu maxInterStageShaderVariables.
  • Uproszczenie: usunięcie maxInterStageShaderComponents upraszcza interfejs shadera i zmniejsza złożoność dla deweloperów. Zamiast zarządzać 2 osobnymi limitami o niewielkich różnicach, mogą skupić się na bardziej odpowiednim i wszechstronnym limicie maxInterStageShaderVariables.

Zobacz zamiar usunięciaproblem 364338810.

Aktualizacje o świcie

Nie można już używać samplera filtrującego do próbkowania tekstury głębi. Przypominamy, że tekstury głębi można używać tylko z próbnikami bez filtrowania lub próbnikami porównawczymi. Zobacz problem 379788112.

Struktury WGPURequiredLimits i WGPUSupportedLimits zostały spłaszczone do WGPULimits. Zobacz problem 374263404.

Zmieniliśmy nazwy tych struktur. Zobacz problem 42240793.

  • WGPUImageCopyBuffer to teraz WGPUTexelCopyBufferInfo
  • WGPUImageCopyTexture to teraz WGPUTexelCopyTextureInfo
  • WGPUTextureDataLayout to teraz WGPUTexelCopyBufferLayout

Elementy subgroupMinSizesubgroupMaxSize zostały dodane do struktury WGPUAdapterInfo. Zobacz webgpu-headers PR.

Śledzenie użycia interfejsu Dawn API w Metal jest teraz możliwe podczas uruchamiania programu ze zmienną środowiskową DAWN_TRACE_FILE_BASE, która zapisuje plik .gputrace, który można później wczytać do debugera Metal w XCode. Zapoznaj się z dokumentacją Debugowanie Dawn.

Obejmuje to tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.

Nowości w WebGPU

Lista wszystkich tematów omówionych w serii Co nowego w WebGPU.

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113