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

Reply via email to