Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 588fdd26e06c5082ec0f8fe9a3c513c8aef09100
https://github.com/WebKit/WebKit/commit/588fdd26e06c5082ec0f8fe9a3c513c8aef09100
Author: Chris Dumez <[email protected]>
Date: 2026-08-03 (Mon, 03 Aug 2026)
Changed paths:
M
LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audiobuffersource-connections-expected.txt
R
LayoutTests/platform/glib/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audiobuffersource-connections-expected.txt
M LayoutTests/platform/ios/TestExpectations
M LayoutTests/platform/mac/TestExpectations
M LayoutTests/platform/wpe/TestExpectations
M Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp
Log Message:
-----------
k-rate AudioParam input diverges from equivalent automation for
AudioBufferSourceNode.detune
https://bugs.webkit.org/show_bug.cgi?id=320892
Reviewed by Darin Adler.
The k-rate WPT test compares two AudioBufferSourceNodes that should produce
identical detune: a reference node driven by
setValueAtTime/linearRampToValueAtTime,
and a test node whose detune is modulated by a connected a-rate
ConstantSourceNode.
The reference node's k-rate read asks the timeline for a single value, which
lands
in the serial remainder loop of AudioParamTimeline::processLinearRamp. The
connected
input renders a full quantum through the vectorized VectorMath (vDSP/NEON) path.
The serial loop computed the ramp as one expression (value1 + valueDelta * x),
which
Apple clang contracts into a fused multiply-add (a single rounding), while the
vectorized path performs the multiply and add as separate operations (two
roundings,
no FMA). For detune (valueDelta = 2400) the two paths disagreed by ~1 ULP; that
difference flows through pow(2, detune/1200) into the pitch rate and
accumulates in
the buffer read index, failing the tolerance-0 comparison. playbackRate passed
only
because its valueDelta == 1 makes both roundings coincide.
Split the serial multiply-add into separate statements so FMA contraction cannot
occur, making the serial path bit-match the vectorized path. Keep the original
offset * k grouping (evaluated in double, staying bounded) rather than folding
into
k * valueDelta, which would overflow to FLT_MAX for very-close event times and
regress audioparam-close.html.
No new tests, rebaselined existing WPT test.
*
LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audiobuffersource-connections-expected.txt:
*
LayoutTests/platform/glib/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audiobuffersource-connections-expected.txt:
Removed.
* LayoutTests/platform/ios/TestExpectations:
* LayoutTests/platform/mac/TestExpectations:
* LayoutTests/platform/wpe/TestExpectations:
* Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp:
(WebCore::AudioParamTimeline::processLinearRamp):
Canonical link: https://commits.webkit.org/318516@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications