Nowości w WebGPU (Chrome 135)

François Beaufort
François Beaufort

Data publikacji: 26 marca 2025 r.

.

Zezwalanie na tworzenie układu potoku z układem grupy wiązania null

Wcześniej tworzenie pustego układu grupy wiązania wymagało dodania grupy wiązania z zerowymi wiązaniami, co było niewygodne. Nie jest to już konieczne, ponieważ układy grup wiązania z wartością null są teraz dozwolone i ignorowane podczas tworzenia układu potoku. To powinno ułatwić proces tworzenia.

Możesz na przykład utworzyć potok, który używa tylko układów grupy bind o wartościach 0 i 2. Możesz przypisać układ grupy wiązania 1 do danych fragmentu, a układ grupy wiązania 2 do danych wierzchołka, a następnie wykonać renderowanie 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],
});

Zezwalanie na wyświetlanie widocznych obszarów poza granicami docelowych obszarów renderowania

Zmniejszono wymagania dotyczące weryfikacji widocznego obszaru, aby umożliwić wyświetlanie widocznego obszaru poza granicami obszaru docelowego. Jest to szczególnie przydatne w przypadku 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

Flaga chrome://flags/#enable-unsafe-webgpu umożliwia teraz samodzielne włączanie wszystkich funkcji wymaganych 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ą Vulkana. Zobacz ten przykład i problem dawn:389876644.

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

Usuń limit maxInterStageShaderComponents

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

  • Redundancja z poziomem maxInterStageShaderVariables: ten limit służy już do podobnego celu, czyli do kontrolowania ilości danych przekazywanych między etapami shadera.
  • Niewielkie rozbieżności: chociaż istnieją niewielkie różnice w sposobie obliczania tych 2 limitów, są one niewielkie i można skutecznie zarządzać nimi w ramach limitu maxInterStageShaderVariables.
  • Upraszczanie: usunięcie maxInterStageShaderComponents upraszcza interfejs shadera i ułatwia pracę deweloperom. Zamiast zarządzać 2 osobnymi limitami o niewielkich różnicach, mogą skupić się na bardziej odpowiednim i pełniejszym maxInterStageShaderVariables.

Zobacz intencję usunięciaproblem 364338810.

Aktualizacje świtu

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

Struktury WGPURequiredLimitsWGPUSupportedLimits zostały spłaszczone do WGPULimits. Zobacz problem 374263404.

Zmieniono nazwy tych struktur. Zobacz problem 42240793.

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

Do struktury WGPUAdapterInfo dodano elementy subgroupMinSizesubgroupMaxSize. Zobacz webgpu-headers PR.

Śledzenie użycia interfejsu Dawn API w Metalu jest teraz możliwe po uruchomieniu programu ze zmienną środowiskową DAWN_TRACE_FILE_BASE, która zapisuje plik .gputrace. Można go później załadować w Metal Debugger w XCode. Zapoznaj się z dokumentacją Debugging Dawn.

Obejmuje to tylko niektóre najważniejsze informacje. Zapoznaj się z pełną listą commitów.

Co nowego w WebGPU

Lista wszystkich tematów omawianych w cyklu Co nowego w WebGPU.

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