Nowości w WebGPU (Chrome 140)

François Beaufort
François Beaufort

Opublikowano: 27 sierpnia 2025 r.

Żądania dotyczące urządzeń zużywają adapter

Zgodnie ze specyfikacją WebGPU adapter jest oznaczany jako "zużyty" po pomyślnym żądaniu urządzenia. W związku z tym wszystkie kolejne wywołania requestDevice() korzystające z tego samego adaptera będą teraz powodować odrzucenie obietnicy. Wcześniej te wywołania zwracały 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, gdy używany jest widok tekstury

Obiekt GPUTexture można teraz używać bezpośrednio jako GPUBindingResource, aby udostępnić go shaderowi do powiązania. Można go też używać jako GPURenderPassColorAttachment view, GPURenderPassColorAttachment resolveTarget i GPURenderPassDepthStencilAttachment view, co zwiększa wygodę. Jest to prostsze rozwiązanie niż używanie GPUTextureView do uzyskania widoku domyślnego. 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 },
  ],
});

WGSL textureSampleLevel obsługuje tekstury 1D

Tekstury 1D można teraz próbkować za pomocą textureSampleLevel(), aby zachować spójność z teksturami 2D. Dzięki temu możesz próbkować teksturę 1D z shadera wierzchołków, co wcześniej było możliwe tylko z shadera fragmentów za pomocą 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 zostało wycofane. Specyfikacja WebGPU wyraźnie na to nie zezwala, a wcześniejsze zezwolenie w Chrome było błędem, ponieważ ten format jest przeznaczony do dostępu tylko do zapisu i nie jest przenośny. Zobacz problem 427681156.

Usunięcie atrybutu GPUAdapter isFallbackAdapter

Zgodnie z wcześniejszą zapowiedzią atrybut GPUAdapter isFallbackAdapter został usunięty. Zastąpił go atrybut GPUAdapterInfo isFallbackAdapter, który został wprowadzony w Chrome 136. Zobacz zamiar usunięcia.

Aktualizacje Dawn

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 urządzenia dump_shaders_on_failure 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że zostać rozszerzone na inne backendy. Zobacz problem 429187478.

W backendzie Vulkan wprowadzono kilka zmian, aby zmniejszyć obciążenie podczas przesyłania przejść renderowania, zwłaszcza w celu zwiększenia wydajności na mobilnych GPU. Na przykład: buforowanie VkFramebuffers.

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

Co nowego w WebGPU

Lista wszystkich informacji, które zostały omówione w serii Co nowego w WebGPU.

Chrome 147–148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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