Skip to content

Fix WebGPU Conv auto_pad=SAME_UPPER padding calculation#27249

Merged
fs-eire merged 2 commits intomicrosoft:mainfrom
ingyukoh:fix/webgpu-conv-same-upper-padding
Feb 11, 2026
Merged

Fix WebGPU Conv auto_pad=SAME_UPPER padding calculation#27249
fs-eire merged 2 commits intomicrosoft:mainfrom
ingyukoh:fix/webgpu-conv-same-upper-padding

Conversation

@ingyukoh
Copy link
Contributor

@ingyukoh ingyukoh commented Feb 5, 2026

The WebGPU Conv and ConvTranspose operators were producing incorrect results when using auto_pad=SAME_UPPER with strides > 1.

Root cause: The head padding values were being unnecessarily recalculated after InferPadsAndOutputShape() had already computed the correct values. The recalculation formula could produce incorrect results.

Fix: Simply use pads[0] and pads[1] directly, which already contain the correct head padding values computed upstream. This matches the behavior of the TypeScript implementation.

Fixes #26734

The WebGPU Conv and ConvTranspose operators were producing incorrect
results when using auto_pad=SAME_UPPER with strides > 1.

Root cause: The head padding values were being unnecessarily recalculated
after InferPadsAndOutputShape() had already computed the correct values.
The recalculation formula could produce incorrect results.

Fix: Simply use pads[0] and pads[1] directly, which already contain the
correct head padding values computed upstream. This matches the behavior
of the TypeScript implementation.

Fixes microsoft#26734
@fs-eire
Copy link
Contributor

fs-eire commented Feb 5, 2026

/azp run Linux QNN CI Pipeline,Win_TRT_Minimal_CUDA_Test_CI,Windows ARM64 QNN CI Pipeline,Windows GPU Doc Gen CI Pipeline

@azure-pipelines
Copy link

Azure Pipelines successfully started running 4 pipeline(s).

@fs-eire
Copy link
Contributor

fs-eire commented Feb 5, 2026

The change itself looks good to me. Could you please add a test case in onnxruntime\test\providers\cpu\nn\conv_op_test.cc ?

@guschmue guschmue added the ep:WebGPU ort-web webgpu provider label Feb 5, 2026
Add test case Conv2D_AutoPad_SAME_UPPER_Stride2 that verifies correct
asymmetric padding calculation when auto_pad=SAME_UPPER and stride>1.

This catches the off-by-one padding bug fixed in this PR.
@ingyukoh
Copy link
Contributor Author

ingyukoh commented Feb 9, 2026

@fs-eire Added regression test Conv2D_AutoPad_SAME_UPPER_Stride2 as requested.

@fs-eire
Copy link
Contributor

fs-eire commented Feb 10, 2026

/azp run Linux QNN CI Pipeline,Win_TRT_Minimal_CUDA_Test_CI,Windows ARM64 QNN CI Pipeline,Windows GPU Doc Gen CI Pipeline

@azure-pipelines
Copy link

Azure Pipelines successfully started running 4 pipeline(s).

@fs-eire fs-eire enabled auto-merge (squash) February 10, 2026 22:57
@fs-eire fs-eire merged commit 8ffc33c into microsoft:main Feb 11, 2026
123 of 173 checks passed
@ingyukoh
Copy link
Contributor Author

Thanks for the review and guidance on adding the test!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ep:WebGPU ort-web webgpu provider

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] [Web] [WebGPU] [WebGL] Conv with auto_pad=SAME_UPPER produces wrong values

3 participants