Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 59b6d9a2d0273c0aa2fd270cf726ea3b5c011c98
https://github.com/WebKit/WebKit/commit/59b6d9a2d0273c0aa2fd270cf726ea3b5c011c98
Author: Mike Wyrzykowski <[email protected]>
Date: 2026-08-04 (Tue, 04 Aug 2026)
Changed paths:
A
LayoutTests/fast/webgpu/render-bundle-draw-indexed-indirect-clamped-expected.txt
A LayoutTests/fast/webgpu/render-bundle-draw-indexed-indirect-clamped.html
A LayoutTests/fast/webgpu/render-bundle-draw-indexed-indirect-expected.txt
A
LayoutTests/fast/webgpu/render-bundle-draw-indexed-indirect-invalidation-expected.txt
A
LayoutTests/fast/webgpu/render-bundle-draw-indexed-indirect-invalidation.html
A LayoutTests/fast/webgpu/render-bundle-draw-indexed-indirect.html
A LayoutTests/fast/webgpu/render-bundle-draw-indirect-clamped-expected.txt
A LayoutTests/fast/webgpu/render-bundle-draw-indirect-clamped.html
A LayoutTests/fast/webgpu/render-bundle-draw-indirect-expected.txt
A LayoutTests/fast/webgpu/render-bundle-draw-indirect.html
M
LayoutTests/http/tests/webgpu/webgpu/api/operation/memory_sync/buffer/single_buffer-expected.txt
M Source/WebGPU/WebGPU/BindableResource.h
M Source/WebGPU/WebGPU/Buffer.h
M Source/WebGPU/WebGPU/Buffer.mm
M Source/WebGPU/WebGPU/CommandEncoder.mm
M Source/WebGPU/WebGPU/Device.h
M Source/WebGPU/WebGPU/Device.mm
M Source/WebGPU/WebGPU/Queue.mm
M Source/WebGPU/WebGPU/RenderBundleEncoder.h
M Source/WebGPU/WebGPU/RenderBundleEncoder.mm
M Source/WebGPU/WebGPU/RenderPassEncoder.h
M Source/WebGPU/WebGPU/RenderPassEncoder.mm
Log Message:
-----------
executeBundles re-replays bundles containing indirect draws and reconstructs
ICBs every call — 30× frame-rate collapse vs direct encoding
https://bugs.webkit.org/show_bug.cgi?id=320490
rdar://183458069
Reviewed by Dan Glastonbury.
Fix performance issue from drawIndirect and drawIndexedIndirect into
RenderBundles,
which WebKit strongly suggests using, but previously encountered a severe
performance
cliff.
With this change, we are able to maintain 60 fps with 2000 indirect draws in a
bundle
whereas previously we would drop under 1 fps.
Tests: fast/webgpu/render-bundle-draw-indexed-indirect.html
fast/webgpu/render-bundle-draw-indirect.html
* LayoutTests/fast/webgpu/render-bundle-draw-indexed-indirect-expected.txt:
Added.
* LayoutTests/fast/webgpu/render-bundle-draw-indexed-indirect.html: Added.
* LayoutTests/fast/webgpu/render-bundle-draw-indirect-expected.txt: Added.
* LayoutTests/fast/webgpu/render-bundle-draw-indirect.html: Added.
* Source/WebGPU/WebGPU/BindableResource.h:
* Source/WebGPU/WebGPU/Buffer.h:
(WebGPU::Buffer::contentsGeneration const):
* Source/WebGPU/WebGPU/Buffer.mm:
(WebGPU::Buffer::indirectBufferInvalidated):
* Source/WebGPU/WebGPU/Device.h:
* Source/WebGPU/WebGPU/Device.mm:
* Source/WebGPU/WebGPU/RenderBundleEncoder.h:
* Source/WebGPU/WebGPU/RenderBundleEncoder.mm:
(-[RenderBundleICBWithResources
initWithICB:containerBuffer:pipelineState:depthStencilState:cullMode:frontFace:depthClipMode:depthBias:depthBiasSlopeScale:depthBiasClamp:fragmentDynamicOffsetsBuffer:pipeline:minVertexCounts:indirectDraws:outOfBoundsReadFlag:]):
(-[RenderBundleICBWithResources indirectDrawsForSlot]):
(WebGPU::makeRenderBundleICBWithResources):
(WebGPU::RenderBundleEncoder::drawIndexedIndirect):
(WebGPU::RenderBundleEncoder::drawIndirect):
(WebGPU::RenderBundleEncoder::cleanup):
(WebGPU::RenderBundleEncoder::splitICB):
(-[RenderBundleICBWithResources
initWithICB:containerBuffer:pipelineState:depthStencilState:cullMode:frontFace:depthClipMode:depthBias:depthBiasSlopeScale:depthBiasClamp:fragmentDynamicOffsetsBuffer:pipeline:minVertexCounts:outOfBoundsReadFlag:]):
Deleted.
* Source/WebGPU/WebGPU/RenderPassEncoder.h:
* Source/WebGPU/WebGPU/RenderPassEncoder.mm:
(WebGPU::checkForIndirectDrawDeviceLost):
(WebGPU::RenderPassEncoder::newZeroedIndirectScratch):
(WebGPU::RenderPassEncoder::clampIndirectBufferDispatchBatched):
(WebGPU::RenderPassEncoder::clampIndirectIndexBufferDispatch1Batched):
(WebGPU::RenderPassEncoder::clampIndirectIndexBufferDispatch2Batched):
(WebGPU::RenderPassEncoder::executeBundles):
Canonical link: https://commits.webkit.org/318538@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications