Nowości w WebGPU (Chrome 140)

François Beaufort
François Beaufort

Opublikowano: 27 sierpnia 2025 r.

Żądania urządzenia zużywają adapter

Zgodnie ze specyfikacją WebGPU adapter jest oznaczany jako „użyty” po udanym żądaniu urządzenia. W konsekwencji wszystkie kolejne wywołania requestDevice() z użyciem tego samego adaptera będą teraz powodować odrzucenie obietnicy. Wcześniej w przypadku tych wywołań zwracane było urządzenie, które zostało utracone podczas tworzenia. Zobacz problem 415825174.

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

await adapter.requestDevice(); // Fails because adapter has been consumed.

Skrót do używania tekstury w miejscu, w którym używany jest widok tekstury

Obiekt GPUTexture można teraz używać bezpośrednio jako GPUBindingResource, aby udostępniać go do shadera na potrzeby powiązania. Może być też używany jako GPURenderPassColorAttachment view, GPURenderPassColorAttachment resolveTarget i GPURenderPassDepthStencilAttachment view, co poprawia ergonomię. Jest to prostsze rozwiązanie niż używanie GPUTextureView do uzyskania domyślnego widoku. Zobacz problem 425906323.

const bindGroup = myDevice.createBindGroup({
  layout: myPipeline.getBindGroupLayout(0),
  entries: [
    { binding: 0, resource: mySampler },
    { binding: 1, resource: myTexture }, // Same as myTexture.createView()
    { binding: 2, resource: myExternalTexture },
    { binding: 3, resource: myBuffer },
  ],
});

Funkcja WGSL textureSampleLevel obsługuje tekstury 1D

Tekstury 1D można teraz próbkować za pomocą funkcji textureSampleLevel(), aby zachować spójność z teksturami 2D. Umożliwia to próbkowanie tekstury 1D z shadera wierzchołków, co wcześniej było możliwe tylko w przypadku shadera fragmentów z textureSample(). Zobacz problem 382514673.

Wycofanie użycia tekstury pamięci tylko do odczytu bgra8unorm

Używanie formatu "bgra8unorm" z teksturami pamięci tylko do odczytu jest obecnie wycofywane. Specyfikacja WebGPU wyraźnie na to nie zezwala, a wcześniejsze zezwolenie na to w Chrome było błędem, ponieważ ten format jest przeznaczony tylko do zapisu i nie jest przenośny. Zobacz problem 427681156.

Usunięcie atrybutu GPUAdapter isFallbackAdapter

Zgodnie z wcześniejszym ogłoszeniem atrybut GPUAdapter isFallbackAdapter został usunięty. Został on zastąpiony atrybutem GPUAdapterInfo isFallbackAdapter, który został wprowadzony w Chrome 136. Zobacz zamiar usunięcia.

Aktualizacje o świcie

Funkcja wgpuInstanceGetWGSLLanguageFeatures() służy do pobierania listy funkcji języka WGSL obsługiwanych przez instancję. Wcześniej zwracała wartość WGPUStatus. Została zaktualizowana, aby nie zwracać wartości, ponieważ nie może się nie powieść. Zobacz problem 429178774.

Funkcja wgpuSurfacePresent() zwraca teraz błąd WGPUStatus, jeśli powierzchnia nie ma bieżącej tekstury. Zobacz problem 425930323

Nowa funkcja wgpu::InstanceFeatureName::MultipleDevicesPerAdapter umożliwia adapterom tworzenie wielu urządzeń bez „zużywania się”. Zobacz problem 415825174.

Przełącznik dump_shaders_on_failure urządzenia umożliwia zrzucanie shaderów tylko w przypadku awarii na potrzeby debugowania. Dotyczy to wyłącznie backendów D3, ale w przyszłości możemy rozszerzyć tę funkcję na inne backendy. Zobacz problem 429187478.

Wprowadziliśmy wiele zmian w backendzie Vulkan, aby zmniejszyć obciążenie podczas przesyłania procesów renderowania, co poprawia wydajność na mobilnych procesorach graficznych. Na przykład: caching VkFramebuffers.

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